Skip to content

Commit d0f99fe

Browse files
authored
Merge pull request kubernetes#90212 from pancernik/pod-topology-spread-plugin-args
Add PodTopologySpread plugin arg types to kube-scheduler.config.k8s.io
2 parents aa0665d + b511fa8 commit d0f99fe

File tree

16 files changed

+157
-28
lines changed

16 files changed

+157
-28
lines changed

pkg/scheduler/apis/config/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ go_library(
1313
importpath = "k8s.io/kubernetes/pkg/scheduler/apis/config",
1414
visibility = ["//visibility:public"],
1515
deps = [
16+
"//staging/src/k8s.io/api/core/v1:go_default_library",
1617
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
1718
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
1819
"//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",

pkg/scheduler/apis/config/register.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ func addKnownTypes(scheme *runtime.Scheme) error {
4242
&InterPodAffinityArgs{},
4343
&NodeLabelArgs{},
4444
&NodeResourcesFitArgs{},
45+
&PodTopologySpreadArgs{},
4546
&RequestedToCapacityRatioArgs{},
4647
&ServiceAffinityArgs{},
4748
)

pkg/scheduler/apis/config/types_pluginargs.go

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package config
1818

1919
import (
20+
v1 "k8s.io/api/core/v1"
2021
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2122
)
2223

@@ -33,7 +34,7 @@ type InterPodAffinityArgs struct {
3334

3435
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
3536

36-
// NodeLabelArgs holds arguments that used to configure the NodeLabel plugin.
37+
// NodeLabelArgs holds arguments used to configure the NodeLabel plugin.
3738
type NodeLabelArgs struct {
3839
metav1.TypeMeta
3940

@@ -60,6 +61,21 @@ type NodeResourcesFitArgs struct {
6061

6162
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
6263

64+
// PodTopologySpreadArgs holds arguments used to configure the PodTopologySpread plugin.
65+
type PodTopologySpreadArgs struct {
66+
metav1.TypeMeta
67+
68+
// DefaultConstraints defines topology spread constraints to be applied to
69+
// pods that don't define any in `pod.spec.topologySpreadConstraints`.
70+
// `topologySpreadConstraint.labelSelectors` must be empty, as they are
71+
// deduced the pods' membership to Services, Replication Controllers, Replica
72+
// Sets or Stateful Sets.
73+
// Empty by default.
74+
DefaultConstraints []v1.TopologySpreadConstraint
75+
}
76+
77+
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
78+
6379
// RequestedToCapacityRatioArgs holds arguments used to configure RequestedToCapacityRatio plugin.
6480
type RequestedToCapacityRatioArgs struct {
6581
metav1.TypeMeta

pkg/scheduler/apis/config/v1alpha2/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ go_library(
1616
deps = [
1717
"//pkg/apis/core:go_default_library",
1818
"//pkg/scheduler/apis/config:go_default_library",
19+
"//staging/src/k8s.io/api/core/v1:go_default_library",
1920
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
2021
"//staging/src/k8s.io/apimachinery/pkg/conversion:go_default_library",
2122
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",

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

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

pkg/scheduler/apis/config/zz_generated.deepcopy.go

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

pkg/scheduler/framework/plugins/podtopologyspread/BUILD

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ go_library(
2424
"//staging/src/k8s.io/client-go/informers:go_default_library",
2525
"//staging/src/k8s.io/client-go/listers/apps/v1:go_default_library",
2626
"//staging/src/k8s.io/client-go/listers/core/v1:go_default_library",
27+
"//staging/src/k8s.io/kube-scheduler/config/v1alpha2:go_default_library",
2728
"//vendor/k8s.io/klog:go_default_library",
2829
],
2930
)
@@ -49,6 +50,7 @@ go_test(
4950
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
5051
"//staging/src/k8s.io/client-go/informers:go_default_library",
5152
"//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library",
53+
"//staging/src/k8s.io/kube-scheduler/config/v1alpha2:go_default_library",
5254
"//vendor/github.com/google/go-cmp/cmp:go_default_library",
5355
"//vendor/k8s.io/utils/pointer:go_default_library",
5456
],

pkg/scheduler/framework/plugins/podtopologyspread/common.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ type topologySpreadConstraint struct {
4242
// .DefaultConstraints and the selectors from the services, replication
4343
// controllers, replica sets and stateful sets that match the pod.
4444
func (pl *PodTopologySpread) defaultConstraints(p *v1.Pod, action v1.UnsatisfiableConstraintAction) ([]topologySpreadConstraint, error) {
45-
constraints, err := filterTopologySpreadConstraints(pl.DefaultConstraints, action)
45+
constraints, err := filterTopologySpreadConstraints(pl.args.DefaultConstraints, action)
4646
if err != nil || len(constraints) == 0 {
4747
return nil, err
4848
}

pkg/scheduler/framework/plugins/podtopologyspread/filtering_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"k8s.io/apimachinery/pkg/runtime"
2929
"k8s.io/client-go/informers"
3030
"k8s.io/client-go/kubernetes/fake"
31+
schedulerv1alpha2 "k8s.io/kube-scheduler/config/v1alpha2"
3132
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
3233
"k8s.io/kubernetes/pkg/scheduler/internal/cache"
3334
"k8s.io/kubernetes/pkg/scheduler/internal/parallelize"
@@ -517,7 +518,7 @@ func TestPreFilterState(t *testing.T) {
517518
informerFactory := informers.NewSharedInformerFactory(fake.NewSimpleClientset(tt.objs...), 0)
518519
pl := PodTopologySpread{
519520
sharedLister: cache.NewSnapshot(tt.existingPods, tt.nodes),
520-
Args: Args{
521+
args: schedulerv1alpha2.PodTopologySpreadArgs{
521522
DefaultConstraints: tt.defaultConstraints,
522523
},
523524
}

pkg/scheduler/framework/plugins/podtopologyspread/plugin.go

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,15 @@ package podtopologyspread
1919
import (
2020
"fmt"
2121

22-
"k8s.io/api/core/v1"
22+
v1 "k8s.io/api/core/v1"
2323
metav1validation "k8s.io/apimachinery/pkg/apis/meta/v1/validation"
2424
"k8s.io/apimachinery/pkg/runtime"
2525
"k8s.io/apimachinery/pkg/util/sets"
2626
"k8s.io/apimachinery/pkg/util/validation/field"
2727
"k8s.io/client-go/informers"
2828
appslisters "k8s.io/client-go/listers/apps/v1"
2929
corelisters "k8s.io/client-go/listers/core/v1"
30+
schedulerv1alpha2 "k8s.io/kube-scheduler/config/v1alpha2"
3031
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
3132
)
3233

@@ -39,22 +40,9 @@ var (
3940
supportedScheduleActions = sets.NewString(string(v1.DoNotSchedule), string(v1.ScheduleAnyway))
4041
)
4142

42-
// Args holds the arguments to configure the plugin.
43-
type Args struct {
44-
// DefaultConstraints defines topology spread constraints to be applied to
45-
// pods that don't define any in `pod.spec.topologySpreadConstraints`.
46-
// `topologySpreadConstraint.labelSelectors` must be empty, as they are
47-
// deduced the pods' membership to Services, Replication Controllers, Replica
48-
// Sets or Stateful Sets.
49-
// Empty by default.
50-
// +optional
51-
// +listType=atomic
52-
DefaultConstraints []v1.TopologySpreadConstraint `json:"defaultConstraints"`
53-
}
54-
5543
// PodTopologySpread is a plugin that ensures pod's topologySpreadConstraints is satisfied.
5644
type PodTopologySpread struct {
57-
Args
45+
args schedulerv1alpha2.PodTopologySpreadArgs
5846
sharedLister framework.SharedLister
5947
services corelisters.ServiceLister
6048
replicationCtrls corelisters.ReplicationControllerLister
@@ -79,7 +67,7 @@ func (pl *PodTopologySpread) Name() string {
7967

8068
// BuildArgs returns the arguments used to build the plugin.
8169
func (pl *PodTopologySpread) BuildArgs() interface{} {
82-
return pl.Args
70+
return pl.args
8371
}
8472

8573
// New initializes a new plugin and returns it.
@@ -88,13 +76,13 @@ func New(args runtime.Object, h framework.FrameworkHandle) (framework.Plugin, er
8876
return nil, fmt.Errorf("SnapshotSharedlister is nil")
8977
}
9078
pl := &PodTopologySpread{sharedLister: h.SnapshotSharedLister()}
91-
if err := framework.DecodeInto(args, &pl.Args); err != nil {
79+
if err := framework.DecodeInto(args, &pl.args); err != nil {
9280
return nil, err
9381
}
94-
if err := validateArgs(&pl.Args); err != nil {
82+
if err := validateArgs(&pl.args); err != nil {
9583
return nil, err
9684
}
97-
if len(pl.DefaultConstraints) != 0 {
85+
if len(pl.args.DefaultConstraints) != 0 {
9886
if h.SharedInformerFactory() == nil {
9987
return nil, fmt.Errorf("SharedInformerFactory is nil")
10088
}
@@ -113,7 +101,7 @@ func (pl *PodTopologySpread) setListers(factory informers.SharedInformerFactory)
113101
// validateArgs replicates the validation from
114102
// pkg/apis/core/validation.validateTopologySpreadConstraints.
115103
// This has the additional check for .labelSelector to be nil.
116-
func validateArgs(args *Args) error {
104+
func validateArgs(args *schedulerv1alpha2.PodTopologySpreadArgs) error {
117105
var allErrs field.ErrorList
118106
path := field.NewPath("defaultConstraints")
119107
for i, c := range args.DefaultConstraints {

0 commit comments

Comments
 (0)