diff --git a/README.md b/README.md index b38916d4ed1..2beb60bc59b 100644 --- a/README.md +++ b/README.md @@ -40,15 +40,15 @@ Gardener takes part in the [Certified Kubernetes Conformance Program](https://ww Continuous conformance test results of the latest stable Gardener release are uploaded regularly to the CNCF test grid: -| Provider/K8s | v1.31 | v1.30 | v1.29 | v1.28 | v1.27 | v1.26 | v1.25 | -| ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | -| **AWS** | [![Gardener v1.31 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.31%20AWS/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.31%20AWS) | [![Gardener v1.30 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.30%20AWS/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.30%20AWS) | [![Gardener v1.29 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.29%20AWS/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.29%20AWS) | [![Gardener v1.28 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.28%20AWS/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.28%20AWS) | [![Gardener v1.27 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.27%20AWS/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.27%20AWS) | [![Gardener v1.26 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.27%20AWS/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.26%20AWS) | [![Gardener v1.25 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.25%20AWS/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.25%20AWS) | -| **Azure** | [![Gardener v1.31 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.31%20Azure/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.31%20Azure) | [![Gardener v1.30 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.30%20Azure/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.30%20Azure) | [![Gardener v1.29 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.29%20Azure/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.29%20Azure) | [![Gardener v1.28 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.28%20Azure/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.28%20Azure) | [![Gardener v1.27 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.27%20Azure/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.27%20Azure) | [![Gardener v1.26 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.26%20Azure/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.26%20Azure) | [![Gardener v1.25 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.25%20Azure/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.25%20Azure) | -| **GCP** | [![Gardener v1.31 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.31%20GCE/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.31%20GCE) | [![Gardener v1.30 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.30%20GCE/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.30%20GCE) | [![Gardener v1.29 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.29%20GCE/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.29%20GCE) | [![Gardener v1.28 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.28%20GCE/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.28%20GCE) | [![Gardener v1.27 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.27%20GCE/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.27%20GCE) | [![Gardener v1.26 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.26%20GCE/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.26%20GCE) | [![Gardener v1.25 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.25%20GCE/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.25%20GCE) | -| **OpenStack** | [![Gardener v1.31 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.31%20OpenStack/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.31%20OpenStack) | [![Gardener v1.30 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.30%20OpenStack/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.30%20OpenStack) | [![Gardener v1.29 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.29%20OpenStack/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.29%20OpenStack) | [![Gardener v1.28 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.28%20OpenStack/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.28%20OpenStack) | [![Gardener v1.27 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.27%20OpenStack/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.27%20OpenStack) | [![Gardener v1.26 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.26%20OpenStack/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.26%20OpenStack) | [![Gardener v1.25 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.25%20OpenStack/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.25%20OpenStack) | -| **Alicloud** | [![Gardener v1.31 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.31%20Alibaba%20Cloud/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.31%20Alibaba%20Cloud) | [![Gardener v1.30 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.30%20Alibaba%20Cloud/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.30%20Alibaba%20Cloud) | [![Gardener v1.29 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.29%20Alibaba%20Cloud/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.29%20Alibaba%20Cloud) | [![Gardener v1.28 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.28%20Alibaba%20Cloud/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.28%20Alibaba%20Cloud) | [![Gardener v1.27 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.27%20Alibaba%20Cloud/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.27%20Alibaba%20Cloud) | [![Gardener v1.26 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.26%20Alibaba%20Cloud/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.26%20Alibaba%20Cloud) | [![Gardener v1.25 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.25%20Alibaba%20Cloud/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.25%20Alibaba%20Cloud) | -| **Equinix Metal** | N/A | N/A | N/A | N/A | N/A | N/A | N/A | -| **vSphere** | N/A | N/A | N/A | N/A | N/A | N/A | N/A | +| Provider/K8s | v1.32 | v1.31 | v1.30 | v1.29 | v1.28 | v1.27 | v1.26 | v1.25 | +| ------------ |-----| ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | +| **AWS** | N/A | [![Gardener v1.31 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.31%20AWS/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.31%20AWS) | [![Gardener v1.30 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.30%20AWS/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.30%20AWS) | [![Gardener v1.29 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.29%20AWS/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.29%20AWS) | [![Gardener v1.28 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.28%20AWS/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.28%20AWS) | [![Gardener v1.27 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.27%20AWS/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.27%20AWS) | [![Gardener v1.26 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.27%20AWS/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.26%20AWS) | [![Gardener v1.25 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.25%20AWS/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.25%20AWS) | +| **Azure** | N/A | [![Gardener v1.31 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.31%20Azure/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.31%20Azure) | [![Gardener v1.30 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.30%20Azure/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.30%20Azure) | [![Gardener v1.29 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.29%20Azure/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.29%20Azure) | [![Gardener v1.28 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.28%20Azure/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.28%20Azure) | [![Gardener v1.27 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.27%20Azure/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.27%20Azure) | [![Gardener v1.26 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.26%20Azure/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.26%20Azure) | [![Gardener v1.25 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.25%20Azure/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.25%20Azure) | +| **GCP** | N/A | [![Gardener v1.31 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.31%20GCE/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.31%20GCE) | [![Gardener v1.30 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.30%20GCE/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.30%20GCE) | [![Gardener v1.29 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.29%20GCE/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.29%20GCE) | [![Gardener v1.28 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.28%20GCE/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.28%20GCE) | [![Gardener v1.27 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.27%20GCE/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.27%20GCE) | [![Gardener v1.26 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.26%20GCE/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.26%20GCE) | [![Gardener v1.25 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.25%20GCE/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.25%20GCE) | +| **OpenStack** | N/A | [![Gardener v1.31 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.31%20OpenStack/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.31%20OpenStack) | [![Gardener v1.30 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.30%20OpenStack/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.30%20OpenStack) | [![Gardener v1.29 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.29%20OpenStack/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.29%20OpenStack) | [![Gardener v1.28 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.28%20OpenStack/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.28%20OpenStack) | [![Gardener v1.27 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.27%20OpenStack/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.27%20OpenStack) | [![Gardener v1.26 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.26%20OpenStack/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.26%20OpenStack) | [![Gardener v1.25 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.25%20OpenStack/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.25%20OpenStack) | +| **Alicloud** | N/A | [![Gardener v1.31 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.31%20Alibaba%20Cloud/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.31%20Alibaba%20Cloud) | [![Gardener v1.30 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.30%20Alibaba%20Cloud/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.30%20Alibaba%20Cloud) | [![Gardener v1.29 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.29%20Alibaba%20Cloud/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.29%20Alibaba%20Cloud) | [![Gardener v1.28 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.28%20Alibaba%20Cloud/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.28%20Alibaba%20Cloud) | [![Gardener v1.27 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.27%20Alibaba%20Cloud/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.27%20Alibaba%20Cloud) | [![Gardener v1.26 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.26%20Alibaba%20Cloud/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.26%20Alibaba%20Cloud) | [![Gardener v1.25 Conformance Tests](https://testgrid.k8s.io/q/summary/conformance-gardener/Gardener,%20v1.25%20Alibaba%20Cloud/tests_status?style=svg)](https://testgrid.k8s.io/conformance-gardener#Gardener,%20v1.25%20Alibaba%20Cloud) | +| **Equinix Metal** | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | +| **vSphere** | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | Get an overview of the test results at [testgrid](https://testgrid.k8s.io/conformance-gardener). diff --git a/docs/development/new-kubernetes-version.md b/docs/development/new-kubernetes-version.md index d89abf213e5..2f0960617b4 100644 --- a/docs/development/new-kubernetes-version.md +++ b/docs/development/new-kubernetes-version.md @@ -51,16 +51,27 @@ There is a CI/CD job that runs periodically and releases a new `hyperkube` image ### Adapting Gardener + + - Allow instantiation of a Kubernetes client for the new minor version and update the `README.md`: - See [this](https://github.com/gardener/gardener/pull/5255/commits/63bdae022f1cb1c9cbd1cd49b557545dca2ec32a) example commit. - The list of supported versions is meanwhile maintained [here](../../pkg/utils/validation/kubernetesversion/version.go) in the `SupportedVersions` variable. - Maintain the Kubernetes feature gates used for validation of `Shoot` resources: - The feature gates are maintained in [this](../../pkg/utils/validation/features/featuregates.go) file. - - To maintain this list for new Kubernetes versions, run `hack/compare-k8s-feature-gates.sh ` (e.g. `hack/compare-k8s-feature-gates.sh v1.26 v1.27`). - - It will present 3 lists of feature gates: those added and those removed in `` compared to `` and feature gates that got locked to default in ``. - - Add all added feature gates to the map with `` as `AddedInVersion` and no `RemovedInVersion`. - - For any removed feature gates, add `` as `RemovedInVersion` to the already existing feature gate in the map. - - For feature gates locked to default, add `` as `LockedToDefaultInVersion` to the already existing feature gate in the map. + - To maintain this list for new Kubernetes versions follow this guide: + - **Alpha & Beta Feature Gates:** + - Open: https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/#feature-gates-for-alpha-or-beta-features + - Search the page for the new Kubernetes version, e.g. "1.32". + - Add new alpha feature gates that have been added "Since" the new Kubernetes version. + - Change the `Default` for Beta feature gates that have been promoted "Since" the new Kubernetes version. + - **Graduated & Deprecated Feature Gates:** + - Open: https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/#feature-gates-for-graduated-or-deprecated-features + - Search the page for the new Kubernetes version, e.g. "1.32". + - Change `LockedToDefaultInVersion` for GA and Deprecated feature gates that have been graduated/deprecated "Since" the new Kubernetes version. + - **Removed Feature Gates:** + - Open: https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates-removed/#feature-gates-that-are-removed + - Search the page for the **current** Kubernetes version, e.g. if the new version is "1.32", search for "1.31". + - Set `RemovedInVersion` to the **new** Kubernetes version for feature gates that have been removed after the **current** Kubernetes version according to the "To" column. - See [this](https://github.com/gardener/gardener/pull/5255/commits/97923b0604300ff805def8eae981ed388d5e4a83) example commit. - Maintain the Kubernetes `kube-apiserver` admission plugins used for validation of `Shoot` resources: - The admission plugins are maintained in [this](../../pkg/utils/validation/admissionplugins/admissionplugins.go) file. diff --git a/docs/usage/shoot-operations/supported_k8s_versions.md b/docs/usage/shoot-operations/supported_k8s_versions.md index 2304f653720..750eec4ea67 100644 --- a/docs/usage/shoot-operations/supported_k8s_versions.md +++ b/docs/usage/shoot-operations/supported_k8s_versions.md @@ -16,7 +16,7 @@ The minimum version of a seed cluster that can be connected to Gardener is **`1. ## Shoot Clusters -Gardener itself is capable of spinning up clusters with Kubernetes versions **`1.25`** up to **`1.31`**. +Gardener itself is capable of spinning up clusters with Kubernetes versions **`1.25`** up to **`1.32`**. However, the concrete versions that can be used for shoot clusters depend on the installed provider extension. Consequently, please consult the documentation of your provider extension to see which Kubernetes versions are supported for shoot clusters. diff --git a/example/gardener-local/kind/cluster/values.yaml b/example/gardener-local/kind/cluster/values.yaml index cb5168cc715..acd1845159d 100644 --- a/example/gardener-local/kind/cluster/values.yaml +++ b/example/gardener-local/kind/cluster/values.yaml @@ -1,4 +1,4 @@ -image: kindest/node:v1.31.2@sha256:18fbefc20a7113353c7b75b5c869d7145a6abd6269154825872dc59c1329912e +image: kindest/node:v1.32.0@sha256:c48c62eac5da28cdadcf560d1d8616cfa6783b58f0d94cf63ad1bf49600cb027 gardener: apiserverRelay: diff --git a/example/operator/20-garden.yaml b/example/operator/20-garden.yaml index 26854e38273..7c185abc40c 100644 --- a/example/operator/20-garden.yaml +++ b/example/operator/20-garden.yaml @@ -83,7 +83,7 @@ spec: capacity: 10Gi # className: default kubernetes: - version: 1.31.1 + version: 1.32.0 # kubeAPIServer: # eventTTL: 1h # featureGates: diff --git a/example/provider-local/garden/cloudprofile/cloudprofile.yaml b/example/provider-local/garden/cloudprofile/cloudprofile.yaml index 422bf36bcef..3ba381c30b4 100644 --- a/example/provider-local/garden/cloudprofile/cloudprofile.yaml +++ b/example/provider-local/garden/cloudprofile/cloudprofile.yaml @@ -8,6 +8,7 @@ spec: - name: local kubernetes: versions: + - version: 1.32.0 - version: 1.31.1 - version: 1.30.0 - version: 1.29.0 diff --git a/hack/compare-k8s-feature-gates.sh b/hack/compare-k8s-feature-gates.sh deleted file mode 100755 index 38fa3933ed7..00000000000 --- a/hack/compare-k8s-feature-gates.sh +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env bash -# -# SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Gardener contributors -# -# SPDX-License-Identifier: Apache-2.0 - -set -e - -usage() { - echo "Usage:" - echo "> compare-k8s-feature-gates.sh [ -h | ]" - echo - echo ">> For example: compare-k8s-feature-gates.sh 1.26 1.27" - - exit 0 -} - -if [ "$1" == "-h" ] || [ "$#" -ne 2 ]; then - usage -fi - -versions=("$1" "$2") -files=( - "pkg/features/kube_features.go" - "staging/src/k8s.io/apiserver/pkg/features/kube_features.go" - "staging/src/k8s.io/apiextensions-apiserver/pkg/features/kube_features.go" - "staging/src/k8s.io/controller-manager/pkg/features/kube_features.go" - "staging/src/k8s.io/client-go/features/known_features.go" - "staging/src/k8s.io/component-base/logs/api/v1/kube_features.go" - "staging/src/k8s.io/component-base/metrics/features/kube_features.go" -) - -out_dir=$(mktemp -d) -function cleanup_output { - rm -rf "$out_dir" -} -trap cleanup_output EXIT - -for version in "${versions[@]}"; do - rm -f "${out_dir}/featuregates-${version}.txt" "${out_dir}/locked-featuregates-${version}.txt" "${out_dir}/constants.txt" "${out_dir}/kube_features.go" - touch "${out_dir}/featuregates-${version}.txt" "${out_dir}/locked-featuregates-${version}.txt" "${out_dir}/constants.txt" "${out_dir}/kube_features.go" - - for file in "${files[@]}"; do - { wget -q -O - "https://raw.githubusercontent.com/kubernetes/kubernetes/release-${version}/${file}" | grep -v '^\s*//' || echo; } >> "${out_dir}/kube_features.go" - grep -E '{Default: .*, PreRelease: .*},' "${out_dir}/kube_features.go" | awk '{print $1}' | { grep -Eo '[A-Z]\w+' || true; } >> "${out_dir}/constants.txt" - done - - sort -u "${out_dir}/constants.txt" -o "${out_dir}/constants.txt" - - for file in "${files[@]}"; do - while read -r constant; do - grep -E "${constant} (featuregate\.Feature = \".*\"|Feature = \".*\")" "${out_dir}/kube_features.go" | awk '{print $4}' | { grep -Eo '[A-Z]\w+' || true; } >> "${out_dir}/featuregates-${version}.txt" - done < "${out_dir}/constants.txt" - - grep -E '{Default: .*, PreRelease: .*, LockToDefault: .*},' "${out_dir}/kube_features.go" | sed -En 's/([A-Z]\w+)(: +\{)(Default: (true|false)).*$/\1 \4/p' > "${out_dir}/locked_features.txt" - while read -r feature; do - name=$(echo "$feature" | awk '{print $1}' ) - default="$(echo "$feature" | awk '{print $2}')" - grep -E "${name} (featuregate\.Feature = \".*\"|Feature = \".*\")" "${out_dir}/kube_features.go" | sed -En 's/^.*\"([A-Z]\w+)\".*$/\1 \tDefault: '"$default"'/p' >> "${out_dir}/locked-featuregates-${version}.txt" - done < "${out_dir}/locked_features.txt" - rm -f "${out_dir}/locked_features.txt" - done - - sort -u -o "${out_dir}/featuregates-${version}.txt" "${out_dir}/featuregates-${version}.txt" - sort -u -o "${out_dir}/locked-featuregates-${version}.txt" "${out_dir}/locked-featuregates-${version}.txt" -done - -echo "Feature gates added in $2 compared to $1:" -diff "${out_dir}/featuregates-$1.txt" "${out_dir}/featuregates-$2.txt" | grep '>' | awk '{print $2}' -echo -echo "Feature gates removed in $2 compared to $1:" -diff "${out_dir}/featuregates-$1.txt" "${out_dir}/featuregates-$2.txt" | grep '<' | awk '{print $2}' -echo -echo "Feature gates locked to default in $2 compared to $1:" -diff "${out_dir}/locked-featuregates-$1.txt" "${out_dir}/locked-featuregates-$2.txt" | grep '>' | cut -c 2- | column -t -echo diff --git a/pkg/provider-local/node/Dockerfile b/pkg/provider-local/node/Dockerfile index 204b91a1bc6..c7da443052e 100644 --- a/pkg/provider-local/node/Dockerfile +++ b/pkg/provider-local/node/Dockerfile @@ -1,4 +1,4 @@ -FROM kindest/node:v1.31.2@sha256:18fbefc20a7113353c7b75b5c869d7145a6abd6269154825872dc59c1329912e +FROM kindest/node:v1.32.0@sha256:c48c62eac5da28cdadcf560d1d8616cfa6783b58f0d94cf63ad1bf49600cb027 ARG TARGETOS ARG TARGETARCH diff --git a/pkg/resourcemanager/controller/node/criticalcomponents/helper/daemon_controller.go b/pkg/resourcemanager/controller/node/criticalcomponents/helper/daemon_controller.go index 0d1d1efe4fd..c1d90e070f9 100644 --- a/pkg/resourcemanager/controller/node/criticalcomponents/helper/daemon_controller.go +++ b/pkg/resourcemanager/controller/node/criticalcomponents/helper/daemon_controller.go @@ -46,7 +46,7 @@ import ( // Returns true when a daemonset should continue running on a node if a daemonset pod is already // running on that node. // -// Copied from https://github.com/kubernetes/kubernetes/blob/v1.31.0/pkg/controller/daemon/daemon_controller.go#L1275-L1330 +// Copied from https://github.com/kubernetes/kubernetes/blob/v1.32.0/pkg/controller/daemon/daemon_controller.go#L1275-L1306 func NodeShouldRunDaemonPod(node *corev1.Node, ds *appsv1.DaemonSet) (bool, bool) { pod := NewPod(ds, node.Name) @@ -73,7 +73,7 @@ func NodeShouldRunDaemonPod(node *corev1.Node, ds *appsv1.DaemonSet) (bool, bool } // predicates checks if a DaemonSet's pod can run on a node. -// Copied from https://github.com/kubernetes/kubernetes/blob/v1.31.0/pkg/controller/daemon/daemon_controller.go#L1275-L1330 +// Copied from https://github.com/kubernetes/kubernetes/blob/v1.32.0/pkg/controller/daemon/daemon_controller.go#L1308-L1318 func predicates(pod *corev1.Pod, node *corev1.Node, taints []corev1.Taint) (fitsNodeName, fitsNodeAffinity, fitsTaints bool) { fitsNodeName = len(pod.Spec.NodeName) == 0 || pod.Spec.NodeName == node.Name // Ignore parsing errors for backwards compatibility. @@ -86,7 +86,7 @@ func predicates(pod *corev1.Pod, node *corev1.Node, taints []corev1.Taint) (fits } // NewPod creates a new pod -// Copied from https://github.com/kubernetes/kubernetes/blob/v1.31.0/pkg/controller/daemon/daemon_controller.go#L1275-L1330 +// Copied from https://github.com/kubernetes/kubernetes/blob/v1.32.0/pkg/controller/daemon/daemon_controller.go#L1320-L1330 func NewPod(ds *appsv1.DaemonSet, nodeName string) *corev1.Pod { newPod := &corev1.Pod{Spec: ds.Spec.Template.Spec, ObjectMeta: ds.Spec.Template.ObjectMeta} newPod.Namespace = ds.Namespace @@ -99,7 +99,7 @@ func NewPod(ds *appsv1.DaemonSet, nodeName string) *corev1.Pod { } // AddOrUpdateDaemonPodTolerations apply necessary tolerations to DaemonSet Pods, e.g. node.kubernetes.io/not-ready:NoExecute. -// Copied from https://github.com/kubernetes/kubernetes/blob/v1.31.0/pkg/controller/daemon/util/daemonset_util.go#L47-L102 +// Copied from https://github.com/kubernetes/kubernetes/blob/v1.32.0/pkg/controller/daemon/util/daemonset_util.go#L47-L102 func AddOrUpdateDaemonPodTolerations(spec *corev1.PodSpec) { // DaemonSet pods shouldn't be deleted by NodeController in case of node problems. // Add infinite toleration for taint notReady:NoExecute here @@ -158,7 +158,7 @@ func AddOrUpdateDaemonPodTolerations(spec *corev1.PodSpec) { // AddOrUpdateTolerationInPodSpec tries to add a toleration to the toleration list in PodSpec. // Returns true if something was updated, false otherwise. -// Copied from https://github.com/kubernetes/kubernetes/blob/v1.31.0/pkg/apis/core/v1/helper/helpers.go#L261-L287 +// Copied from https://github.com/kubernetes/kubernetes/blob/v1.32.0/pkg/apis/core/v1/helper/helpers.go#L261-L287 func AddOrUpdateTolerationInPodSpec(spec *corev1.PodSpec, toleration *corev1.Toleration) bool { podTolerations := spec.Tolerations @@ -187,7 +187,7 @@ func AddOrUpdateTolerationInPodSpec(spec *corev1.PodSpec, toleration *corev1.Tol // Semantic can do semantic deep equality checks for core objects. // Example: apiequality.Semantic.DeepEqual(aPod, aPodWithNonNilButEmptyMaps) == true -// Copied from https://github.com/kubernetes/kubernetes/blob/v1.31.0/pkg/apis/core/helper/helpers.go#L92-L114 +// Copied from https://github.com/kubernetes/kubernetes/blob/v1.32.0/pkg/apis/core/helper/helpers.go#L92-L114 var Semantic = conversion.EqualitiesOrDie( func(a, b resource.Quantity) bool { // Ignore formatting, only care that numeric value stayed the same. diff --git a/pkg/utils/kubernetes/controllers.go b/pkg/utils/kubernetes/controllers.go index 8c7f63cf93f..feca69a9564 100644 --- a/pkg/utils/kubernetes/controllers.go +++ b/pkg/utils/kubernetes/controllers.go @@ -85,45 +85,47 @@ var APIGroupControllerMap = map[string]map[string]versionutils.VersionRange{ "storage-version-migrator-controller": {AddedInVersion: "1.30"}, }, "v1": { - "attachdetach": {}, - "bootstrapsigner": {}, - "cloud-node": {}, - "cloud-node-lifecycle": {}, - "cronjob": {}, - "csrapproving": {}, - "csrsigning": {}, - "daemonset": {}, - "deployment": {}, - "disruption": {}, - "endpoint": {}, - "endpointslice": {}, - "endpointslicemirroring": {}, - "ephemeral-volume": {}, - "garbagecollector": {RemovedInVersion: "1.30"}, - "horizontalpodautoscaling": {}, - "job": {}, - "legacy-service-account-token-cleaner": {AddedInVersion: "1.28"}, - "namespace": {}, - "nodelifecycle": {}, - "persistentvolume-binder": {}, - "persistentvolume-expander": {}, - "podgc": {}, - "pv-protection": {}, - "pvc-protection": {}, - "replicaset": {}, - "replicationcontroller": {}, - "resource-claim-controller": {AddedInVersion: "1.27"}, - "resourcequota": {}, - "root-ca-cert-publisher": {}, - "route": {}, - "service": {}, - "service-cidr-controller": {AddedInVersion: "1.29"}, - "serviceaccount": {}, - "serviceaccount-token": {}, - "statefulset": {}, - "taint-eviction-controller": {AddedInVersion: "1.29"}, - "tokencleaner": {}, - "ttl": {}, - "ttl-after-finished": {}, + "attachdetach": {}, + "bootstrapsigner": {}, + "cloud-node": {}, + "cloud-node-lifecycle": {}, + "cronjob": {}, + "csrapproving": {}, + "csrsigning": {}, + "daemonset": {}, + "deployment": {}, + "disruption": {}, + "endpoint": {}, + "endpointslice": {}, + "endpointslicemirroring": {}, + "ephemeral-volume": {}, + "garbagecollector": {RemovedInVersion: "1.30"}, + "horizontalpodautoscaling": {}, + "job": {}, + "kube-apiserver-serving-clustertrustbundle-publisher": {AddedInVersion: "1.32"}, + "legacy-service-account-token-cleaner": {AddedInVersion: "1.28"}, + "namespace": {}, + "nodelifecycle": {}, + "persistentvolume-binder": {}, + "persistentvolume-expander": {}, + "podgc": {}, + "pv-protection": {}, + "pvc-protection": {}, + "replicaset": {}, + "replicationcontroller": {}, + "resource-claim-controller": {AddedInVersion: "1.27"}, + "resourcequota": {}, + "root-ca-cert-publisher": {}, + "route": {RemovedInVersion: "1.32"}, + "service": {RemovedInVersion: "1.32"}, + "service-cidr-controller": {AddedInVersion: "1.29"}, + "serviceaccount": {}, + "serviceaccount-token": {}, + "statefulset": {}, + "taint-eviction-controller": {AddedInVersion: "1.29"}, + "tokencleaner": {}, + "ttl": {}, + "ttl-after-finished": {}, + "volumeattributesclass-protection": {AddedInVersion: "1.32"}, }, } diff --git a/pkg/utils/validation/admissionplugins/admissionplugins.go b/pkg/utils/validation/admissionplugins/admissionplugins.go index 8b4abed8bda..6d698efc699 100644 --- a/pkg/utils/validation/admissionplugins/admissionplugins.go +++ b/pkg/utils/validation/admissionplugins/admissionplugins.go @@ -49,6 +49,7 @@ var ( "ImagePolicyWebhook": {}, "LimitPodHardAntiAffinityTopology": {}, "LimitRanger": {}, + "MutatingAdmissionPolicy": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, "MutatingAdmissionWebhook": {Required: true}, "NamespaceAutoProvision": {}, "NamespaceExists": {}, diff --git a/pkg/utils/validation/apigroups/apigroups.go b/pkg/utils/validation/apigroups/apigroups.go index 15341fa3edf..86e56e86842 100644 --- a/pkg/utils/validation/apigroups/apigroups.go +++ b/pkg/utils/validation/apigroups/apigroups.go @@ -35,7 +35,8 @@ var ( "certificates.k8s.io/v1alpha1": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.27"}}, "certificates.k8s.io/v1beta1": {}, "coordination.k8s.io/v1": {}, - "coordination.k8s.io/v1alpha1": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.31"}}, + "coordination.k8s.io/v1alpha1": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.31", RemovedInVersion: "1.32"}}, + "coordination.k8s.io/v1alpha2": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, "coordination.k8s.io/v1beta1": {}, "discovery.k8s.io/v1": {}, "discovery.k8s.io/v1beta1": {}, @@ -62,6 +63,7 @@ var ( "resource.k8s.io/v1alpha1": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.26", RemovedInVersion: "1.27"}}, "resource.k8s.io/v1alpha2": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.27", RemovedInVersion: "1.31"}}, "resource.k8s.io/v1alpha3": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.31"}}, + "resource.k8s.io/v1beta1": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, "scheduling.k8s.io/v1": {}, "scheduling.k8s.io/v1alpha1": {}, "scheduling.k8s.io/v1beta1": {}, @@ -78,6 +80,8 @@ var ( "admissionregistration.k8s.io/v1/validatingadmissionpolicies": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.30"}}, "admissionregistration.k8s.io/v1/validatingadmissionpolicybindings": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.30"}}, "admissionregistration.k8s.io/v1/validatingwebhookconfigurations": {Required: true}, + "admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicies": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, + "admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicybindings": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, "admissionregistration.k8s.io/v1alpha1/validatingadmissionpolicies": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.26"}}, "admissionregistration.k8s.io/v1alpha1/validatingadmissionpolicybindings": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.26"}}, "admissionregistration.k8s.io/v1beta1/mutatingwebhookconfigurations": {}, @@ -108,7 +112,8 @@ var ( "certificates.k8s.io/v1alpha1/clustertrustbundles": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.27"}}, "certificates.k8s.io/v1beta1/certificatesigningrequests": {}, "coordination.k8s.io/v1/leases": {Required: true}, - "coordination.k8s.io/v1alpha1/leasecandidates": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.31"}}, + "coordination.k8s.io/v1alpha1/leasecandidates": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.31", RemovedInVersion: "1.32"}}, + "coordination.k8s.io/v1alpha2/leasecandidates": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, "coordination.k8s.io/v1beta1/leases": {}, "discovery.k8s.io/v1/endpointslices": {Required: true, RequiredForWorkerless: true}, "discovery.k8s.io/v1beta1/endpointslices": {}, @@ -171,10 +176,14 @@ var ( "resource.k8s.io/v1alpha2/resourceclassparameters": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.30", RemovedInVersion: "1.31"}}, "resource.k8s.io/v1alpha2/resourceslices": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.30", RemovedInVersion: "1.31"}}, "resource.k8s.io/v1alpha3/deviceclasses": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.31"}}, - "resource.k8s.io/v1alpha3/podschedulingcontexts": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.31"}}, + "resource.k8s.io/v1beta1/deviceclasses": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, + "resource.k8s.io/v1alpha3/podschedulingcontexts": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.31", RemovedInVersion: "1.32"}}, "resource.k8s.io/v1alpha3/resourceclaims": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.31"}}, + "resource.k8s.io/v1beta1/resourceclaims": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, "resource.k8s.io/v1alpha3/resourceclaimtemplates": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.31"}}, + "resource.k8s.io/v1beta1/resourceclaimtemplates": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, "resource.k8s.io/v1alpha3/resourceslices": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.31"}}, + "resource.k8s.io/v1beta1/resourceslices": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, "scheduling.k8s.io/v1/priorityclasses": {Required: true}, "scheduling.k8s.io/v1alpha1/priorityclasses": {}, "scheduling.k8s.io/v1beta1/priorityclasses": {}, diff --git a/pkg/utils/validation/features/featuregates.go b/pkg/utils/validation/features/featuregates.go index 9dbbfa23067..3d3888471b8 100644 --- a/pkg/utils/validation/features/featuregates.go +++ b/pkg/utils/validation/features/featuregates.go @@ -13,14 +13,26 @@ import ( ) // featureGateVersionRanges contains the version ranges for all Kubernetes feature gates. -// Extracted from https://raw.githubusercontent.com/kubernetes/kubernetes/release-${version}/pkg/features/kube_features.go. +// Extracted from: +// - https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/ +// - https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates-removed/ // To maintain this list for each new Kubernetes version: -// - Run hack/compare-k8s-feature-gates.sh (e.g. 'hack/compare-k8s-feature-gates.sh 1.26 1.27'). -// It will present 3 lists of feature gates: those added and those removed in compared to and -// feature gates that got locked to default in ``. -// - Add all added feature gates to the map with as AddedInVersion and no RemovedInVersion. -// - For any removed feature gates, add as RemovedInVersion to the already existing feature gate in the map. -// - For feature gates locked to default, add `` as LockedToDefaultInVersion to the already existing feature gate in the map. +// Alpha & Beta Feature Gates +// 1. Open: https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/#feature-gates-for-alpha-or-beta-features +// 2. Search the page for the new Kubernetes version, e.g. "1.32". +// 3. Add new alpha feature gates that have been added "Since" the new Kubernetes version. +// 4. Change the `Default` for Beta feature gates that have been promoted "Since" the new Kubernetes version. +// +// Graduated & Deprecated Feature Gates +// 1. Open: https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/#feature-gates-for-graduated-or-deprecated-features +// 2. Search the page for the new Kubernetes version, e.g. "1.32". +// 3. Change `LockedToDefaultInVersion` for GA and Deprecated feature gates that have been graduated/deprecated "Since" the new Kubernetes version. +// +// Removed Feature Gates +// 1. Open: https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates-removed/#feature-gates-that-are-removed +// 2. Search the page for the _current_ Kubernetes version, e.g. if the new version is "1.32", search for "1.31". +// 3. Set `RemovedInVersion` to the _new_ Kubernetes version for feature gates that have been removed after the _current_ Kubernetes version according to the "To" column. +// TODO(marc1404): Create issue for fixing the `compare-k8s-feature-gates.sh` script var featureGateVersionRanges = map[string]*FeatureGateVersionRange{ // These are special feature gates to toggle all alpha or beta feature gates on and off. // They were introduced in version 1.17 (although they are absent from the corresponding kube_features.go file). @@ -30,7 +42,9 @@ var featureGateVersionRanges = map[string]*FeatureGateVersionRange{ "AdmissionWebhookMatchConditions": {Default: true, LockedToDefaultInVersion: "1.30", VersionRange: versionutils.VersionRange{AddedInVersion: "1.27"}}, "AllowDNSOnlyNodeCSR": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.31"}}, "AllowInsecureKubeletCertificateSigningRequests": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.31"}}, - "AllowServiceLBStatusOnNonLB": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.29"}}, + "AllowOverwriteTerminationGracePeriodSeconds": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, + "AllowServiceLBStatusOnNonLB": {Default: false, LockedToDefaultInVersion: "1.32", VersionRange: versionutils.VersionRange{AddedInVersion: "1.29"}}, + "AllowUnsafeMalformedObjectDeletion": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, "APIListChunking": {Default: true, LockedToDefaultInVersion: "1.29"}, "APIPriorityAndFairness": {Default: true, LockedToDefaultInVersion: "1.29", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.31"}}, "APIResponseCompression": {}, @@ -40,21 +54,25 @@ var featureGateVersionRanges = map[string]*FeatureGateVersionRange{ "APIServingWithRoutine": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.30"}}, "AdvancedAuditing": {Default: true, LockedToDefaultInVersion: "1.27", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.28"}}, "AggregatedDiscoveryEndpoint": {Default: true, LockedToDefaultInVersion: "1.30", VersionRange: versionutils.VersionRange{AddedInVersion: "1.26"}}, - "AnonymousAuthConfigurableEndpoints": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.31"}}, + "AnonymousAuthConfigurableEndpoints": {Default: true, VersionRange: versionutils.VersionRange{AddedInVersion: "1.31"}}, "AnyVolumeDataSource": {}, "AppArmor": {Default: true, LockedToDefaultInVersion: "1.31"}, "AppArmorFields": {Default: true, LockedToDefaultInVersion: "1.31", VersionRange: versionutils.VersionRange{AddedInVersion: "1.30"}}, - "AuthorizeNodeWithSelectors": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.31"}}, - "AuthorizeWithSelectors": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.31"}}, + "AuthorizeNodeWithSelectors": {Default: true, VersionRange: versionutils.VersionRange{AddedInVersion: "1.31"}}, + "AuthorizeWithSelectors": {Default: true, VersionRange: versionutils.VersionRange{AddedInVersion: "1.31"}}, + "BtreeWatchCache": {Default: true, VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, + "CBORServingAndStorage": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, "CloudControllerManagerWebhook": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.27"}}, - "CloudDualStackNodeIPs": {Default: true, LockedToDefaultInVersion: "1.30", VersionRange: versionutils.VersionRange{AddedInVersion: "1.27"}}, + "CloudDualStackNodeIPs": {Default: true, LockedToDefaultInVersion: "1.30", VersionRange: versionutils.VersionRange{AddedInVersion: "1.27", RemovedInVersion: "1.32"}}, "ClusterTrustBundle": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.27"}}, "ClusterTrustBundleProjection": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.29"}}, + "ComponentFlagz": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, "ComponentSLIs": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.26"}}, + "ComponentStatusz": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, "ConcurrentWatchObjectDecode": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.31"}}, "ContainerCheckpoint": {}, "ContextualLogging": {Default: true, LockedToDefaultInVersion: "1.30"}, - "ControllerManagerLeaderMigration": {Default: true, LockedToDefaultInVersion: "1.24", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.27"}}, // Missing from docu? + "ControllerManagerLeaderMigration": {Default: true, LockedToDefaultInVersion: "1.24", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.27"}}, "ConsistentHTTPGetHandlers": {Default: true, LockedToDefaultInVersion: "1.30", VersionRange: versionutils.VersionRange{AddedInVersion: "1.26", RemovedInVersion: "1.31"}}, "ConsistentListFromCache": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.28"}}, "CoordinatedLeaderElection": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.31"}}, @@ -63,7 +81,7 @@ var featureGateVersionRanges = map[string]*FeatureGateVersionRange{ "CPUManagerPolicyBetaOptions": {}, "CPUManagerPolicyOptions": {}, "CRDValidationRatcheting": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.28"}}, - "CronJobsScheduledAnnotation": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.28"}}, + "CronJobsScheduledAnnotation": {Default: true, LockedToDefaultInVersion: "1.32", VersionRange: versionutils.VersionRange{AddedInVersion: "1.28"}}, "CronJobTimeZone": {Default: true, LockedToDefaultInVersion: "1.27", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.29"}}, "CrossNamespaceVolumeDataSource": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.26"}}, "CSIInlineVolume": {Default: true, LockedToDefaultInVersion: "1.25", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.27"}}, @@ -81,9 +99,9 @@ var featureGateVersionRanges = map[string]*FeatureGateVersionRange{ "CSIVolumeHealth": {}, "CSRDuration": {Default: true, LockedToDefaultInVersion: "1.24", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.26"}}, "CustomCPUCFSQuotaPeriod": {}, - "CustomResourceFieldSelectors": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.30"}}, + "CustomResourceFieldSelectors": {Default: true, LockedToDefaultInVersion: "1.32", VersionRange: versionutils.VersionRange{AddedInVersion: "1.30"}}, "CustomResourceValidationExpressions": {Default: true, LockedToDefaultInVersion: "1.29", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.31"}}, - "DaemonSetUpdateSurge": {Default: true, LockedToDefaultInVersion: "1.25", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.27"}}, // Missing from docu? + "DaemonSetUpdateSurge": {Default: true, LockedToDefaultInVersion: "1.25", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.27"}}, "DefaultHostNetworkHostPortsInPodTemplates": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.28", RemovedInVersion: "1.31"}}, "DefaultPodTopologySpread": {Default: true, LockedToDefaultInVersion: "1.24", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.26"}}, "DelegateFSGroupToCSIDriver": {Default: true, LockedToDefaultInVersion: "1.26", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.28"}}, @@ -95,7 +113,9 @@ var featureGateVersionRanges = map[string]*FeatureGateVersionRange{ "DisableKubeletCloudCredentialProviders": {Default: true, LockedToDefaultInVersion: "1.31"}, "DisableNodeKubeProxyVersion": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.29"}}, "DownwardAPIHugePages": {Default: true, LockedToDefaultInVersion: "1.27", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.29"}}, - "DRAControlPlaneController": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.31"}}, + "DRAAdminAccess": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, + "DRAControlPlaneController": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.26", RemovedInVersion: "1.32"}}, + "DRAResourceClaimDeviceStatus": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, "DryRun": {Default: true, LockedToDefaultInVersion: "1.26", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.28"}}, "DynamicKubeletConfig": {VersionRange: versionutils.VersionRange{RemovedInVersion: "1.26"}}, "DynamicResourceAllocation": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.26"}}, @@ -110,11 +130,12 @@ var featureGateVersionRanges = map[string]*FeatureGateVersionRange{ "ExpandInUsePersistentVolumes": {Default: true, VersionRange: versionutils.VersionRange{RemovedInVersion: "1.27"}}, "ExpandPersistentVolumes": {Default: true, VersionRange: versionutils.VersionRange{RemovedInVersion: "1.27"}}, "ExperimentalHostUserNamespaceDefaulting": {Default: false, LockedToDefaultInVersion: "1.28", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.30"}}, + "ExternalServiceAccountTokenSigner": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, "GRPCContainerProbe": {Default: true, LockedToDefaultInVersion: "1.27", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.29"}}, "GracefulNodeShutdown": {}, "GracefulNodeShutdownBasedOnPodPriority": {}, "HonorPVReclaimPolicy": {}, - "HPAContainerMetrics": {Default: true, LockedToDefaultInVersion: "1.30"}, + "HPAContainerMetrics": {Default: true, LockedToDefaultInVersion: "1.30", VersionRange: versionutils.VersionRange{AddedInVersion: "1.20", RemovedInVersion: "1.32"}}, "HPAScaleToZero": {}, "IPv6DualStack": {Default: true, LockedToDefaultInVersion: "1.23", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.27"}}, "IPTablesOwnershipCleanup": {Default: true, LockedToDefaultInVersion: "1.28", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.30"}}, @@ -122,6 +143,8 @@ var featureGateVersionRanges = map[string]*FeatureGateVersionRange{ "ImageMaximumGCAge": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.29"}}, "ImageVolume": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.31"}}, "InPlacePodVerticalScaling": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.27"}}, + "InPlacePodVerticalScalingAllocatedStatus": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, + "InPlacePodVerticalScalingExclusiveCPUs": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, "InTreePluginAWSUnregister": {VersionRange: versionutils.VersionRange{RemovedInVersion: "1.31"}}, "InTreePluginAzureDiskUnregister": {VersionRange: versionutils.VersionRange{RemovedInVersion: "1.31"}}, "InTreePluginAzureFileUnregister": {VersionRange: versionutils.VersionRange{RemovedInVersion: "1.31"}}, @@ -133,7 +156,7 @@ var featureGateVersionRanges = map[string]*FeatureGateVersionRange{ "IndexedJob": {Default: true, LockedToDefaultInVersion: "1.24", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.26"}}, "InformerResourceVersion": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.30"}}, "JobBackoffLimitPerIndex": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.28"}}, - "JobManagedBy": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.30"}}, + "JobManagedBy": {Default: true, VersionRange: versionutils.VersionRange{AddedInVersion: "1.30"}}, "JobMutableNodeSchedulingDirectives": {Default: true, LockedToDefaultInVersion: "1.27", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.29"}}, "JobPodFailurePolicy": {Default: true, LockedToDefaultInVersion: "1.31"}, "JobPodReplacementPolicy": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.28"}}, @@ -141,31 +164,34 @@ var featureGateVersionRanges = map[string]*FeatureGateVersionRange{ "JobSuccessPolicy": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.30"}}, "JobTrackingWithFinalizers": {Default: true, LockedToDefaultInVersion: "1.26", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.29"}}, "KMSv1": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.28"}}, - "KMSv2": {Default: true, LockedToDefaultInVersion: "1.29"}, - "KMSv2KDF": {Default: true, LockedToDefaultInVersion: "1.29", VersionRange: versionutils.VersionRange{AddedInVersion: "1.28"}}, + "KMSv2": {Default: true, LockedToDefaultInVersion: "1.29", VersionRange: versionutils.VersionRange{AddedInVersion: "1.25", RemovedInVersion: "1.32"}}, + "KMSv2KDF": {Default: true, LockedToDefaultInVersion: "1.29", VersionRange: versionutils.VersionRange{AddedInVersion: "1.28", RemovedInVersion: "1.32"}}, "KubeletCgroupDriverFromCRI": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.28"}}, + "KubeletCrashLoopBackOffMax": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, "KubeletCredentialProviders": {Default: true, LockedToDefaultInVersion: "1.26", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.28"}}, + "KubeletFineGrainedAuthz": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, "KubeletInUserNamespace": {}, "KubeletPodResources": {Default: true, LockedToDefaultInVersion: "1.28", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.30"}}, "KubeletPodResourcesDynamicResources": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.27"}}, "KubeletPodResourcesGet": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.27"}}, "KubeletPodResourcesGetAllocatable": {Default: true, LockedToDefaultInVersion: "1.28", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.30"}}, + "KubeletRegistrationGetOnExistsOnly": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, "KubeletSeparateDiskGC": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.29"}}, "KubeletTracing": {}, "KubeProxyDrainingTerminatingNodes": {Default: true, LockedToDefaultInVersion: "1.31", VersionRange: versionutils.VersionRange{AddedInVersion: "1.28"}}, - "LegacyServiceAccountTokenCleanUp": {Default: true, LockedToDefaultInVersion: "1.30", VersionRange: versionutils.VersionRange{AddedInVersion: "1.28"}}, + "LegacyServiceAccountTokenCleanUp": {Default: true, LockedToDefaultInVersion: "1.30", VersionRange: versionutils.VersionRange{AddedInVersion: "1.28", RemovedInVersion: "1.32"}}, "LegacyServiceAccountTokenNoAutoGeneration": {Default: true, LockedToDefaultInVersion: "1.27", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.29"}}, "LegacyServiceAccountTokenTracking": {Default: true, LockedToDefaultInVersion: "1.28", VersionRange: versionutils.VersionRange{AddedInVersion: "1.26", RemovedInVersion: "1.30"}}, - "LoadBalancerIPMode": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.29"}}, + "LoadBalancerIPMode": {Default: true, LockedToDefaultInVersion: "1.32", VersionRange: versionutils.VersionRange{AddedInVersion: "1.29"}}, "LocalStorageCapacityIsolation": {Default: true, LockedToDefaultInVersion: "1.25", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.27"}}, "LocalStorageCapacityIsolationFSQuotaMonitoring": {}, "LogarithmicScaleDown": {Default: true, LockedToDefaultInVersion: "1.31"}, "MatchLabelKeysInPodAffinity": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.29"}}, "MatchLabelKeysInPodTopologySpread": {}, "MaxUnavailableStatefulSet": {}, - "MemoryManager": {}, + "MemoryManager": {Default: true, LockedToDefaultInVersion: "1.32", VersionRange: versionutils.VersionRange{AddedInVersion: "1.21"}}, "MemoryQoS": {}, - "MinDomainsInPodTopologySpread": {Default: true, LockedToDefaultInVersion: "1.30"}, + "MinDomainsInPodTopologySpread": {Default: true, LockedToDefaultInVersion: "1.30", VersionRange: versionutils.VersionRange{AddedInVersion: "1.24", RemovedInVersion: "1.32"}}, "MinimizeIPTablesRestore": {Default: true, LockedToDefaultInVersion: "1.28", VersionRange: versionutils.VersionRange{AddedInVersion: "1.26", RemovedInVersion: "1.30"}}, "MixedProtocolLBService": {Default: true, LockedToDefaultInVersion: "1.26", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.28"}}, "MultiCIDRRangeAllocator": {VersionRange: versionutils.VersionRange{RemovedInVersion: "1.29"}}, @@ -173,11 +199,11 @@ var featureGateVersionRanges = map[string]*FeatureGateVersionRange{ "MutatingAdmissionPolicy": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.30"}}, "NetworkPolicyEndPort": {Default: true, LockedToDefaultInVersion: "1.25", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.27"}}, "NetworkPolicyStatus": {VersionRange: versionutils.VersionRange{RemovedInVersion: "1.28"}}, - "NewVolumeManagerReconstruction": {Default: true, LockedToDefaultInVersion: "1.30", VersionRange: versionutils.VersionRange{AddedInVersion: "1.27"}}, + "NewVolumeManagerReconstruction": {Default: true, LockedToDefaultInVersion: "1.30", VersionRange: versionutils.VersionRange{AddedInVersion: "1.25", RemovedInVersion: "1.32"}}, "NFTablesProxyMode": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.29"}}, "NodeInclusionPolicyInPodTopologySpread": {}, "NodeLogQuery": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.27"}}, - "NodeOutOfServiceVolumeDetach": {Default: true, LockedToDefaultInVersion: "1.28"}, + "NodeOutOfServiceVolumeDetach": {Default: true, LockedToDefaultInVersion: "1.28", VersionRange: versionutils.VersionRange{AddedInVersion: "1.24", RemovedInVersion: "1.32"}}, "NodeSwap": {}, "NonPreemptingPriority": {Default: true, LockedToDefaultInVersion: "1.24", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.26"}}, "OpenAPIEnums": {}, @@ -189,45 +215,54 @@ var featureGateVersionRanges = map[string]*FeatureGateVersionRange{ "PodDeletionCost": {}, "PodDisruptionConditions": {Default: true, LockedToDefaultInVersion: "1.31"}, "PodHasNetworkCondition": {VersionRange: versionutils.VersionRange{RemovedInVersion: "1.28"}}, - "PodHostIPs": {Default: true, LockedToDefaultInVersion: "1.30", VersionRange: versionutils.VersionRange{AddedInVersion: "1.28"}}, - "PodIndexLabel": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.28"}}, + "PodHostIPs": {Default: true, LockedToDefaultInVersion: "1.30", VersionRange: versionutils.VersionRange{AddedInVersion: "1.28", RemovedInVersion: "1.32"}}, + "PodIndexLabel": {Default: true, LockedToDefaultInVersion: "1.32", VersionRange: versionutils.VersionRange{AddedInVersion: "1.28"}}, + "PodLevelResources": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, "PodLifecycleSleepAction": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.29"}}, + "PodLifecycleSleepActionAllowZero": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, + "PodLogsQuerySplitStreams": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, "PodOverhead": {Default: true, LockedToDefaultInVersion: "1.24", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.26"}}, "PodReadyToStartContainersCondition": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.28"}}, "PodSchedulingReadiness": {Default: true, LockedToDefaultInVersion: "1.30", VersionRange: versionutils.VersionRange{AddedInVersion: "1.26"}}, "PodSecurity": {Default: true, LockedToDefaultInVersion: "1.25", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.28"}}, "PortForwardWebsockets": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.30"}}, - "PreferNominatedNode": {Default: true, LockedToDefaultInVersion: "1.24", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.26"}}, // Missing from docu? + "PreferAlignCpusByUncoreCache": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, + "PreferNominatedNode": {Default: true, LockedToDefaultInVersion: "1.24", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.26"}}, "ProbeTerminationGracePeriod": {Default: true, LockedToDefaultInVersion: "1.28", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.29"}}, "ProcMountType": {}, "ProxyTerminatingEndpoints": {Default: true, LockedToDefaultInVersion: "1.28", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.30"}}, "QOSReserved": {}, "ReadWriteOncePod": {Default: true, LockedToDefaultInVersion: "1.29", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.31"}}, - "RecoverVolumeExpansionFailure": {}, + "RecoverVolumeExpansionFailure": {Default: true, VersionRange: versionutils.VersionRange{AddedInVersion: "1.28"}}, "RecursiveReadOnlyMounts": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.30"}}, - "RelaxedEnvironmentVariableValidation": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.30"}}, + "RelaxedDNSSearchValidation": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, + "RelaxedEnvironmentVariableValidation": {Default: true, VersionRange: versionutils.VersionRange{AddedInVersion: "1.30"}}, "ReloadKubeletServerCertificateFile": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.31"}}, "RemainingItemCount": {Default: true, LockedToDefaultInVersion: "1.29"}, + "RemoteRequestHeaderUID": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, "RemoveSelfLink": {Default: true, LockedToDefaultInVersion: "1.24", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.30"}}, "ResilientWatchCacheInitialization": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.31"}}, "ResourceHealthStatus": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.31"}}, "RetroactiveDefaultStorageClass": {Default: true, LockedToDefaultInVersion: "1.28", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.29"}}, - "RetryGenerateName": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.30"}}, + "RetryGenerateName": {Default: true, LockedToDefaultInVersion: "1.32", VersionRange: versionutils.VersionRange{AddedInVersion: "1.30"}}, "RotateKubeletServerCertificate": {}, "RuntimeClassInImageCriApi": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.29"}}, - "SchedulerQueueingHints": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.28"}}, + "SchedulerAsyncPreemption": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, + "SchedulerQueueingHints": {Default: true, VersionRange: versionutils.VersionRange{AddedInVersion: "1.28"}}, "SeccompDefault": {Default: true, LockedToDefaultInVersion: "1.27", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.29"}}, "SecurityContextDeny": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.27", RemovedInVersion: "1.30"}}, + "SELinuxChangePolicy": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, "SELinuxMount": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.30"}}, "SELinuxMountReadWriteOncePod": {Default: true, LockedToDefaultInVersion: "1.29"}, "SeparateCacheWatchRPC": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.28"}}, "SeparateTaintEvictionController": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.29"}}, - "ServerSideApply": {Default: true, LockedToDefaultInVersion: "1.26"}, - "ServerSideFieldValidation": {Default: true, LockedToDefaultInVersion: "1.27"}, - "ServiceAccountTokenJTI": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.29"}}, + "ServerSideApply": {Default: true, LockedToDefaultInVersion: "1.22", VersionRange: versionutils.VersionRange{AddedInVersion: "1.14", RemovedInVersion: "1.32"}}, + "ServerSideFieldValidation": {Default: true, LockedToDefaultInVersion: "1.27", VersionRange: versionutils.VersionRange{AddedInVersion: "1.23", RemovedInVersion: "1.32"}}, + "ServiceAccountNodeAudienceRestriction": {Default: true, VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, + "ServiceAccountTokenJTI": {Default: true, LockedToDefaultInVersion: "1.32", VersionRange: versionutils.VersionRange{AddedInVersion: "1.29"}}, "ServiceAccountTokenNodeBinding": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.29"}}, - "ServiceAccountTokenNodeBindingValidation": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.29"}}, - "ServiceAccountTokenPodNodeInfo": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.29"}}, + "ServiceAccountTokenNodeBindingValidation": {Default: true, LockedToDefaultInVersion: "1.32", VersionRange: versionutils.VersionRange{AddedInVersion: "1.29"}}, + "ServiceAccountTokenPodNodeInfo": {Default: true, LockedToDefaultInVersion: "1.32", VersionRange: versionutils.VersionRange{AddedInVersion: "1.29"}}, "ServiceInternalTrafficPolicy": {Default: true, LockedToDefaultInVersion: "1.26", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.28"}}, "ServiceIPStaticSubrange": {Default: true, LockedToDefaultInVersion: "1.26", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.28"}}, "ServiceLBNodePortControl": {Default: true, LockedToDefaultInVersion: "1.24", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.26"}}, @@ -235,27 +270,28 @@ var featureGateVersionRanges = map[string]*FeatureGateVersionRange{ "ServiceNodePortStaticSubrange": {Default: true, LockedToDefaultInVersion: "1.29", VersionRange: versionutils.VersionRange{AddedInVersion: "1.27", RemovedInVersion: "1.31"}}, "ServiceTrafficDistribution": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.30"}}, "SidecarContainers": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.28"}}, - "SizeMemoryBackedVolumes": {}, + "SizeMemoryBackedVolumes": {Default: true, LockedToDefaultInVersion: "1.32", VersionRange: versionutils.VersionRange{AddedInVersion: "1.20"}}, "SkipReadOnlyValidationGCE": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.28", RemovedInVersion: "1.31"}}, - "StableLoadBalancerNodeSet": {Default: true, LockedToDefaultInVersion: "1.30", VersionRange: versionutils.VersionRange{AddedInVersion: "1.27"}}, - "StatefulSetAutoDeletePVC": {}, + "StableLoadBalancerNodeSet": {Default: true, LockedToDefaultInVersion: "1.30", VersionRange: versionutils.VersionRange{AddedInVersion: "1.27", RemovedInVersion: "1.32"}}, + "StatefulSetAutoDeletePVC": {Default: true, LockedToDefaultInVersion: "1.32", VersionRange: versionutils.VersionRange{AddedInVersion: "1.23"}}, "StatefulSetMinReadySeconds": {Default: true, LockedToDefaultInVersion: "1.25", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.27"}}, "StatefulSetStartOrdinal": {Default: true, LockedToDefaultInVersion: "1.31", VersionRange: versionutils.VersionRange{AddedInVersion: "1.26"}}, "StorageNamespaceIndex": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.30"}}, "StorageVersionAPI": {}, "StorageVersionHash": {}, "StorageVersionMigrator": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.30"}}, - "StrictCostEnforcementForVAP": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.30"}}, - "StrictCostEnforcementForWebhooks": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.30"}}, + "StrictCostEnforcementForVAP": {Default: true, LockedToDefaultInVersion: "1.32", VersionRange: versionutils.VersionRange{AddedInVersion: "1.30"}}, + "StrictCostEnforcementForWebhooks": {Default: true, LockedToDefaultInVersion: "1.32", VersionRange: versionutils.VersionRange{AddedInVersion: "1.30"}}, "StructuredAuthenticationConfiguration": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.29"}}, - "StructuredAuthorizationConfiguration": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.29"}}, + "StructuredAuthorizationConfiguration": {Default: true, LockedToDefaultInVersion: "1.32", VersionRange: versionutils.VersionRange{AddedInVersion: "1.29"}}, "SupplementalGroupsPolicy": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.31"}}, "SuspendJob": {Default: true, LockedToDefaultInVersion: "1.24", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.26"}}, + "SystemdWatchdog": {Default: true, VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, "TopologyAwareHints": {}, "TopologyManager": {Default: true, LockedToDefaultInVersion: "1.27", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.29"}}, "TopologyManagerPolicyAlphaOptions": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.26"}}, "TopologyManagerPolicyBetaOptions": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.26"}}, - "TopologyManagerPolicyOptions": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.26"}}, + "TopologyManagerPolicyOptions": {Default: true, LockedToDefaultInVersion: "1.32", VersionRange: versionutils.VersionRange{AddedInVersion: "1.26"}}, "TranslateStreamCloseWebsocketRequests": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.29"}}, "UnauthenticatedHTTP2DOSMitigation": {}, "UnknownVersionInteroperabilityProxy": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.28"}}, @@ -268,13 +304,15 @@ var featureGateVersionRanges = map[string]*FeatureGateVersionRange{ "WatchBookmark": {Default: true, LockedToDefaultInVersion: "1.17"}, "WatchCacheInitializationPostStartHook": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.31"}}, "WatchFromStorageWithoutResourceVersion": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.27"}}, - "WatchList": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.27"}}, + "WatchList": {Default: true, VersionRange: versionutils.VersionRange{AddedInVersion: "1.27"}}, "WatchListClient": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.30"}}, "WinDSR": {}, "WinOverlay": {}, + "WindowsCPUAndMemoryAffinity": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, + "WindowsGracefulNodeShutdown": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.32"}}, "WindowsHostNetwork": {VersionRange: versionutils.VersionRange{AddedInVersion: "1.26"}}, "WindowsHostProcessContainers": {Default: true, LockedToDefaultInVersion: "1.26", VersionRange: versionutils.VersionRange{RemovedInVersion: "1.28"}}, - "ZeroLimitedNominalConcurrencyShares": {Default: true, LockedToDefaultInVersion: "1.30", VersionRange: versionutils.VersionRange{AddedInVersion: "1.29"}}, + "ZeroLimitedNominalConcurrencyShares": {Default: true, LockedToDefaultInVersion: "1.30", VersionRange: versionutils.VersionRange{AddedInVersion: "1.29", RemovedInVersion: "1.32"}}, } // IsFeatureGateSupported returns true if the given feature gate is supported for the given Kubernetes version. diff --git a/pkg/utils/validation/kubernetesversion/version.go b/pkg/utils/validation/kubernetesversion/version.go index 68ab482b657..01f04049fbf 100644 --- a/pkg/utils/validation/kubernetesversion/version.go +++ b/pkg/utils/validation/kubernetesversion/version.go @@ -20,6 +20,7 @@ var SupportedVersions = []string{ "1.29", "1.30", "1.31", + "1.32", } // CheckIfSupported checks if the provided version is part of the supported Kubernetes versions list. diff --git a/pkg/utils/validation/kubernetesversion/version_test.go b/pkg/utils/validation/kubernetesversion/version_test.go index f6a0e435b3f..480c8121276 100644 --- a/pkg/utils/validation/kubernetesversion/version_test.go +++ b/pkg/utils/validation/kubernetesversion/version_test.go @@ -26,6 +26,7 @@ var _ = Describe("Version", func() { Entry("1.29", "1.29", Succeed()), Entry("1.30", "1.30", Succeed()), Entry("1.31", "1.31", Succeed()), - Entry("1.32", "1.32", MatchError(ContainSubstring("unsupported kubernetes version"))), + Entry("1.32", "1.32", Succeed()), + Entry("1.33", "1.33", MatchError(ContainSubstring("unsupported kubernetes version"))), ) }) diff --git a/pkg/utils/version/version.go b/pkg/utils/version/version.go index 781563555be..27418a4a678 100644 --- a/pkg/utils/version/version.go +++ b/pkg/utils/version/version.go @@ -33,6 +33,10 @@ var ( ConstraintK8sLess131 *semver.Constraints // ConstraintK8sGreaterEqual131 is a version constraint for versions >= 1.31. ConstraintK8sGreaterEqual131 *semver.Constraints + // ConstraintK8sLess132 is a version constraint for versions < 1.32. + ConstraintK8sLess132 *semver.Constraints + // ConstraintK8sGreaterEqual132 is a version constraint for versions >= 1.32. + ConstraintK8sGreaterEqual132 *semver.Constraints ) func init() { @@ -57,6 +61,10 @@ func init() { utilruntime.Must(err) ConstraintK8sGreaterEqual131, err = semver.NewConstraint(">= 1.31-0") utilruntime.Must(err) + ConstraintK8sLess132, err = semver.NewConstraint("< 1.32-0") + utilruntime.Must(err) + ConstraintK8sGreaterEqual132, err = semver.NewConstraint(">= 1.32-0") + utilruntime.Must(err) } // CompareVersions returns true if the constraint compared by to diff --git a/pkg/utils/version/version_test.go b/pkg/utils/version/version_test.go index 38362202437..14f51487180 100644 --- a/pkg/utils/version/version_test.go +++ b/pkg/utils/version/version_test.go @@ -67,6 +67,16 @@ var _ = Describe("Version", func() { Entry("ConstraintK8sGreaterEqual131, failure", ConstraintK8sGreaterEqual131, semver.MustParse("1.30.0"), BeFalse()), Entry("ConstraintK8sGreaterEqual131, success w/ suffix", ConstraintK8sGreaterEqual131, semver.MustParse("v1.31.0-foo.12"), BeTrue()), Entry("ConstraintK8sGreaterEqual131, failure w/ suffix", ConstraintK8sGreaterEqual131, semver.MustParse("v1.30.0-foo.12"), BeFalse()), + + Entry("ConstraintK8sLess132, success", ConstraintK8sLess132, semver.MustParse("1.31.1"), BeTrue()), + Entry("ConstraintK8sLess132, failure", ConstraintK8sLess132, semver.MustParse("1.32.0"), BeFalse()), + Entry("ConstraintK8sLess132, success w/ suffix", ConstraintK8sLess132, semver.MustParse("v1.31.1-foo.12"), BeTrue()), + Entry("ConstraintK8sLess132, failure w/ suffix", ConstraintK8sLess132, semver.MustParse("v1.32.0-foo.12"), BeFalse()), + + Entry("ConstraintK8sGreaterEqual132, success", ConstraintK8sGreaterEqual132, semver.MustParse("1.32.0"), BeTrue()), + Entry("ConstraintK8sGreaterEqual132, failure", ConstraintK8sGreaterEqual132, semver.MustParse("1.31.0"), BeFalse()), + Entry("ConstraintK8sGreaterEqual132, success w/ suffix", ConstraintK8sGreaterEqual132, semver.MustParse("v1.32.0-foo.12"), BeTrue()), + Entry("ConstraintK8sGreaterEqual132, failure w/ suffix", ConstraintK8sGreaterEqual132, semver.MustParse("v1.31.0-foo.12"), BeFalse()), ) DescribeTable("#CompareVersions",