Migrate apiextensions-apiserver to versioned feature gates

This commit is contained in:
Joe Betz
2024-09-26 19:37:01 -04:00
parent 5ebd0da6cc
commit 138106896e
3 changed files with 35 additions and 14 deletions

View File

@@ -17,7 +17,6 @@ limitations under the License.
package features package features
import ( import (
apiextensionsfeatures "k8s.io/apiextensions-apiserver/pkg/features"
"k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/runtime"
genericfeatures "k8s.io/apiserver/pkg/features" genericfeatures "k8s.io/apiserver/pkg/features"
utilfeature "k8s.io/apiserver/pkg/util/feature" 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}, 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 // features with duplicate definition in apiserver/controller-manager
CloudControllerManagerWebhook: {Default: false, PreRelease: featuregate.Alpha}, CloudControllerManagerWebhook: {Default: false, PreRelease: featuregate.Alpha},

View File

@@ -17,6 +17,7 @@ limitations under the License.
package features package features
import ( import (
apiextensionsfeatures "k8s.io/apiextensions-apiserver/pkg/features"
"k8s.io/apimachinery/pkg/util/version" "k8s.io/apimachinery/pkg/util/version"
genericfeatures "k8s.io/apiserver/pkg/features" genericfeatures "k8s.io/apiserver/pkg/features"
"k8s.io/component-base/featuregate" "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}, {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: { CrossNamespaceVolumeDataSource: {
{Version: version.MustParse("1.26"), Default: false, PreRelease: featuregate.Alpha}, {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}, {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: { DevicePluginCDIDevices: {
{Version: version.MustParse("1.28"), Default: false, PreRelease: featuregate.Alpha}, {Version: version.MustParse("1.28"), Default: false, PreRelease: featuregate.Alpha},
{Version: version.MustParse("1.29"), Default: true, PreRelease: featuregate.Beta}, {Version: version.MustParse("1.29"), Default: true, PreRelease: featuregate.Beta},

View File

@@ -17,6 +17,8 @@ limitations under the License.
package features package features
import ( import (
"k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/apimachinery/pkg/util/version"
utilfeature "k8s.io/apiserver/pkg/util/feature" utilfeature "k8s.io/apiserver/pkg/util/feature"
"k8s.io/component-base/featuregate" "k8s.io/component-base/featuregate"
) )
@@ -30,6 +32,7 @@ const (
// owner: @alexzielenski // owner: @alexzielenski
// alpha: v1.28 // alpha: v1.28
// beta: v1.30
// //
// Ignores errors raised on unchanged fields of Custom Resources // Ignores errors raised on unchanged fields of Custom Resources
// across UPDATE/PATCH requests. // across UPDATE/PATCH requests.
@@ -37,6 +40,8 @@ const (
// owner: @jpbetz // owner: @jpbetz
// alpha: v1.30 // alpha: v1.30
// beta: v1.31
// ga: v1.32
// //
// CustomResourceDefinitions may include SelectableFields to declare which fields // CustomResourceDefinitions may include SelectableFields to declare which fields
// may be used as field selectors. // may be used as field selectors.
@@ -44,13 +49,22 @@ const (
) )
func init() { func init() {
utilfeature.DefaultMutableFeatureGate.Add(defaultKubernetesFeatureGates) runtime.Must(utilfeature.DefaultMutableFeatureGate.AddVersioned(defaultVersionedKubernetesFeatureGates))
} }
// defaultKubernetesFeatureGates consists of all known Kubernetes-specific feature keys. // 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 here. The features will be // To add a new feature, define a key for it above and add it below. The features will be
// available throughout Kubernetes binaries. // available throughout Kubernetes binaries.
var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{ // To support n-3 compatibility version, features may only be removed 3 releases after graduation.
CRDValidationRatcheting: {Default: true, PreRelease: featuregate.Beta}, //
CustomResourceFieldSelectors: {Default: true, PreRelease: featuregate.Beta}, // 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},
},
} }