Skip to content

Commit 2935480

Browse files
Move Plugin Args defaults to versioned packages
Signed-off-by: Aldo Culquicondor <[email protected]>
1 parent ffec75d commit 2935480

File tree

23 files changed

+278
-139
lines changed

23 files changed

+278
-139
lines changed

cmd/kube-scheduler/app/options/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ go_test(
7171
deps = [
7272
"//cmd/kube-scheduler/app/config:go_default_library",
7373
"//pkg/scheduler/apis/config:go_default_library",
74+
"//pkg/scheduler/framework/plugins/interpodaffinity:go_default_library",
7475
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
7576
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
7677
"//staging/src/k8s.io/apimachinery/pkg/util/rand:go_default_library",

cmd/kube-scheduler/app/options/deprecated.go

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@ func (o *DeprecatedOptions) Validate() []error {
9191
// 1. --use-legacy-policy-config to use a policy file.
9292
// 2. --policy-configmap to use a policy config map value.
9393
// 3. --algorithm-provider to use a named algorithm provider.
94+
//
95+
// This function is only called when no config file is provided.
9496
func (o *DeprecatedOptions) ApplyTo(cfg *kubeschedulerconfig.KubeSchedulerConfiguration) error {
9597
if o == nil {
9698
return nil
@@ -120,20 +122,19 @@ func (o *DeprecatedOptions) ApplyTo(cfg *kubeschedulerconfig.KubeSchedulerConfig
120122
}
121123
}
122124

123-
// The following deprecated options affect the only existing profile that is
124-
// added by default.
125+
// Deprecated flags have an effect iff no config file was provided, in which
126+
// case this function expects a default KubeSchedulerConfiguration instance,
127+
// which has a single profile.
125128
profile := &cfg.Profiles[0]
126129
if len(o.SchedulerName) > 0 {
127130
profile.SchedulerName = o.SchedulerName
128131
}
129-
if o.HardPodAffinitySymmetricWeight != interpodaffinity.DefaultHardPodAffinityWeight {
130-
plCfg := kubeschedulerconfig.PluginConfig{
131-
Name: interpodaffinity.Name,
132-
Args: &kubeschedulerconfig.InterPodAffinityArgs{
133-
HardPodAffinityWeight: o.HardPodAffinitySymmetricWeight,
134-
},
135-
}
136-
profile.PluginConfig = append(profile.PluginConfig, plCfg)
132+
plCfg := kubeschedulerconfig.PluginConfig{
133+
Name: interpodaffinity.Name,
134+
Args: &kubeschedulerconfig.InterPodAffinityArgs{
135+
HardPodAffinityWeight: o.HardPodAffinitySymmetricWeight,
136+
},
137137
}
138+
profile.PluginConfig = append(profile.PluginConfig, plCfg)
138139
return nil
139140
}

cmd/kube-scheduler/app/options/options.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ import (
4949
kubeschedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config"
5050
kubeschedulerscheme "k8s.io/kubernetes/pkg/scheduler/apis/config/scheme"
5151
"k8s.io/kubernetes/pkg/scheduler/apis/config/validation"
52-
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/interpodaffinity"
5352
)
5453

5554
// Options has all the params needed to run a Scheduler
@@ -104,7 +103,7 @@ func NewOptions() (*Options, error) {
104103
UseLegacyPolicyConfig: false,
105104
PolicyConfigMapNamespace: metav1.NamespaceSystem,
106105
SchedulerName: corev1.DefaultSchedulerName,
107-
HardPodAffinitySymmetricWeight: interpodaffinity.DefaultHardPodAffinityWeight,
106+
HardPodAffinitySymmetricWeight: 1,
108107
},
109108
Metrics: metrics.NewOptions(),
110109
}

cmd/kube-scheduler/app/options/options_test.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929

3030
"github.com/google/go-cmp/cmp"
3131
"github.com/stretchr/testify/assert"
32+
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/interpodaffinity"
3233

3334
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3435
"k8s.io/apimachinery/pkg/runtime"
@@ -728,7 +729,17 @@ profiles:
728729
PodInitialBackoffSeconds: defaultPodInitialBackoffSeconds,
729730
PodMaxBackoffSeconds: defaultPodMaxBackoffSeconds,
730731
Profiles: []kubeschedulerconfig.KubeSchedulerProfile{
731-
{SchedulerName: "my-nice-scheduler"},
732+
{
733+
SchedulerName: "my-nice-scheduler",
734+
PluginConfig: []kubeschedulerconfig.PluginConfig{
735+
{
736+
Name: interpodaffinity.Name,
737+
Args: &kubeschedulerconfig.InterPodAffinityArgs{
738+
HardPodAffinityWeight: 1,
739+
},
740+
},
741+
},
742+
},
732743
},
733744
},
734745
},

pkg/scheduler/apis/config/scheme/scheme_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -233,8 +233,9 @@ profiles:
233233
PluginConfig: []config.PluginConfig{
234234
{
235235
Name: "InterPodAffinity",
236-
// TODO(acondor): Set default values.
237-
Args: &config.InterPodAffinityArgs{},
236+
Args: &config.InterPodAffinityArgs{
237+
HardPodAffinityWeight: 1,
238+
},
238239
},
239240
{
240241
Name: "NodeResourcesFit",

pkg/scheduler/apis/config/v1alpha2/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ go_test(
3939
"//pkg/scheduler/apis/config:go_default_library",
4040
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
4141
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
42+
"//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library",
4243
"//staging/src/k8s.io/component-base/config/v1alpha1:go_default_library",
4344
"//staging/src/k8s.io/kube-scheduler/config/v1alpha2:go_default_library",
4445
"//vendor/github.com/google/go-cmp/cmp:go_default_library",

pkg/scheduler/apis/config/v1alpha2/defaults.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,3 +156,12 @@ func SetDefaults_KubeSchedulerConfiguration(obj *v1alpha2.KubeSchedulerConfigura
156156
obj.EnableContentionProfiling = &enableContentionProfiling
157157
}
158158
}
159+
160+
func SetDefaults_InterPodAffinityArgs(obj *v1alpha2.InterPodAffinityArgs) {
161+
// Note that an object is created manually in cmd/kube-scheduler/app/options/deprecated.go
162+
// DeprecatedOptions#ApplyTo.
163+
// Update that object if a new default field is added here.
164+
if obj.HardPodAffinityWeight == nil {
165+
obj.HardPodAffinityWeight = pointer.Int32Ptr(1)
166+
}
167+
}

pkg/scheduler/apis/config/v1alpha2/defaults_test.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import (
2222

2323
"github.com/google/go-cmp/cmp"
2424
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
25+
"k8s.io/apimachinery/pkg/runtime"
26+
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
2527
componentbaseconfig "k8s.io/component-base/config/v1alpha1"
2628
"k8s.io/kube-scheduler/config/v1alpha2"
2729
"k8s.io/utils/pointer"
@@ -275,3 +277,47 @@ func TestSchedulerDefaults(t *testing.T) {
275277
})
276278
}
277279
}
280+
281+
func TestPluginArgsDefaults(t *testing.T) {
282+
tests := []struct {
283+
name string
284+
in runtime.Object
285+
want runtime.Object
286+
}{
287+
{
288+
name: "InterPodAffinityArgs empty",
289+
in: &v1alpha2.InterPodAffinityArgs{},
290+
want: &v1alpha2.InterPodAffinityArgs{
291+
HardPodAffinityWeight: pointer.Int32Ptr(1),
292+
},
293+
},
294+
{
295+
name: "InterPodAffinityArgs explicit 0",
296+
in: &v1alpha2.InterPodAffinityArgs{
297+
HardPodAffinityWeight: pointer.Int32Ptr(0),
298+
},
299+
want: &v1alpha2.InterPodAffinityArgs{
300+
HardPodAffinityWeight: pointer.Int32Ptr(0),
301+
},
302+
},
303+
{
304+
name: "InterPodAffinityArgs with value",
305+
in: &v1alpha2.InterPodAffinityArgs{
306+
HardPodAffinityWeight: pointer.Int32Ptr(5),
307+
},
308+
want: &v1alpha2.InterPodAffinityArgs{
309+
HardPodAffinityWeight: pointer.Int32Ptr(5),
310+
},
311+
},
312+
}
313+
for _, tc := range tests {
314+
scheme := runtime.NewScheme()
315+
utilruntime.Must(AddToScheme(scheme))
316+
t.Run(tc.name, func(t *testing.T) {
317+
scheme.Default(tc.in)
318+
if diff := cmp.Diff(tc.in, tc.want); diff != "" {
319+
t.Errorf("Got unexpected defaults (-want, +got):\n%s", diff)
320+
}
321+
})
322+
}
323+
}

pkg/scheduler/apis/config/v1alpha2/zz_generated.defaults.go

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/scheduler/factory.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -323,16 +323,12 @@ func (c *Configurator) createFromConfig(policy schedulerapi.Policy) (*Scheduler,
323323
}
324324
for i := range c.profiles {
325325
prof := &c.profiles[i]
326-
if prof.Plugins != nil {
327-
return nil, errors.New("using Plugins and Policy simultaneously is not supported")
328-
}
326+
// Plugins are empty when using Policy.
329327
prof.Plugins = &schedulerapi.Plugins{}
330328
prof.Plugins.Append(&defPlugins)
331329

332-
if len(prof.PluginConfig) != 0 {
333-
return nil, errors.New("using PluginConfig and Policy simultaneously is not supported")
334-
}
335-
prof.PluginConfig = append(prof.PluginConfig, defPluginConfig...)
330+
// PluginConfig is ignored when using Policy.
331+
prof.PluginConfig = defPluginConfig
336332
}
337333

338334
return c.create()

0 commit comments

Comments
 (0)