From 32e8f54c8acfa532dc1c810a92f3545adb95bc13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juraci=20Paix=C3=A3o=20Kr=C3=B6hling?= Date: Tue, 8 Jun 2021 11:34:57 +0200 Subject: [PATCH] Add compatibility matrix (#1465) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Juraci Paixão Kröhling --- .ci/install-kuttl.sh | 2 +- .github/workflows/base-checks.yaml | 2 +- .github/workflows/e2e-kubernetes.yaml | 2 +- .github/workflows/e2e-kuttl.yaml | 12 ++++++++++-- .github/workflows/release.yaml | 2 +- Makefile | 13 +++++++++++-- README.md | 20 ++++++++++++++++++++ build/Dockerfile | 2 +- go.mod | 2 +- kind-1.19.yaml | 18 ++++++++++++++++++ kind.yaml => kind-1.20.yaml | 1 + kind-1.21.yaml | 18 ++++++++++++++++++ kubeconfig | 17 +++++++++++++++++ kuttl-test.yaml | 2 -- 14 files changed, 101 insertions(+), 12 deletions(-) create mode 100644 kind-1.19.yaml rename kind.yaml => kind-1.20.yaml (77%) create mode 100644 kind-1.21.yaml create mode 100644 kubeconfig diff --git a/.ci/install-kuttl.sh b/.ci/install-kuttl.sh index 3b112938d..0b2808ddb 100755 --- a/.ci/install-kuttl.sh +++ b/.ci/install-kuttl.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -sudo curl -Lo /usr/local/bin/kubectl-kuttl https://github.com/kudobuilder/kuttl/releases/download/v0.7.2/kubectl-kuttl_0.7.2_linux_x86_64 +sudo curl -Lo /usr/local/bin/kubectl-kuttl https://github.com/kudobuilder/kuttl/releases/download/v0.10.0/kubectl-kuttl_0.10.0_linux_x86_64 sudo chmod +x /usr/local/bin/kubectl-kuttl export PATH=$PATH:/usr/local/bin diff --git a/.github/workflows/base-checks.yaml b/.github/workflows/base-checks.yaml index e318b8446..fa9097c2f 100644 --- a/.github/workflows/base-checks.yaml +++ b/.github/workflows/base-checks.yaml @@ -12,7 +12,7 @@ jobs: steps: - uses: actions/setup-go@v2.1.3 with: - go-version: '1.14.4' + go-version: 1.16 - uses: actions/checkout@v2.3.4 - uses: jpkrohling/setup-operator-sdk@v1.0.2 with: diff --git a/.github/workflows/e2e-kubernetes.yaml b/.github/workflows/e2e-kubernetes.yaml index c6a4fc711..198de7ac1 100644 --- a/.github/workflows/e2e-kubernetes.yaml +++ b/.github/workflows/e2e-kubernetes.yaml @@ -15,7 +15,7 @@ jobs: steps: - uses: actions/setup-go@v2.1.3 with: - go-version: '1.14.12' + go-version: 1.16 - uses: actions/checkout@v2.3.4 - name: "setup docker" run: ./.ci/setup-docker.sh diff --git a/.github/workflows/e2e-kuttl.yaml b/.github/workflows/e2e-kuttl.yaml index a2bec9834..2bc1eca3a 100644 --- a/.github/workflows/e2e-kuttl.yaml +++ b/.github/workflows/e2e-kuttl.yaml @@ -10,12 +10,18 @@ jobs: e2e-tests: name: End-to-end tests runs-on: ubuntu-20.04 + strategy: + matrix: + kube-version: + - "1.19" + - "1.20" + - "1.21" steps: - name: Set up Go uses: actions/setup-go@v2 with: - go-version: 1.15 + go-version: 1.16 - name: Check out code into the Go module directory uses: actions/checkout@v2 @@ -24,4 +30,6 @@ jobs: run: ./.ci/install-kuttl.sh - name: "run tests" - run: make install kuttl-e2e + env: + KUBE_VERSION: ${{ matrix.kube-version }} + run: make install kuttl-e2e KUBE_VERSION=$KUBE_VERSION diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 49bd8f111..19358b757 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -10,7 +10,7 @@ jobs: steps: - uses: actions/setup-go@v2.1.3 with: - go-version: '1.14.4' + go-version: 1.16 - uses: actions/checkout@v2.3.4 - uses: jpkrohling/setup-operator-sdk@v1.0.2 with: diff --git a/Makefile b/Makefile index a2fc2bb4c..0fdaf6e47 100644 --- a/Makefile +++ b/Makefile @@ -41,6 +41,9 @@ UNIT_TEST_PACKAGES := $(shell go list ./cmd/... ./pkg/... | grep -v elasticsearc TEST_OPTIONS = $(VERBOSE) -kubeconfig $(KUBERNETES_CONFIG) -namespacedMan ../../deploy/test/namespace-manifests.yaml -globalMan ../../deploy/test/global-manifests.yaml -root . +KUBE_VERSION ?= 1.21 +KIND_CONFIG ?= kind-$(KUBE_VERSION).yaml + .DEFAULT_GOAL := build .PHONY: check @@ -419,7 +422,7 @@ check-operatorhub-pr-template: .PHONY: local-jaeger-container local-jaeger-container: @echo "Starting local container with Jaeger. Check http://localhost:16686" - @docker run -d --rm -p 16686:16686 -p 6831:6831/udp --name jaeger jaegertracing/all-in-one:1.15 > /dev/null + @docker run -d --rm -p 16686:16686 -p 6831:6831/udp --name jaeger jaegertracing/all-in-one:1.22 > /dev/null .PHONY: changelog changelog: @@ -488,12 +491,18 @@ prepare-e2e-kuttl-tests: build docker build-assert-job # end-to-tests .PHONY: kuttl-e2e -kuttl-e2e: prepare-e2e-kuttl-tests run-kuttl-e2e +kuttl-e2e: prepare-e2e-kuttl-tests start-kind run-kuttl-e2e .PHONY: run-kuttl-e2e run-kuttl-e2e: $(KUTTL) test +start-kind: + kind create cluster --config $(KIND_CONFIG) + kind load docker-image local/jaeger-operator:e2e + kind load docker-image local/asserts:e2e + kind load docker-image jaegertracing/vertx-create-span:operator-e2e-tests + .PHONY: build-assert-job build-assert-job: @docker build -t local/asserts:e2e -f Dockerfile.asserts . \ No newline at end of file diff --git a/README.md b/README.md index 13c8dea43..148168122 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,26 @@ In this example, the Jaeger UI is available at http://192.168.122.34. The official documentation for the Jaeger Operator, including all its customization options, are available under the main [Jaeger Documentation](https://www.jaegertracing.io/docs/latest/operator/). +## Compatibility matrix + +### Jaeger Operator vs. Jaeger + +The Jaeger Operator follows the same versioning as the operand (Jaeger) up to the minor part of the version. For example, the Jaeger Operator v1.22.2 tracks Jaeger 1.22.0. The patch part of the version indicates the patch level of the operator itself, not that of Jaeger. Whenever a new patch version is released for Jaeger, we'll release a new patch version of the operator. + +### Jaeger Operator vs. Kubernetes + +We strive to be compatible with the widest range of Kubernetes versions as possible, but some changes to Kubernetes itself require us to break compatibility with older Kubernetes versions, be it because of code imcompatibilities, or in the name of maintainability. + +Our promise is that we'll follow what's common practice in the Kubernetes world and support N-2 versions, based on the release date of the Jaeger Operator. + +For instance, when we released v1.22.0, the latest Kubernetes version was v1.20.5. As such, the minimum version of Kubernetes we support for Jaeger Operator v1.22.0 is v1.18 and we tested it with up to 1.20. + +The Jaeger Operator *might* work on versions outside of the given range, but when opening new issues, please make sure to test your scenario on a supported version. + +| Jaeger Operator | Kubernetes | +|-----------------|----------------------| +| v1.23 | v1.19+ | +| v1.22 | v1.18 to v1.20 | ## (experimental) Generate Kubernetes manifest file diff --git a/build/Dockerfile b/build/Dockerfile index 089b6f029..322bef866 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -1,4 +1,4 @@ -FROM --platform=${BUILDPLATFORM:-linux/amd64} golang:1.14 as builder +FROM --platform=${BUILDPLATFORM:-linux/amd64} golang:1.16 as builder ARG JAEGER_VERSION ENV JAEGER_VERSION=${JAEGER_VERSION} diff --git a/go.mod b/go.mod index 3f2f7e611..336ebb6df 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/jaegertracing/jaeger-operator -go 1.14 +go 1.16 require ( github.com/Masterminds/semver v1.5.0 diff --git a/kind-1.19.yaml b/kind-1.19.yaml new file mode 100644 index 000000000..b08ee5643 --- /dev/null +++ b/kind-1.19.yaml @@ -0,0 +1,18 @@ +kind: Cluster +apiVersion: kind.x-k8s.io/v1alpha4 +nodes: +- role: control-plane + image: kindest/node:v1.19.11@sha256:07db187ae84b4b7de440a73886f008cf903fcf5764ba8106a9fd5243d6f32729 + kubeadmConfigPatches: + - | + kind: InitConfiguration + nodeRegistration: + kubeletExtraArgs: + node-labels: "ingress-ready=true" + extraPortMappings: + - containerPort: 80 + hostPort: 80 + protocol: TCP + - containerPort: 443 + hostPort: 443 + protocol: TCP diff --git a/kind.yaml b/kind-1.20.yaml similarity index 77% rename from kind.yaml rename to kind-1.20.yaml index d4c70073c..a87f66ebb 100644 --- a/kind.yaml +++ b/kind-1.20.yaml @@ -2,6 +2,7 @@ kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane + image: kindest/node:v1.20.7@sha256:cbeaf907fc78ac97ce7b625e4bf0de16e3ea725daf6b04f930bd14c67c671ff9 kubeadmConfigPatches: - | kind: InitConfiguration diff --git a/kind-1.21.yaml b/kind-1.21.yaml new file mode 100644 index 000000000..b848317ed --- /dev/null +++ b/kind-1.21.yaml @@ -0,0 +1,18 @@ +kind: Cluster +apiVersion: kind.x-k8s.io/v1alpha4 +nodes: +- role: control-plane + image: kindest/node:v1.21.1@sha256:80773e2069dd4a80a4929fdef050c1e463e1d5578c2cd9af3962cfbc230e1500 + kubeadmConfigPatches: + - | + kind: InitConfiguration + nodeRegistration: + kubeletExtraArgs: + node-labels: "ingress-ready=true" + extraPortMappings: + - containerPort: 80 + hostPort: 80 + protocol: TCP + - containerPort: 443 + hostPort: 443 + protocol: TCP diff --git a/kubeconfig b/kubeconfig new file mode 100644 index 000000000..0e2afd306 --- /dev/null +++ b/kubeconfig @@ -0,0 +1,17 @@ +clusters: +- cluster: + certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM1ekNDQWMrZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeE1EWXdOekV6TWpnd01Wb1hEVE14TURZd05URXpNamd3TVZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTFNlCk8xLzJ4ODI0SGsyM3psaUpwVThIbUF6a2F5RHJ3VEd3MXI4d0ZpNEQvbDMxL095aXRlekx6MWpyeXhIZnJUcGEKRTRwakZhQ0Z2YmEyYkhVZTlGRGVCVTVqNE4xQTROVzJGME9aanR1N0tqR1FsYWFIM25XNzNoWkZZNkNTUmdFVwp5TkJVck9RdUdNcUNQVzJiQkZINCtmL280VFYycXJ0WGxhRUdyZTZyTFNaT1laUUNzNkk3NnlNak1MaHVDakhoCjgrVnhsN0RlQ0hHQ2Y1dDFwQmlRckU1Nkl1MkF0N0NLYWJqYnFBZGhoZytmTG4wYjAzdE1kL3NQMEw3UnN5MFMKN2htYy9WVU54bUdSSXpBbis3Mnh3QmVpazlIaXFjaWFkbjllTFM1MFM0N3h0VXZTOUZnMUczdkE5YlVkbnFZRApwQ1U0cnJ0VTBTWEsrWis2Y3pFQ0F3RUFBYU5DTUVBd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZINDhUZEt3eGk1bG8zMGN2R05XUEFTWDFtRWtNQTBHQ1NxR1NJYjMKRFFFQkN3VUFBNElCQVFCSExTb1ZsVWtlOXQyeDVzczJyc1d4TVBkUFJvMkUwYkRBVjZxY3hhK3F4SG9kVmdlKwozeXczNzNvRlFpK2ZVN09tSWZMdXlwb3lYaVZvYkJFOGtXV3d5VEx0aklmTDJzWlV6ZlhQUndiRGVqM2JLU0VECjZodnpMR3RHOXZoMEhQUTh6YkdkQkV0ZHpieVBZK0VISmpOUzlERG0zbEVCZ3lzSXV6Y0FYVDJGdEJ2enR6cUUKbkJ2eDVrWHdPVXBJSURYSXFnOEFJeXh5TU5NMERSOFdXd1psQVg1Qk1CT0t5WmlzM1ZqcGJlanpuTzBjVHprcQpqN3JHZmxMS0JSUTlYZ3Z3UFVpZjIxbjJMQVRnb2hHTk1mK0pOeXpnU2JrRnNBbVBHQjhaVHZTeWhESldIbnF1CkExUkI3OFJqWDRkL2E0a2JxMTkwdTVHV3ZZVCtkNytTa2RsNQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + server: https://127.0.0.1:45985 + name: cluster +contexts: +- context: + cluster: cluster + user: user + name: cluster +current-context: cluster +preferences: {} +users: +- name: user + user: + client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURJVENDQWdtZ0F3SUJBZ0lJSlVQUWFjSGhkNWN3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TVRBMk1EY3hNekk0TURGYUZ3MHlNakEyTURjeE16STRNRE5hTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQTJFdk9EWFlnTkxTWXFXd24KczBUMEdMK3V5eWxsSDJmRGNtMDdPcDJFN2RlQ0JmQWF4YUYwakErTElhQTVscUxHVGlHcUFGenZIMW82SlY3VwpBOURZdVNzYzdmUEkrVlBHYUV2cTVpd05wbmdvOFl5eUs4d2lTdGNYKzl0RnpHSzd0ZjBXajNJZHN6ZkFSZ1NWClk1aDdmUlJJeS9qSlJSb3RoVFlaTERmeEVxQTlSOVNwZTA0WTF1RlVpcE5IOGswUlBuTzhxVlg4ZUp3d3kxdHIKejVUOC9jMm4wYUtDUXh4TEw5MzJCQ1kveUlUdUlUTTFGeFBQMVNEZ081Qk90SVk4L2VTeUxWeTljNnlLanRNVApkRGZPTWdOMTJldUttQzY0cTRka3oxeXcyT3BkemF0bllNQmZPS3V5TjZRaXpLS0d0cTdQa1ZpRUFKOGsyS0FrCm84MFl3d0lEQVFBQm8xWXdWREFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RBWURWUjBUQVFIL0JBSXdBREFmQmdOVkhTTUVHREFXZ0JSK1BFM1NzTVl1WmFOOUhMeGpWandFbDlaaApKREFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBVGtVUVBUOWN3emFBQ0Z4ZDF6dHJJTzBOUWdhZnozQkpvL2s2CmdFcnJ4eG5CMGZQb1BFblgwY0dYMG9TWkY1MkJ3T3I2L3hxcUNhSFpXc0duYjdEekRZRTNick1jNjVwa0tQRlcKNDQ5Yjg5R1VHMndzdmJUZ3ZDTDJxY1FBTlZ3ZkpNRFlWTEdGbFFtUDA3ZWZJMEpPVVF5T1lFNmNhWGZVcW5wUQpjZW9aZVNpem5IRlV5L0JIeGNOZnkvNUd6STVMT0IxanowY0w4VkxHNXJpQWRaazF0T3E2d1piOFBXejYzNFV5CklqaDZYNnBXb2FGZUVuQjJ3MnNXdWQxRFlFeE9rYllIQkFoMzRsbm1sYWx4MlBMNGV5ZkpFRjJOdmpwaTBTVk4KS1RQbzk5MExlUU9rcE9pRHJZT0VwT0k0MFByK0o3TFBiUEZGMk9Dck1HQTZtdG4wUmc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb2dJQkFBS0NBUUVBMkV2T0RYWWdOTFNZcVd3bnMwVDBHTCt1eXlsbEgyZkRjbTA3T3AyRTdkZUNCZkFhCnhhRjBqQStMSWFBNWxxTEdUaUdxQUZ6dkgxbzZKVjdXQTlEWXVTc2M3ZlBJK1ZQR2FFdnE1aXdOcG5nbzhZeXkKSzh3aVN0Y1grOXRGekdLN3RmMFdqM0lkc3pmQVJnU1ZZNWg3ZlJSSXkvakpSUm90aFRZWkxEZnhFcUE5UjlTcAplMDRZMXVGVWlwTkg4azBSUG5POHFWWDhlSnd3eTF0cno1VDgvYzJuMGFLQ1F4eExMOTMyQkNZL3lJVHVJVE0xCkZ4UFAxU0RnTzVCT3RJWTgvZVN5TFZ5OWM2eUtqdE1UZERmT01nTjEyZXVLbUM2NHE0ZGt6MXl3Mk9wZHphdG4KWU1CZk9LdXlONlFpektLR3RxN1BrVmlFQUo4azJLQWtvODBZd3dJREFRQUJBb0lCQUJyUm0yVHo1cDVpWGlOegpzNkI0eGtOalVRc0R3UFFaNjVQK2t6OTdWSVloR0pBZjYxSGg2UStNeGRXUGhsUjFMbDExc3h5RWFXbmJ5Q1htCkVtYzZ1QVNOb2ZLbkxaNHNrd2RQa25xanI3V2FaSWsreHNERGVPVUtzb0NaK1plVURtNU1TVVhVQW5hOFRPemgKbUp4V3hja0dnTmc1cXNzVXFkeEFqdko2cFR1SHhHVmdQL0xjSHBzRzV4a1BXN1QvRDR0VkMvZmhQWjNsSGJGYQpQcEVCOTFLN2hieE9JUVVORkoxcHNySzlmdUpBdWxnYzh5MHVwUGtWYXd1bEtBWTF2K2Npa1Q4bkNHdGpYVmkwCkJPZ3Y0RnM5WVFMMGthZVhWaDRrSjBiZndSWmoxcVdSQkZEOWl6YXN1Z0pMOWRKNWNxeUJxWC9ERC96MDNQZUMKcEVsaDZ6RUNnWUVBNERwVzc0REI0R0V4TXErWTJteHRHc1FLZjRQUmxWR3NHKytIK25Va1h1N3hXY1BUU21kVApGVVY1TzcrdmpuYXIyVTl2NU5rbDlMazkwSlpvN3RjVHF6VGNjUWRLSG1nNzRLR1V4OFArd3RKU2RKdXpIWDBICktnQmZzdHdLVmdMdUk2WTdVOWt6dU9zNWN6R1JZaWQrMWZXK3FDc3NqUklkYlhDQWk0M3krbThDZ1lFQTl2Ry8KVnJUc0VtNFVYNXFpRVNTQS9rZGJOYzc0T2hEY3NDaGgxN09FRTR1V3l2REVadk41UTdMZnR3cE5Mclo3djRzbgpWRFVNK2czakRwcC95TnNQZEhWNEpOMzdzekdoS0JEYzFjdHEzY2k3eFhBeTNNQWo2WHFoY2JhYzVPR01xOGFLCjY5V2V5aFYvVklwRHBJZXN3a1Z1dkc0bjhLRmJ5Y3NPeUFaNHdPMENnWUJZeWVFbzM0Umw5RGFHQ3BCdFZXZnkKcEZRLzRCTzZtK2VaL0VTTkFadlFWNitNU3dXOHZhTmhsZXdHbzhYQmxPNUJrN29NRll4NUZtMEt6clJvZHhRYgp4RWZTSGYvVWdKUE5SRTVrdUJDR1ZzQTkybldYcEsyVWpTZFg3TmZPN1VRZEs3THNaZUtjUTlDdzg1ek5FRFNpClJyZ2pZVTAzNDBkeDBZMmxOU1ZVMHdLQmdEWm8vYWUxSlc3S0ltTU9SemRQdTd4TExLV21mTHNPakJHa1ZDcWEKdXpjelFuNWtubUd3czc5ZTRqd0tZUWN4M2dKT1B0UW0vRHo4WWxNTlo2cHgyZTNuRkJuTGIzSUVOV1lHa1NIcQpPQm0xNk9tUDF5VWNrTTBZNEFtV0d1dXpack5TZzdtQzBBSG15cTl0NTRtUSsxZXl4THR2Nmd6ekFLNXR0MHdMCllQL2hBb0dBRWV4S0tkRUFleGFnNWFiQzg2SGtGUzl4ZE5xTWlWYU9UbjdLcmFVU21kNVhxQzFoQWVhb1ZvRUgKUkY1cjN1bDFvVnVsSXdsMUZVSVNtZEd4YTNIbSt0L0FKRGpUUWIrQUJRdGNOMGhDY1V6RVpGSUNCY25OVGRKZgp3TlRNZmR5NTB6VVVCMFpqa292bW8vQjNRNTRGWktqRmJTVmN3MDJPclJxVTdOemdYZVk9Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg== diff --git a/kuttl-test.yaml b/kuttl-test.yaml index 8e86df0e4..11acdf368 100644 --- a/kuttl-test.yaml +++ b/kuttl-test.yaml @@ -1,6 +1,5 @@ apiVersion: kuttl.dev/v1beta1 kind: TestSuite -startKIND: true crdDir: ./tests/_build/crds/ artifactsDir: ./tests/_build/artifacts/ kindContainers: @@ -15,7 +14,6 @@ commands: - command: kubectl wait --namespace ingress-nginx --for=condition=ready pod --selector=app.kubernetes.io/component=controller --timeout=150s - command: sleep 5s -kindConfig: ./kind.yaml testDirs: - ./tests/e2e/ timeout: 330