diff --git a/pkg/features/kube_features.go b/pkg/features/kube_features.go index 1f84cb7eb2a..743d2b69c2c 100644 --- a/pkg/features/kube_features.go +++ b/pkg/features/kube_features.go @@ -17,7 +17,6 @@ limitations under the License. package features import ( - apiextensionsfeatures "k8s.io/apiextensions-apiserver/pkg/features" "k8s.io/apimachinery/pkg/util/runtime" genericfeatures "k8s.io/apiserver/pkg/features" utilfeature "k8s.io/apiserver/pkg/util/feature" @@ -971,13 +970,6 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS genericfeatures.KMSv1: {Default: false, PreRelease: featuregate.Deprecated}, - // inherited features from apiextensions-apiserver, relisted here to get a conflict if it is changed - // unintentionally on either side: - - apiextensionsfeatures.CRDValidationRatcheting: {Default: true, PreRelease: featuregate.Beta}, - - apiextensionsfeatures.CustomResourceFieldSelectors: {Default: true, PreRelease: featuregate.Beta}, - // features with duplicate definition in apiserver/controller-manager CloudControllerManagerWebhook: {Default: false, PreRelease: featuregate.Alpha}, diff --git a/pkg/features/versioned_kube_features.go b/pkg/features/versioned_kube_features.go index 49bc5f92de4..925f61dc1e3 100644 --- a/pkg/features/versioned_kube_features.go +++ b/pkg/features/versioned_kube_features.go @@ -17,6 +17,7 @@ limitations under the License. package features import ( + apiextensionsfeatures "k8s.io/apiextensions-apiserver/pkg/features" "k8s.io/apimachinery/pkg/util/version" genericfeatures "k8s.io/apiserver/pkg/features" "k8s.io/component-base/featuregate" @@ -95,6 +96,13 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate {Version: version.MustParse("1.28"), Default: true, PreRelease: featuregate.Beta}, }, + // inherited features from apiextensions-apiserver, relisted here to get a conflict if it is changed + // unintentionally on either side: + apiextensionsfeatures.CRDValidationRatcheting: { + {Version: version.MustParse("1.28"), Default: false, PreRelease: featuregate.Alpha}, + {Version: version.MustParse("1.30"), Default: true, PreRelease: featuregate.Beta}, + }, + CrossNamespaceVolumeDataSource: { {Version: version.MustParse("1.26"), Default: false, PreRelease: featuregate.Alpha}, }, @@ -109,6 +117,13 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate {Version: version.MustParse("1.21"), Default: false, PreRelease: featuregate.Alpha}, }, + // inherited features from apiextensions-apiserver, relisted here to get a conflict if it is changed + // unintentionally on either side: + apiextensionsfeatures.CustomResourceFieldSelectors: { + {Version: version.MustParse("1.30"), Default: false, PreRelease: featuregate.Alpha}, + {Version: version.MustParse("1.31"), Default: true, PreRelease: featuregate.Beta}, + }, + DevicePluginCDIDevices: { {Version: version.MustParse("1.28"), Default: false, PreRelease: featuregate.Alpha}, {Version: version.MustParse("1.29"), Default: true, PreRelease: featuregate.Beta}, diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/features/kube_features.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/features/kube_features.go index b41d13e5364..3b72a04cb8a 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/features/kube_features.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/features/kube_features.go @@ -17,6 +17,8 @@ limitations under the License. package features import ( + "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/apimachinery/pkg/util/version" utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/component-base/featuregate" ) @@ -30,6 +32,7 @@ const ( // owner: @alexzielenski // alpha: v1.28 + // beta: v1.30 // // Ignores errors raised on unchanged fields of Custom Resources // across UPDATE/PATCH requests. @@ -37,6 +40,8 @@ const ( // owner: @jpbetz // alpha: v1.30 + // beta: v1.31 + // ga: v1.32 // // CustomResourceDefinitions may include SelectableFields to declare which fields // may be used as field selectors. @@ -44,13 +49,22 @@ const ( ) func init() { - utilfeature.DefaultMutableFeatureGate.Add(defaultKubernetesFeatureGates) + runtime.Must(utilfeature.DefaultMutableFeatureGate.AddVersioned(defaultVersionedKubernetesFeatureGates)) } -// defaultKubernetesFeatureGates consists of all known Kubernetes-specific feature keys. -// To add a new feature, define a key for it above and add it here. The features will be +// defaultVersionedKubernetesFeatureGates consists of all known Kubernetes-specific feature keys with VersionedSpecs. +// To add a new feature, define a key for it above and add it below. The features will be // available throughout Kubernetes binaries. -var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{ - CRDValidationRatcheting: {Default: true, PreRelease: featuregate.Beta}, - CustomResourceFieldSelectors: {Default: true, PreRelease: featuregate.Beta}, +// To support n-3 compatibility version, features may only be removed 3 releases after graduation. +// +// Entries are alphabetized. +var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate.VersionedSpecs{ + CRDValidationRatcheting: { + {Version: version.MustParse("1.28"), Default: false, PreRelease: featuregate.Alpha}, + {Version: version.MustParse("1.30"), Default: true, PreRelease: featuregate.Beta}, + }, + CustomResourceFieldSelectors: { + {Version: version.MustParse("1.30"), Default: false, PreRelease: featuregate.Alpha}, + {Version: version.MustParse("1.31"), Default: true, PreRelease: featuregate.Beta}, + }, }