diff --git a/pkg/features/kube_features.go b/pkg/features/kube_features.go index c042bbed3a6..6b6689c761e 100644 --- a/pkg/features/kube_features.go +++ b/pkg/features/kube_features.go @@ -770,6 +770,7 @@ const ( // owner: @jiahuif // alpha: v1.21 // beta: v1.22 + // GA: v1.24 // // Enables Leader Migration for kube-controller-manager and cloud-controller-manager ControllerManagerLeaderMigration featuregate.Feature = "ControllerManagerLeaderMigration" @@ -993,7 +994,7 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS KubeletInUserNamespace: {Default: false, PreRelease: featuregate.Alpha}, MemoryQoS: {Default: false, PreRelease: featuregate.Alpha}, CPUManagerPolicyOptions: {Default: true, PreRelease: featuregate.Beta}, - ControllerManagerLeaderMigration: {Default: true, PreRelease: featuregate.Beta}, + ControllerManagerLeaderMigration: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.26 CPUManagerPolicyAlphaOptions: {Default: false, PreRelease: featuregate.Alpha}, CPUManagerPolicyBetaOptions: {Default: true, PreRelease: featuregate.Beta}, JobMutableNodeSchedulingDirectives: {Default: true, PreRelease: featuregate.Beta}, diff --git a/staging/src/k8s.io/controller-manager/pkg/features/kube_features.go b/staging/src/k8s.io/controller-manager/pkg/features/kube_features.go index a26686c36cc..d39713d1b3b 100644 --- a/staging/src/k8s.io/controller-manager/pkg/features/kube_features.go +++ b/staging/src/k8s.io/controller-manager/pkg/features/kube_features.go @@ -37,6 +37,7 @@ const ( // owner: @jiahuif // alpha: v1.21 // beta: v1.22 + // GA: v1.24 // // Enables Leader Migration for kube-controller-manager and cloud-controller-manager // copied and sync'ed from k8s.io/kubernetes/pkg/features/kube_features.go @@ -51,5 +52,5 @@ func SetupCurrentKubernetesSpecificFeatureGates(featuregates featuregate.Mutable // To add a new feature, define a key for it at k8s.io/api/pkg/features and add it here. var cloudPublicFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{ IPv6DualStack: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, - ControllerManagerLeaderMigration: {Default: true, PreRelease: featuregate.Beta}, + ControllerManagerLeaderMigration: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.26 } diff --git a/staging/src/k8s.io/controller-manager/pkg/leadermigration/options/options_test.go b/staging/src/k8s.io/controller-manager/pkg/leadermigration/options/options_test.go index 5bcba5e480e..b6db3686e51 100644 --- a/staging/src/k8s.io/controller-manager/pkg/leadermigration/options/options_test.go +++ b/staging/src/k8s.io/controller-manager/pkg/leadermigration/options/options_test.go @@ -23,49 +23,30 @@ import ( "testing" "github.com/spf13/pflag" - utilfeature "k8s.io/apiserver/pkg/util/feature" - featuregatetesting "k8s.io/component-base/featuregate/testing" "k8s.io/controller-manager/config" - "k8s.io/controller-manager/pkg/features" migrationconfig "k8s.io/controller-manager/pkg/leadermigration/config" ) func TestLeaderMigrationOptions(t *testing.T) { testCases := []struct { - name string - flags []string - configContent string - expectEnabled bool - expectErr bool - enableFeatureGate bool - expectConfig *config.LeaderMigrationConfiguration + name string + flags []string + configContent string + expectEnabled bool + expectErr bool + expectConfig *config.LeaderMigrationConfiguration }{ { - name: "default (disabled), with feature gate disabled", - flags: []string{}, - enableFeatureGate: false, - expectEnabled: false, - expectErr: false, + name: "enabled, with default configuration", + flags: []string{"--enable-leader-migration"}, + expectEnabled: true, + expectErr: false, + expectConfig: migrationconfig.DefaultLeaderMigrationConfiguration(), }, { - name: "enabled, with feature gate disabled", - flags: []string{"--enable-leader-migration"}, - enableFeatureGate: false, - expectErr: true, - }, - { - name: "enabled, with default configuration", - flags: []string{"--enable-leader-migration"}, - enableFeatureGate: true, - expectEnabled: true, - expectErr: false, - expectConfig: migrationconfig.DefaultLeaderMigrationConfiguration(), - }, - { - name: "enabled, with custom configuration file", - flags: []string{"--enable-leader-migration"}, - enableFeatureGate: true, - expectEnabled: true, + name: "enabled, with custom configuration file", + flags: []string{"--enable-leader-migration"}, + expectEnabled: true, configContent: ` apiVersion: controllermanager.config.k8s.io/v1alpha1 kind: LeaderMigrationConfiguration @@ -81,10 +62,9 @@ controllerLeaders: [] }, }, { - name: "enabled, with custom configuration file (version v1beta1)", - flags: []string{"--enable-leader-migration"}, - enableFeatureGate: true, - expectEnabled: true, + name: "enabled, with custom configuration file (version v1beta1)", + flags: []string{"--enable-leader-migration"}, + expectEnabled: true, configContent: ` apiVersion: controllermanager.config.k8s.io/v1beta1 kind: LeaderMigrationConfiguration @@ -102,7 +82,6 @@ controllerLeaders: [] } for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ControllerManagerLeaderMigration, tc.enableFeatureGate)() flags := tc.flags if tc.configContent != "" { configFile, err := ioutil.TempFile("", tc.name)