diff --git a/cmd/kube-scheduler/app/server_test.go b/cmd/kube-scheduler/app/server_test.go index 749225b411ba..b6bd19464718 100644 --- a/cmd/kube-scheduler/app/server_test.go +++ b/cmd/kube-scheduler/app/server_test.go @@ -39,7 +39,6 @@ import ( "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/scheduler/apis/config" "k8s.io/kubernetes/pkg/scheduler/apis/config/testing/defaults" - "k8s.io/kubernetes/pkg/scheduler/framework/plugins/names" ) func TestSetup(t *testing.T) { @@ -217,10 +216,10 @@ leaderElection: wantLeaderElection *componentbaseconfig.LeaderElectionConfiguration }{ { - name: "default config with an alpha feature enabled and an beta feature disabled", + name: "default config with an alpha feature enabled", flags: []string{ "--kubeconfig", configKubeconfig, - "--feature-gates=VolumeCapacityPriority=true,DefaultPodTopologySpread=false", + "--feature-gates=VolumeCapacityPriority=true", }, wantPlugins: map[string]*config.Plugins{ "default-scheduler": func() *config.Plugins { @@ -235,17 +234,11 @@ leaderElection: PreBind: defaults.ExpandedPluginsV1beta3.PreBind, Reserve: defaults.ExpandedPluginsV1beta3.Reserve, } - plugins.PreScore.Enabled = append(plugins.PreScore.Enabled, config.Plugin{Name: names.SelectorSpread, Weight: 0}) - plugins.Score.Enabled = append( - plugins.Score.Enabled, - config.Plugin{Name: names.SelectorSpread, Weight: 1}, - ) return plugins }(), }, restoreFeatures: map[featuregate.Feature]bool{ - features.VolumeCapacityPriority: false, - features.DefaultPodTopologySpread: true, + features.VolumeCapacityPriority: false, }, }, { diff --git a/pkg/features/kube_features.go b/pkg/features/kube_features.go index d5f40a526601..42c8c708fe0f 100644 --- a/pkg/features/kube_features.go +++ b/pkg/features/kube_features.go @@ -888,7 +888,7 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS DaemonSetUpdateSurge: {Default: true, PreRelease: featuregate.Beta}, // on by default in 1.22 DownwardAPIHugePages: {Default: true, PreRelease: featuregate.Beta}, // on by default in 1.22 AnyVolumeDataSource: {Default: false, PreRelease: featuregate.Alpha}, - DefaultPodTopologySpread: {Default: true, PreRelease: featuregate.Beta}, + DefaultPodTopologySpread: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.26 WinOverlay: {Default: true, PreRelease: featuregate.Beta}, WinDSR: {Default: false, PreRelease: featuregate.Alpha}, DisableAcceleratorUsageMetrics: {Default: true, PreRelease: featuregate.Beta}, diff --git a/pkg/scheduler/apis/config/types_pluginargs.go b/pkg/scheduler/apis/config/types_pluginargs.go index e3f909da3df2..31bb8df0201d 100644 --- a/pkg/scheduler/apis/config/types_pluginargs.go +++ b/pkg/scheduler/apis/config/types_pluginargs.go @@ -105,8 +105,7 @@ type PodTopologySpreadArgs struct { // Nodes and Zones. // - "List": Use constraints defined in .defaultConstraints. // - // Defaults to "List" if feature gate DefaultPodTopologySpread is disabled - // and to "System" if enabled. + // Defaults to "System". // +optional DefaultingType PodTopologySpreadConstraintsDefaulting } diff --git a/pkg/scheduler/apis/config/v1beta2/default_plugins.go b/pkg/scheduler/apis/config/v1beta2/default_plugins.go index 1d63003aa8bb..0eb8af06e46d 100644 --- a/pkg/scheduler/apis/config/v1beta2/default_plugins.go +++ b/pkg/scheduler/apis/config/v1beta2/default_plugins.go @@ -116,16 +116,6 @@ func applyFeatureGates(config *v1beta2.Plugins) { if utilfeature.DefaultFeatureGate.Enabled(features.VolumeCapacityPriority) { config.Score.Enabled = append(config.Score.Enabled, v1beta2.Plugin{Name: names.VolumeBinding, Weight: pointer.Int32Ptr(1)}) } - - if !utilfeature.DefaultFeatureGate.Enabled(features.DefaultPodTopologySpread) { - // When feature is enabled, the default spreading is done by - // PodTopologySpread plugin, which is enabled by default. - klog.InfoS("Registering SelectorSpread plugin") - s := v1beta2.Plugin{Name: names.SelectorSpread} - config.PreScore.Enabled = append(config.PreScore.Enabled, s) - s.Weight = pointer.Int32Ptr(1) - config.Score.Enabled = append(config.Score.Enabled, s) - } } // mergePlugins merges the custom set into the given default one, handling disabled sets. diff --git a/pkg/scheduler/apis/config/v1beta2/default_plugins_test.go b/pkg/scheduler/apis/config/v1beta2/default_plugins_test.go index 934588833d71..6909fc740416 100644 --- a/pkg/scheduler/apis/config/v1beta2/default_plugins_test.go +++ b/pkg/scheduler/apis/config/v1beta2/default_plugins_test.go @@ -24,7 +24,6 @@ import ( "k8s.io/component-base/featuregate" featuregatetesting "k8s.io/component-base/featuregate/testing" "k8s.io/kube-scheduler/config/v1beta2" - "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/names" "k8s.io/utils/pointer" ) @@ -114,90 +113,6 @@ func TestApplyFeatureGates(t *testing.T) { }, }, }, - { - name: "DefaultPodTopologySpread disabled", - features: map[featuregate.Feature]bool{ - features.DefaultPodTopologySpread: false, - }, - wantConfig: &v1beta2.Plugins{ - QueueSort: v1beta2.PluginSet{ - Enabled: []v1beta2.Plugin{ - {Name: names.PrioritySort}, - }, - }, - PreFilter: v1beta2.PluginSet{ - Enabled: []v1beta2.Plugin{ - {Name: names.NodeResourcesFit}, - {Name: names.NodePorts}, - {Name: names.VolumeRestrictions}, - {Name: names.PodTopologySpread}, - {Name: names.InterPodAffinity}, - {Name: names.VolumeBinding}, - {Name: names.NodeAffinity}, - }, - }, - Filter: v1beta2.PluginSet{ - Enabled: []v1beta2.Plugin{ - {Name: names.NodeUnschedulable}, - {Name: names.NodeName}, - {Name: names.TaintToleration}, - {Name: names.NodeAffinity}, - {Name: names.NodePorts}, - {Name: names.NodeResourcesFit}, - {Name: names.VolumeRestrictions}, - {Name: names.EBSLimits}, - {Name: names.GCEPDLimits}, - {Name: names.NodeVolumeLimits}, - {Name: names.AzureDiskLimits}, - {Name: names.VolumeBinding}, - {Name: names.VolumeZone}, - {Name: names.PodTopologySpread}, - {Name: names.InterPodAffinity}, - }, - }, - PostFilter: v1beta2.PluginSet{ - Enabled: []v1beta2.Plugin{ - {Name: names.DefaultPreemption}, - }, - }, - PreScore: v1beta2.PluginSet{ - Enabled: []v1beta2.Plugin{ - {Name: names.InterPodAffinity}, - {Name: names.PodTopologySpread}, - {Name: names.TaintToleration}, - {Name: names.NodeAffinity}, - {Name: names.SelectorSpread}, - }, - }, - Score: v1beta2.PluginSet{ - Enabled: []v1beta2.Plugin{ - {Name: names.NodeResourcesBalancedAllocation, Weight: pointer.Int32Ptr(1)}, - {Name: names.ImageLocality, Weight: pointer.Int32Ptr(1)}, - {Name: names.InterPodAffinity, Weight: pointer.Int32Ptr(1)}, - {Name: names.NodeResourcesFit, Weight: pointer.Int32Ptr(1)}, - {Name: names.NodeAffinity, Weight: pointer.Int32Ptr(1)}, - {Name: names.PodTopologySpread, Weight: pointer.Int32Ptr(2)}, - {Name: names.TaintToleration, Weight: pointer.Int32Ptr(1)}, - {Name: names.SelectorSpread, Weight: pointer.Int32Ptr(1)}, - }, - }, - Reserve: v1beta2.PluginSet{ - Enabled: []v1beta2.Plugin{ - {Name: names.VolumeBinding}, - }, - }, - PreBind: v1beta2.PluginSet{ - Enabled: []v1beta2.Plugin{ - {Name: names.VolumeBinding}, - }, - }, - Bind: v1beta2.PluginSet{ - Enabled: []v1beta2.Plugin{ - {Name: names.DefaultBinder}, - }, - }, - }, - }, } for _, test := range tests { diff --git a/pkg/scheduler/apis/config/v1beta2/defaults.go b/pkg/scheduler/apis/config/v1beta2/defaults.go index ebea4c4f62e0..9e92a323412f 100644 --- a/pkg/scheduler/apis/config/v1beta2/defaults.go +++ b/pkg/scheduler/apis/config/v1beta2/defaults.go @@ -227,14 +227,8 @@ func SetDefaults_NodeResourcesBalancedAllocationArgs(obj *v1beta2.NodeResourcesB } func SetDefaults_PodTopologySpreadArgs(obj *v1beta2.PodTopologySpreadArgs) { - if feature.DefaultFeatureGate.Enabled(features.DefaultPodTopologySpread) { - if obj.DefaultingType == "" { - obj.DefaultingType = v1beta2.SystemDefaulting - } - return - } if obj.DefaultingType == "" { - obj.DefaultingType = v1beta2.ListDefaulting + obj.DefaultingType = v1beta2.SystemDefaulting } } diff --git a/pkg/scheduler/apis/config/v1beta2/defaults_test.go b/pkg/scheduler/apis/config/v1beta2/defaults_test.go index 2e101dd618b8..d25b5309365c 100644 --- a/pkg/scheduler/apis/config/v1beta2/defaults_test.go +++ b/pkg/scheduler/apis/config/v1beta2/defaults_test.go @@ -586,16 +586,6 @@ func TestPluginArgsDefaults(t *testing.T) { DefaultingType: v1beta2.SystemDefaulting, }, }, - { - name: "PodTopologySpreadArgs empty, DefaultPodTopologySpread feature disabled", - features: map[featuregate.Feature]bool{ - features.DefaultPodTopologySpread: false, - }, - in: &v1beta2.PodTopologySpreadArgs{}, - want: &v1beta2.PodTopologySpreadArgs{ - DefaultingType: v1beta2.ListDefaulting, - }, - }, { name: "NodeResourcesFitArgs not set", in: &v1beta2.NodeResourcesFitArgs{}, diff --git a/pkg/scheduler/apis/config/v1beta3/default_plugins.go b/pkg/scheduler/apis/config/v1beta3/default_plugins.go index 9519eb3e6936..ca360b78260f 100644 --- a/pkg/scheduler/apis/config/v1beta3/default_plugins.go +++ b/pkg/scheduler/apis/config/v1beta3/default_plugins.go @@ -18,10 +18,8 @@ package v1beta3 import ( "k8s.io/apimachinery/pkg/util/sets" - utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/klog/v2" "k8s.io/kube-scheduler/config/v1beta3" - "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/names" "k8s.io/utils/pointer" ) @@ -54,21 +52,10 @@ func getDefaultPlugins() *v1beta3.Plugins { }, }, } - applyFeatureGates(plugins) return plugins } -func applyFeatureGates(config *v1beta3.Plugins) { - if !utilfeature.DefaultFeatureGate.Enabled(features.DefaultPodTopologySpread) { - // When feature is enabled, the default spreading is done by - // PodTopologySpread plugin, which is enabled by default. - klog.InfoS("Registering SelectorSpread plugin") - s := v1beta3.Plugin{Name: names.SelectorSpread, Weight: pointer.Int32Ptr(1)} - config.MultiPoint.Enabled = append(config.MultiPoint.Enabled, s) - } -} - // mergePlugins merges the custom set into the given default one, handling disabled sets. func mergePlugins(defaultPlugins, customPlugins *v1beta3.Plugins) *v1beta3.Plugins { if customPlugins == nil { diff --git a/pkg/scheduler/apis/config/v1beta3/default_plugins_test.go b/pkg/scheduler/apis/config/v1beta3/default_plugins_test.go index 4b73e21f631f..30c32761c4d7 100644 --- a/pkg/scheduler/apis/config/v1beta3/default_plugins_test.go +++ b/pkg/scheduler/apis/config/v1beta3/default_plugins_test.go @@ -24,7 +24,6 @@ import ( "k8s.io/apiserver/pkg/util/feature" "k8s.io/component-base/featuregate" featuregatetesting "k8s.io/component-base/featuregate/testing" - "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/names" "k8s.io/utils/pointer" ) @@ -64,39 +63,6 @@ func TestApplyFeatureGates(t *testing.T) { }, }, }, - { - name: "DefaultPodTopologySpread disabled", - features: map[featuregate.Feature]bool{ - features.DefaultPodTopologySpread: false, - }, - wantConfig: &v1beta3.Plugins{ - MultiPoint: v1beta3.PluginSet{ - Enabled: []v1beta3.Plugin{ - {Name: names.PrioritySort}, - {Name: names.NodeUnschedulable}, - {Name: names.NodeName}, - {Name: names.TaintToleration, Weight: pointer.Int32(3)}, - {Name: names.NodeAffinity, Weight: pointer.Int32(2)}, - {Name: names.NodePorts}, - {Name: names.NodeResourcesFit, Weight: pointer.Int32(1)}, - {Name: names.VolumeRestrictions}, - {Name: names.EBSLimits}, - {Name: names.GCEPDLimits}, - {Name: names.NodeVolumeLimits}, - {Name: names.AzureDiskLimits}, - {Name: names.VolumeBinding}, - {Name: names.VolumeZone}, - {Name: names.PodTopologySpread, Weight: pointer.Int32(2)}, - {Name: names.InterPodAffinity, Weight: pointer.Int32(2)}, - {Name: names.DefaultPreemption}, - {Name: names.NodeResourcesBalancedAllocation, Weight: pointer.Int32(1)}, - {Name: names.ImageLocality, Weight: pointer.Int32(1)}, - {Name: names.DefaultBinder}, - {Name: names.SelectorSpread, Weight: pointer.Int32(1)}, - }, - }, - }, - }, } for _, test := range tests { diff --git a/pkg/scheduler/apis/config/v1beta3/defaults.go b/pkg/scheduler/apis/config/v1beta3/defaults.go index cc333e08667e..cc785a92b49b 100644 --- a/pkg/scheduler/apis/config/v1beta3/defaults.go +++ b/pkg/scheduler/apis/config/v1beta3/defaults.go @@ -227,14 +227,8 @@ func SetDefaults_NodeResourcesBalancedAllocationArgs(obj *v1beta3.NodeResourcesB } func SetDefaults_PodTopologySpreadArgs(obj *v1beta3.PodTopologySpreadArgs) { - if feature.DefaultFeatureGate.Enabled(features.DefaultPodTopologySpread) { - if obj.DefaultingType == "" { - obj.DefaultingType = v1beta3.SystemDefaulting - } - return - } if obj.DefaultingType == "" { - obj.DefaultingType = v1beta3.ListDefaulting + obj.DefaultingType = v1beta3.SystemDefaulting } } diff --git a/pkg/scheduler/apis/config/v1beta3/defaults_test.go b/pkg/scheduler/apis/config/v1beta3/defaults_test.go index 27b53fcdb925..f1c2a0fa27a4 100644 --- a/pkg/scheduler/apis/config/v1beta3/defaults_test.go +++ b/pkg/scheduler/apis/config/v1beta3/defaults_test.go @@ -581,16 +581,6 @@ func TestPluginArgsDefaults(t *testing.T) { DefaultingType: v1beta3.SystemDefaulting, }, }, - { - name: "PodTopologySpreadArgs empty, DefaultPodTopologySpread feature disabled", - features: map[featuregate.Feature]bool{ - features.DefaultPodTopologySpread: false, - }, - in: &v1beta3.PodTopologySpreadArgs{}, - want: &v1beta3.PodTopologySpreadArgs{ - DefaultingType: v1beta3.ListDefaulting, - }, - }, { name: "NodeResourcesFitArgs not set", in: &v1beta3.NodeResourcesFitArgs{}, diff --git a/staging/src/k8s.io/kube-scheduler/config/v1beta2/types_pluginargs.go b/staging/src/k8s.io/kube-scheduler/config/v1beta2/types_pluginargs.go index feb715497a50..3ab964f42002 100644 --- a/staging/src/k8s.io/kube-scheduler/config/v1beta2/types_pluginargs.go +++ b/staging/src/k8s.io/kube-scheduler/config/v1beta2/types_pluginargs.go @@ -110,8 +110,7 @@ type PodTopologySpreadArgs struct { // Nodes and Zones. // - "List": Use constraints defined in .defaultConstraints. // - // Defaults to "List" if feature gate DefaultPodTopologySpread is disabled - // and to "System" if enabled. + // Defaults to "System". // +optional DefaultingType PodTopologySpreadConstraintsDefaulting `json:"defaultingType,omitempty"` } diff --git a/staging/src/k8s.io/kube-scheduler/config/v1beta3/types_pluginargs.go b/staging/src/k8s.io/kube-scheduler/config/v1beta3/types_pluginargs.go index e5451509f91f..725cd1b92d4d 100644 --- a/staging/src/k8s.io/kube-scheduler/config/v1beta3/types_pluginargs.go +++ b/staging/src/k8s.io/kube-scheduler/config/v1beta3/types_pluginargs.go @@ -110,8 +110,7 @@ type PodTopologySpreadArgs struct { // Nodes and Zones. // - "List": Use constraints defined in .defaultConstraints. // - // Defaults to "List" if feature gate DefaultPodTopologySpread is disabled - // and to "System" if enabled. + // Defaults to "System". // +optional DefaultingType PodTopologySpreadConstraintsDefaulting `json:"defaultingType,omitempty"` }