diff --git a/hack/e2e-apps/kubernetes.bats b/hack/e2e-apps/kubernetes.bats index 5f3ea777..9d71d912 100644 --- a/hack/e2e-apps/kubernetes.bats +++ b/hack/e2e-apps/kubernetes.bats @@ -1,11 +1,16 @@ #!/usr/bin/env bats -@test "Create a tenant Kubernetes control plane" { +run_kubernetes_test() { + local version_expr="$1" + local test_name="$2" + local port="$3" + local k8s_version=$(yq "$version_expr" packages/apps/kubernetes/files/versions.yaml) + kubectl apply -f - < tenantkubeconfig + + # Update the kubeconfig to use localhost for the API server + yq -i ".clusters[0].cluster.server = \"https://localhost:${port}\"" tenantkubeconfig + + # Set up port forwarding to the Kubernetes API server for a 40 second timeout + bash -c 'timeout 40s kubectl port-forward service/kubernetes-'"${test_name}"' -n tenant-test '"${port}"':6443 > /dev/null 2>&1 &' + + # Verify the Kubernetes version matches what we expect (retry for up to 20 seconds) + timeout 20 sh -ec 'until kubectl --kubeconfig tenantkubeconfig version 2>/dev/null | grep -Fq "Server Version: ${k8s_version}"; do sleep 5; done' + + # Wait for all machine deployment replicas to be ready (timeout after 10 minutes) + kubectl wait machinedeployment kubernetes-${test_name}-md0 -n tenant-test --timeout=10m --for=jsonpath='{.status.v1beta2.readyReplicas}'=2 + + # Clean up by deleting the Kubernetes resource + kubectl -n tenant-test delete kuberneteses.apps.cozystack.io $test_name + +} + +@test "Create a tenant Kubernetes control plane with latest version" { + run_kubernetes_test 'keys | sort_by(.) | .[-1]' 'test-latest-version' '59991' +} +@test "Create a tenant Kubernetes control plane with previous version" { + run_kubernetes_test 'keys | sort_by(.) | .[-2]' 'test-previous-version' '59992' } diff --git a/packages/apps/kubernetes/Chart.yaml b/packages/apps/kubernetes/Chart.yaml index fe291d9b..2c49af9b 100644 --- a/packages/apps/kubernetes/Chart.yaml +++ b/packages/apps/kubernetes/Chart.yaml @@ -16,10 +16,10 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.25.3 +version: 0.26.0 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: 1.32.4 +appVersion: 1.32.6 diff --git a/packages/apps/kubernetes/Makefile b/packages/apps/kubernetes/Makefile index d726b646..7cd8410c 100644 --- a/packages/apps/kubernetes/Makefile +++ b/packages/apps/kubernetes/Makefile @@ -7,6 +7,7 @@ include ../../../scripts/package.mk generate: readme-generator -v values.yaml -s values.schema.json -r README.md + yq -o=json -i '.properties.version.enum = (load("files/versions.yaml") | keys)' values.schema.json yq -o json -i '.properties.addons.properties.ingressNginx.properties.exposeMethod.enum = ["Proxied","LoadBalancer"]' values.schema.json yq -o json -i '.properties.controlPlane.properties.apiServer.properties.resourcesPreset.enum = $(PRESET_ENUM)' values.schema.json yq -o json -i '.properties.controlPlane.properties.controllerManager.properties.resourcesPreset.enum = $(PRESET_ENUM)' values.schema.json diff --git a/packages/apps/kubernetes/README.md b/packages/apps/kubernetes/README.md index cedd4ca7..d885de11 100644 --- a/packages/apps/kubernetes/README.md +++ b/packages/apps/kubernetes/README.md @@ -86,6 +86,7 @@ See the reference for components utilized in this service: | `host` | Hostname used to access the Kubernetes cluster externally. Defaults to `.` when empty. | `""` | | `controlPlane.replicas` | Number of replicas for Kubernetes control-plane components. | `2` | | `storageClass` | StorageClass used to store user data. | `replicated` | +| `version` | Kubernetes version given as vMAJOR.MINOR | `v1.32` | | `nodeGroups` | nodeGroups configuration | `{}` | ### Cluster Addons diff --git a/packages/apps/kubernetes/files/versions.yaml b/packages/apps/kubernetes/files/versions.yaml new file mode 100644 index 00000000..f9236751 --- /dev/null +++ b/packages/apps/kubernetes/files/versions.yaml @@ -0,0 +1,6 @@ +"v1.28": "v1.28.15" +"v1.29": "v1.29.15" +"v1.30": "v1.30.14" +"v1.31": "v1.31.10" +"v1.32": "v1.32.6" +"v1.33": "v1.33.0" diff --git a/packages/apps/kubernetes/templates/_versions.tpl b/packages/apps/kubernetes/templates/_versions.tpl new file mode 100644 index 00000000..fcd4cee1 --- /dev/null +++ b/packages/apps/kubernetes/templates/_versions.tpl @@ -0,0 +1,7 @@ +{{- define "kubernetes.versionMap" }} +{{- $versionMap := .Files.Get "files/versions.yaml" | fromYaml }} +{{- if not (hasKey $versionMap .Values.version) }} + {{- printf `Kubernetes version %s is not supported, allowed versions are %s` $.Values.version (keys $versionMap) | fail }} +{{- end }} +{{- index $versionMap .Values.version }} +{{- end }} diff --git a/packages/apps/kubernetes/templates/cluster.yaml b/packages/apps/kubernetes/templates/cluster.yaml index 7f3144a1..7a87660e 100644 --- a/packages/apps/kubernetes/templates/cluster.yaml +++ b/packages/apps/kubernetes/templates/cluster.yaml @@ -151,7 +151,7 @@ spec: labels: policy.cozystack.io/allow-to-etcd: "true" replicas: 2 - version: {{ $.Chart.AppVersion }} + version: {{ include "kubernetes.versionMap" $ }} --- apiVersion: cozystack.io/v1alpha1 kind: WorkloadMonitor @@ -290,7 +290,7 @@ spec: kind: KubevirtMachineTemplate name: {{ $.Release.Name }}-{{ $groupName }}-{{ $kubevirtmachinetemplateHash }} namespace: {{ $.Release.Namespace }} - version: v{{ $.Chart.AppVersion }} + version: {{ include "kubernetes.versionMap" $}} --- apiVersion: cluster.x-k8s.io/v1beta1 kind: MachineHealthCheck diff --git a/packages/apps/kubernetes/values.schema.json b/packages/apps/kubernetes/values.schema.json index 20cc0e74..a8f22efc 100644 --- a/packages/apps/kubernetes/values.schema.json +++ b/packages/apps/kubernetes/values.schema.json @@ -123,6 +123,19 @@ "description": "StorageClass used to store user data.", "default": "replicated" }, + "version": { + "type": "string", + "description": "Kubernetes version given as vMAJOR.MINOR", + "default": "v1.32", + "enum": [ + "v1.28", + "v1.29", + "v1.30", + "v1.31", + "v1.32", + "v1.33" + ] + }, "addons": { "type": "object", "properties": { diff --git a/packages/apps/kubernetes/values.yaml b/packages/apps/kubernetes/values.yaml index 3909e73d..10f0159e 100644 --- a/packages/apps/kubernetes/values.yaml +++ b/packages/apps/kubernetes/values.yaml @@ -3,10 +3,11 @@ ## @param host Hostname used to access the Kubernetes cluster externally. Defaults to `.` when empty. ## @param controlPlane.replicas Number of replicas for Kubernetes control-plane components. ## @param storageClass StorageClass used to store user data. +## @param version Kubernetes version given as vMAJOR.MINOR ## host: "" storageClass: replicated - +version: "v1.32" ## @param nodeGroups [object] nodeGroups configuration ## nodeGroups: diff --git a/packages/apps/versions_map b/packages/apps/versions_map index 5c8fa5dc..2ba3a0cf 100644 --- a/packages/apps/versions_map +++ b/packages/apps/versions_map @@ -61,7 +61,7 @@ kubernetes 0.24.0 62cb694d kubernetes 0.25.0 70f82667 kubernetes 0.25.1 acd4663a kubernetes 0.25.2 08cb7c0f -kubernetes 0.25.3 HEAD +kubernetes 0.26.0 HEAD mysql 0.1.0 263e47be mysql 0.2.0 c24a103f mysql 0.3.0 53f2365e @@ -150,7 +150,7 @@ tcp-balancer 0.4.2 4369b031 tcp-balancer 0.5.0 08cb7c0f tcp-balancer 0.5.1 HEAD tenant 1.10.0 4369b031 -tenant 1.11.0 70f82667 +tenant 1.11.0 08cb7c0f tenant 1.11.1 HEAD virtual-machine 0.1.4 f2015d65 virtual-machine 0.1.5 263e47be @@ -169,7 +169,7 @@ virtual-machine 0.9.1 93bdf411 virtual-machine 0.10.0 6130f43d virtual-machine 0.10.2 632224a3 virtual-machine 0.11.0 4369b031 -virtual-machine 0.12.0 70f82667 +virtual-machine 0.12.0 acd4663a virtual-machine 0.12.1 HEAD vm-disk 0.1.0 d971f2ff vm-disk 0.1.1 6130f43d @@ -187,7 +187,7 @@ vm-instance 0.6.0 721c12a7 vm-instance 0.7.0 6130f43d vm-instance 0.7.2 632224a3 vm-instance 0.8.0 4369b031 -vm-instance 0.9.0 70f82667 +vm-instance 0.9.0 acd4663a vm-instance 0.10.0 HEAD vpn 0.1.0 263e47be vpn 0.2.0 53f2365e