diff --git a/test/integration/scheduler_perf/config/performance-config.yaml b/test/integration/scheduler_perf/config/performance-config.yaml index 4ea03b9959a..3be7e3b77af 100644 --- a/test/integration/scheduler_perf/config/performance-config.yaml +++ b/test/integration/scheduler_perf/config/performance-config.yaml @@ -110,9 +110,9 @@ desc: SchedulingPodAffinity nodes: nodeTemplatePath: config/node-default.yaml - labelNodeStrategy: + labelNodePrepareStrategy: labelKey: "failure-domain.beta.kubernetes.io/zone" - labelValue: "zone1" + labelValues: ["zone1"] initPods: - podTemplatePath: config/pod-with-pod-affinity.yaml podsToSchedule: @@ -162,7 +162,7 @@ nodeTemplatePath: config/node-default.yaml labelNodePrepareStrategy: labelKey: "failure-domain.beta.kubernetes.io/zone" - labelValue: "zone1" + labelValues: ["zone1"] initPods: - podTemplatePath: config/pod-with-node-affinity.yaml podsToSchedule: @@ -174,6 +174,42 @@ - numNodes: 5000 numInitPods: [5000] numPodsToSchedule: 1000 +- template: + desc: TopologySpreading + nodes: + nodeTemplatePath: config/node-default.yaml + labelNodePrepareStrategy: + labelKey: "topology.kubernetes.io/zone" + labelValues: ["moon-1", "moon-2", "moon-3"] + initPods: + - podTemplatePath: config/pod-default.yaml + podsToSchedule: + podTemplatePath: config/pod-with-topology-spreading.yaml + params: + - numNodes: 500 + numInitPods: [1000] + numPodsToSchedule: 1000 + - numNodes: 5000 + numInitPods: [5000] + numPodsToSchedule: 2000 +- template: + desc: PreferredTopologySpreading + nodes: + nodeTemplatePath: config/node-default.yaml + labelNodePrepareStrategy: + labelKey: "topology.kubernetes.io/zone" + labelValues: ["moon-1", "moon-2", "moon-3"] + initPods: + - podTemplatePath: config/pod-default.yaml + podsToSchedule: + podTemplatePath: config/pod-with-preferred-topology-spreading.yaml + params: + - numNodes: 500 + numInitPods: [1000] + numPodsToSchedule: 1000 + - numNodes: 5000 + numInitPods: [5000] + numPodsToSchedule: 2000 - template: desc: MixedSchedulingBasePod initPods: diff --git a/test/integration/scheduler_perf/config/pod-with-preferred-topology-spreading.yaml b/test/integration/scheduler_perf/config/pod-with-preferred-topology-spreading.yaml new file mode 100644 index 00000000000..39a171f393a --- /dev/null +++ b/test/integration/scheduler_perf/config/pod-with-preferred-topology-spreading.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +kind: Pod +metadata: + generateName: spreading-pod- +spec: + topologySpreadConstraints: + - maxSkew: 5 + topologyKey: topology.kubernetes.io/zone + whenUnsatisfiable: ScheduleAnyway + containers: + - image: k8s.gcr.io/pause:3.2 + name: pause + ports: + - containerPort: 80 + resources: + limits: + cpu: 100m + memory: 500Mi + requests: + cpu: 100m + memory: 500Mi diff --git a/test/integration/scheduler_perf/config/pod-with-topology-spreading.yaml b/test/integration/scheduler_perf/config/pod-with-topology-spreading.yaml new file mode 100644 index 00000000000..cb3769675ed --- /dev/null +++ b/test/integration/scheduler_perf/config/pod-with-topology-spreading.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +kind: Pod +metadata: + generateName: spreading-pod- +spec: + topologySpreadConstraints: + - maxSkew: 5 + topologyKey: topology.kubernetes.io/zone + whenUnsatisfiable: DoNotSchedule + containers: + - image: k8s.gcr.io/pause:3.2 + name: pause + ports: + - containerPort: 80 + resources: + limits: + cpu: 100m + memory: 500Mi + requests: + cpu: 100m + memory: 500Mi diff --git a/test/utils/runners.go b/test/utils/runners.go index aaac8bd37d5..fde5a703071 100644 --- a/test/utils/runners.go +++ b/test/utils/runners.go @@ -980,22 +980,27 @@ func (*TrivialNodePrepareStrategy) CleanupDependentObjects(nodeName string, clie } type LabelNodePrepareStrategy struct { - LabelKey string - LabelValue string + LabelKey string + LabelValues []string + roundRobinIdx int } var _ PrepareNodeStrategy = &LabelNodePrepareStrategy{} -func NewLabelNodePrepareStrategy(labelKey string, labelValue string) *LabelNodePrepareStrategy { +func NewLabelNodePrepareStrategy(labelKey string, labelValues ...string) *LabelNodePrepareStrategy { return &LabelNodePrepareStrategy{ - LabelKey: labelKey, - LabelValue: labelValue, + LabelKey: labelKey, + LabelValues: labelValues, } } func (s *LabelNodePrepareStrategy) PreparePatch(*v1.Node) []byte { - labelString := fmt.Sprintf("{\"%v\":\"%v\"}", s.LabelKey, s.LabelValue) + labelString := fmt.Sprintf("{\"%v\":\"%v\"}", s.LabelKey, s.LabelValues[s.roundRobinIdx]) patch := fmt.Sprintf(`{"metadata":{"labels":%v}}`, labelString) + s.roundRobinIdx++ + if s.roundRobinIdx == len(s.LabelValues) { + s.roundRobinIdx = 0 + } return []byte(patch) }