Merge pull request #109072 from jiahuif-forks/feature/leader-migration/to-ga

Graduate Leader Migration to GA
This commit is contained in:
Kubernetes Prow Robot 2022-03-30 10:58:24 -07:00 committed by GitHub
commit d4ac0ebecb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 40 deletions

View File

@ -770,6 +770,7 @@ const (
// owner: @jiahuif // owner: @jiahuif
// alpha: v1.21 // alpha: v1.21
// beta: v1.22 // beta: v1.22
// GA: v1.24
// //
// Enables Leader Migration for kube-controller-manager and cloud-controller-manager // Enables Leader Migration for kube-controller-manager and cloud-controller-manager
ControllerManagerLeaderMigration featuregate.Feature = "ControllerManagerLeaderMigration" ControllerManagerLeaderMigration featuregate.Feature = "ControllerManagerLeaderMigration"
@ -993,7 +994,7 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
KubeletInUserNamespace: {Default: false, PreRelease: featuregate.Alpha}, KubeletInUserNamespace: {Default: false, PreRelease: featuregate.Alpha},
MemoryQoS: {Default: false, PreRelease: featuregate.Alpha}, MemoryQoS: {Default: false, PreRelease: featuregate.Alpha},
CPUManagerPolicyOptions: {Default: true, PreRelease: featuregate.Beta}, 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}, CPUManagerPolicyAlphaOptions: {Default: false, PreRelease: featuregate.Alpha},
CPUManagerPolicyBetaOptions: {Default: true, PreRelease: featuregate.Beta}, CPUManagerPolicyBetaOptions: {Default: true, PreRelease: featuregate.Beta},
JobMutableNodeSchedulingDirectives: {Default: true, PreRelease: featuregate.Beta}, JobMutableNodeSchedulingDirectives: {Default: true, PreRelease: featuregate.Beta},

View File

@ -37,6 +37,7 @@ const (
// owner: @jiahuif // owner: @jiahuif
// alpha: v1.21 // alpha: v1.21
// beta: v1.22 // beta: v1.22
// GA: v1.24
// //
// Enables Leader Migration for kube-controller-manager and cloud-controller-manager // Enables Leader Migration for kube-controller-manager and cloud-controller-manager
// copied and sync'ed from k8s.io/kubernetes/pkg/features/kube_features.go // 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. // 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{ var cloudPublicFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{
IPv6DualStack: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, 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
} }

View File

@ -23,49 +23,30 @@ import (
"testing" "testing"
"github.com/spf13/pflag" "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/config"
"k8s.io/controller-manager/pkg/features"
migrationconfig "k8s.io/controller-manager/pkg/leadermigration/config" migrationconfig "k8s.io/controller-manager/pkg/leadermigration/config"
) )
func TestLeaderMigrationOptions(t *testing.T) { func TestLeaderMigrationOptions(t *testing.T) {
testCases := []struct { testCases := []struct {
name string name string
flags []string flags []string
configContent string configContent string
expectEnabled bool expectEnabled bool
expectErr bool expectErr bool
enableFeatureGate bool expectConfig *config.LeaderMigrationConfiguration
expectConfig *config.LeaderMigrationConfiguration
}{ }{
{ {
name: "default (disabled), with feature gate disabled", name: "enabled, with default configuration",
flags: []string{}, flags: []string{"--enable-leader-migration"},
enableFeatureGate: false, expectEnabled: true,
expectEnabled: false, expectErr: false,
expectErr: false, expectConfig: migrationconfig.DefaultLeaderMigrationConfiguration(),
}, },
{ {
name: "enabled, with feature gate disabled", name: "enabled, with custom configuration file",
flags: []string{"--enable-leader-migration"}, flags: []string{"--enable-leader-migration"},
enableFeatureGate: false, expectEnabled: true,
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,
configContent: ` configContent: `
apiVersion: controllermanager.config.k8s.io/v1alpha1 apiVersion: controllermanager.config.k8s.io/v1alpha1
kind: LeaderMigrationConfiguration kind: LeaderMigrationConfiguration
@ -81,10 +62,9 @@ controllerLeaders: []
}, },
}, },
{ {
name: "enabled, with custom configuration file (version v1beta1)", name: "enabled, with custom configuration file (version v1beta1)",
flags: []string{"--enable-leader-migration"}, flags: []string{"--enable-leader-migration"},
enableFeatureGate: true, expectEnabled: true,
expectEnabled: true,
configContent: ` configContent: `
apiVersion: controllermanager.config.k8s.io/v1beta1 apiVersion: controllermanager.config.k8s.io/v1beta1
kind: LeaderMigrationConfiguration kind: LeaderMigrationConfiguration
@ -102,7 +82,6 @@ controllerLeaders: []
} }
for _, tc := range testCases { for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ControllerManagerLeaderMigration, tc.enableFeatureGate)()
flags := tc.flags flags := tc.flags
if tc.configContent != "" { if tc.configContent != "" {
configFile, err := ioutil.TempFile("", tc.name) configFile, err := ioutil.TempFile("", tc.name)