mirror of https://github.com/k3s-io/k3s
Merge pull request #29915 from wojtek-t/prepare_for_controller_ref_in_scheduler
Automatic merge from submit-queue Prepare for using "ControllerRef" in scheduler This is part of a PR that I already have to avoid a bunch of rebases in the future (controller ref probably won't happen in 1.4 release). @davidopppull/6/head
commit
2ff8280123
|
@ -145,7 +145,18 @@ func TestZeroRequest(t *testing.T) {
|
||||||
// This should match the configuration in defaultPriorities() in
|
// This should match the configuration in defaultPriorities() in
|
||||||
// plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go if you want
|
// plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go if you want
|
||||||
// to test what's actually in production.
|
// to test what's actually in production.
|
||||||
[]algorithm.PriorityConfig{{Function: LeastRequestedPriority, Weight: 1}, {Function: BalancedResourceAllocation, Weight: 1}, {Function: NewSelectorSpreadPriority(algorithm.FakePodLister(test.pods), algorithm.FakeServiceLister([]api.Service{}), algorithm.FakeControllerLister([]api.ReplicationController{}), algorithm.FakeReplicaSetLister([]extensions.ReplicaSet{})), Weight: 1}},
|
[]algorithm.PriorityConfig{
|
||||||
|
{Function: LeastRequestedPriority, Weight: 1},
|
||||||
|
{Function: BalancedResourceAllocation, Weight: 1},
|
||||||
|
{
|
||||||
|
Function: NewSelectorSpreadPriority(
|
||||||
|
algorithm.FakePodLister(test.pods),
|
||||||
|
algorithm.FakeServiceLister([]api.Service{}),
|
||||||
|
algorithm.FakeControllerLister([]api.ReplicationController{}),
|
||||||
|
algorithm.FakeReplicaSetLister([]extensions.ReplicaSet{})),
|
||||||
|
Weight: 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
algorithm.FakeNodeLister(test.nodes), []algorithm.SchedulerExtender{})
|
algorithm.FakeNodeLister(test.nodes), []algorithm.SchedulerExtender{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
|
|
@ -45,7 +45,11 @@ type SelectorSpread struct {
|
||||||
replicaSetLister algorithm.ReplicaSetLister
|
replicaSetLister algorithm.ReplicaSetLister
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewSelectorSpreadPriority(podLister algorithm.PodLister, serviceLister algorithm.ServiceLister, controllerLister algorithm.ControllerLister, replicaSetLister algorithm.ReplicaSetLister) algorithm.PriorityFunction {
|
func NewSelectorSpreadPriority(
|
||||||
|
podLister algorithm.PodLister,
|
||||||
|
serviceLister algorithm.ServiceLister,
|
||||||
|
controllerLister algorithm.ControllerLister,
|
||||||
|
replicaSetLister algorithm.ReplicaSetLister) algorithm.PriorityFunction {
|
||||||
selectorSpread := &SelectorSpread{
|
selectorSpread := &SelectorSpread{
|
||||||
podLister: podLister,
|
podLister: podLister,
|
||||||
serviceLister: serviceLister,
|
serviceLister: serviceLister,
|
||||||
|
|
|
@ -23,13 +23,21 @@ import (
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
wellknownlabels "k8s.io/kubernetes/pkg/api/unversioned"
|
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm"
|
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm"
|
||||||
schedulerapi "k8s.io/kubernetes/plugin/pkg/scheduler/api"
|
schedulerapi "k8s.io/kubernetes/plugin/pkg/scheduler/api"
|
||||||
"k8s.io/kubernetes/plugin/pkg/scheduler/schedulercache"
|
"k8s.io/kubernetes/plugin/pkg/scheduler/schedulercache"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func controllerRef(kind, name, uid string) []api.OwnerReference {
|
||||||
|
// TODO: When ControllerRef will be implemented uncomment code below.
|
||||||
|
return nil
|
||||||
|
//trueVar := true
|
||||||
|
//return []api.OwnerReference{
|
||||||
|
// {Kind: kind, Name: name, UID: types.UID(uid), Controller: &trueVar},
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
|
||||||
func TestSelectorSpreadPriority(t *testing.T) {
|
func TestSelectorSpreadPriority(t *testing.T) {
|
||||||
labels1 := map[string]string{
|
labels1 := map[string]string{
|
||||||
"foo": "bar",
|
"foo": "bar",
|
||||||
|
@ -166,11 +174,11 @@ func TestSelectorSpreadPriority(t *testing.T) {
|
||||||
test: "service with partial pod label matches",
|
test: "service with partial pod label matches",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
pod: &api.Pod{ObjectMeta: api.ObjectMeta{Labels: labels1}},
|
pod: &api.Pod{ObjectMeta: api.ObjectMeta{Labels: labels1, OwnerReferences: controllerRef("ReplicationController", "name", "abc123")}},
|
||||||
pods: []*api.Pod{
|
pods: []*api.Pod{
|
||||||
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels2}},
|
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels2}},
|
||||||
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels1}},
|
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels1, OwnerReferences: controllerRef("ReplicationController", "name", "abc123")}},
|
||||||
{Spec: zone2Spec, ObjectMeta: api.ObjectMeta{Labels: labels1}},
|
{Spec: zone2Spec, ObjectMeta: api.ObjectMeta{Labels: labels1, OwnerReferences: controllerRef("ReplicationController", "name", "abc123")}},
|
||||||
},
|
},
|
||||||
nodes: []string{"machine1", "machine2"},
|
nodes: []string{"machine1", "machine2"},
|
||||||
services: []api.Service{{Spec: api.ServiceSpec{Selector: map[string]string{"baz": "blah"}}}},
|
services: []api.Service{{Spec: api.ServiceSpec{Selector: map[string]string{"baz": "blah"}}}},
|
||||||
|
@ -181,25 +189,25 @@ func TestSelectorSpreadPriority(t *testing.T) {
|
||||||
test: "service with partial pod label matches with service and replication controller",
|
test: "service with partial pod label matches with service and replication controller",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
pod: &api.Pod{ObjectMeta: api.ObjectMeta{Labels: labels1}},
|
pod: &api.Pod{ObjectMeta: api.ObjectMeta{Labels: labels1, OwnerReferences: controllerRef("ReplicaSet", "name", "abc123")}},
|
||||||
pods: []*api.Pod{
|
pods: []*api.Pod{
|
||||||
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels2}},
|
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels2}},
|
||||||
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels1}},
|
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels1, OwnerReferences: controllerRef("ReplicaSet", "name", "abc123")}},
|
||||||
{Spec: zone2Spec, ObjectMeta: api.ObjectMeta{Labels: labels1}},
|
{Spec: zone2Spec, ObjectMeta: api.ObjectMeta{Labels: labels1, OwnerReferences: controllerRef("ReplicaSet", "name", "abc123")}},
|
||||||
},
|
},
|
||||||
nodes: []string{"machine1", "machine2"},
|
nodes: []string{"machine1", "machine2"},
|
||||||
services: []api.Service{{Spec: api.ServiceSpec{Selector: map[string]string{"baz": "blah"}}}},
|
services: []api.Service{{Spec: api.ServiceSpec{Selector: map[string]string{"baz": "blah"}}}},
|
||||||
rss: []extensions.ReplicaSet{{Spec: extensions.ReplicaSetSpec{Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}}}},
|
rss: []extensions.ReplicaSet{{Spec: extensions.ReplicaSetSpec{Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}}}},
|
||||||
// We use ReplicaSet, instead of ReplicationController. The result should be exactly as above.
|
// We use ReplicaSet, instead of ReplicationController. The result should be exactly as above.
|
||||||
expectedList: []schedulerapi.HostPriority{{"machine1", 0}, {"machine2", 5}},
|
expectedList: []schedulerapi.HostPriority{{"machine1", 0}, {"machine2", 5}},
|
||||||
test: "service with partial pod label matches with service and replication controller",
|
test: "service with partial pod label matches with service and replica set",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
pod: &api.Pod{ObjectMeta: api.ObjectMeta{Labels: map[string]string{"foo": "bar", "bar": "foo"}}},
|
pod: &api.Pod{ObjectMeta: api.ObjectMeta{Labels: map[string]string{"foo": "bar", "bar": "foo"}, OwnerReferences: controllerRef("ReplicationController", "name", "abc123")}},
|
||||||
pods: []*api.Pod{
|
pods: []*api.Pod{
|
||||||
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels2}},
|
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels2}},
|
||||||
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels1}},
|
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels1, OwnerReferences: controllerRef("ReplicationController", "name", "abc123")}},
|
||||||
{Spec: zone2Spec, ObjectMeta: api.ObjectMeta{Labels: labels1}},
|
{Spec: zone2Spec, ObjectMeta: api.ObjectMeta{Labels: labels1, OwnerReferences: controllerRef("ReplicationController", "name", "abc123")}},
|
||||||
},
|
},
|
||||||
nodes: []string{"machine1", "machine2"},
|
nodes: []string{"machine1", "machine2"},
|
||||||
services: []api.Service{{Spec: api.ServiceSpec{Selector: map[string]string{"bar": "foo"}}}},
|
services: []api.Service{{Spec: api.ServiceSpec{Selector: map[string]string{"bar": "foo"}}}},
|
||||||
|
@ -209,25 +217,25 @@ func TestSelectorSpreadPriority(t *testing.T) {
|
||||||
test: "disjoined service and replication controller should be treated equally",
|
test: "disjoined service and replication controller should be treated equally",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
pod: &api.Pod{ObjectMeta: api.ObjectMeta{Labels: map[string]string{"foo": "bar", "bar": "foo"}}},
|
pod: &api.Pod{ObjectMeta: api.ObjectMeta{Labels: map[string]string{"foo": "bar", "bar": "foo"}, OwnerReferences: controllerRef("ReplicaSet", "name", "abc123")}},
|
||||||
pods: []*api.Pod{
|
pods: []*api.Pod{
|
||||||
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels2}},
|
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels2}},
|
||||||
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels1}},
|
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels1, OwnerReferences: controllerRef("ReplicaSet", "name", "abc123")}},
|
||||||
{Spec: zone2Spec, ObjectMeta: api.ObjectMeta{Labels: labels1}},
|
{Spec: zone2Spec, ObjectMeta: api.ObjectMeta{Labels: labels1, OwnerReferences: controllerRef("ReplicaSet", "name", "abc123")}},
|
||||||
},
|
},
|
||||||
nodes: []string{"machine1", "machine2"},
|
nodes: []string{"machine1", "machine2"},
|
||||||
services: []api.Service{{Spec: api.ServiceSpec{Selector: map[string]string{"bar": "foo"}}}},
|
services: []api.Service{{Spec: api.ServiceSpec{Selector: map[string]string{"bar": "foo"}}}},
|
||||||
rss: []extensions.ReplicaSet{{Spec: extensions.ReplicaSetSpec{Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}}}},
|
rss: []extensions.ReplicaSet{{Spec: extensions.ReplicaSetSpec{Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}}}},
|
||||||
// We use ReplicaSet, instead of ReplicationController. The result should be exactly as above.
|
// We use ReplicaSet, instead of ReplicationController. The result should be exactly as above.
|
||||||
expectedList: []schedulerapi.HostPriority{{"machine1", 0}, {"machine2", 5}},
|
expectedList: []schedulerapi.HostPriority{{"machine1", 0}, {"machine2", 5}},
|
||||||
test: "disjoined service and replication controller should be treated equally",
|
test: "disjoined service and replica set should be treated equally",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
pod: &api.Pod{ObjectMeta: api.ObjectMeta{Labels: labels1}},
|
pod: &api.Pod{ObjectMeta: api.ObjectMeta{Labels: labels1, OwnerReferences: controllerRef("ReplicationController", "name", "abc123")}},
|
||||||
pods: []*api.Pod{
|
pods: []*api.Pod{
|
||||||
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels2}},
|
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels2}},
|
||||||
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels1}},
|
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels1, OwnerReferences: controllerRef("ReplicationController", "name", "abc123")}},
|
||||||
{Spec: zone2Spec, ObjectMeta: api.ObjectMeta{Labels: labels1}},
|
{Spec: zone2Spec, ObjectMeta: api.ObjectMeta{Labels: labels1, OwnerReferences: controllerRef("ReplicationController", "name", "abc123")}},
|
||||||
},
|
},
|
||||||
nodes: []string{"machine1", "machine2"},
|
nodes: []string{"machine1", "machine2"},
|
||||||
rcs: []api.ReplicationController{{Spec: api.ReplicationControllerSpec{Selector: map[string]string{"foo": "bar"}}}},
|
rcs: []api.ReplicationController{{Spec: api.ReplicationControllerSpec{Selector: map[string]string{"foo": "bar"}}}},
|
||||||
|
@ -236,48 +244,53 @@ func TestSelectorSpreadPriority(t *testing.T) {
|
||||||
test: "Replication controller with partial pod label matches",
|
test: "Replication controller with partial pod label matches",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
pod: &api.Pod{ObjectMeta: api.ObjectMeta{Labels: labels1}},
|
pod: &api.Pod{ObjectMeta: api.ObjectMeta{Labels: labels1, OwnerReferences: controllerRef("ReplicaSet", "name", "abc123")}},
|
||||||
pods: []*api.Pod{
|
pods: []*api.Pod{
|
||||||
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels2}},
|
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels2}},
|
||||||
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels1}},
|
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels1, OwnerReferences: controllerRef("ReplicaSet", "name", "abc123")}},
|
||||||
{Spec: zone2Spec, ObjectMeta: api.ObjectMeta{Labels: labels1}},
|
{Spec: zone2Spec, ObjectMeta: api.ObjectMeta{Labels: labels1, OwnerReferences: controllerRef("ReplicaSet", "name", "abc123")}},
|
||||||
},
|
},
|
||||||
nodes: []string{"machine1", "machine2"},
|
nodes: []string{"machine1", "machine2"},
|
||||||
rss: []extensions.ReplicaSet{{Spec: extensions.ReplicaSetSpec{Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}}}},
|
rss: []extensions.ReplicaSet{{Spec: extensions.ReplicaSetSpec{Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}}}},
|
||||||
// We use ReplicaSet, instead of ReplicationController. The result should be exactly as above.
|
// We use ReplicaSet, instead of ReplicationController. The result should be exactly as above.
|
||||||
expectedList: []schedulerapi.HostPriority{{"machine1", 0}, {"machine2", 0}},
|
expectedList: []schedulerapi.HostPriority{{"machine1", 0}, {"machine2", 0}},
|
||||||
test: "Replication controller with partial pod label matches",
|
test: "Replica set with partial pod label matches",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
pod: &api.Pod{ObjectMeta: api.ObjectMeta{Labels: labels1}},
|
pod: &api.Pod{ObjectMeta: api.ObjectMeta{Labels: labels1, OwnerReferences: controllerRef("ReplicationController", "name", "abc123")}},
|
||||||
pods: []*api.Pod{
|
pods: []*api.Pod{
|
||||||
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels2}},
|
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels2, OwnerReferences: controllerRef("ReplicationController", "name", "abc123")}},
|
||||||
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels1}},
|
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels1, OwnerReferences: controllerRef("ReplicationController", "name", "abc123")}},
|
||||||
{Spec: zone2Spec, ObjectMeta: api.ObjectMeta{Labels: labels1}},
|
{Spec: zone2Spec, ObjectMeta: api.ObjectMeta{Labels: labels1, OwnerReferences: controllerRef("ReplicationController", "name", "abc123")}},
|
||||||
},
|
},
|
||||||
nodes: []string{"machine1", "machine2"},
|
nodes: []string{"machine1", "machine2"},
|
||||||
rcs: []api.ReplicationController{{Spec: api.ReplicationControllerSpec{Selector: map[string]string{"baz": "blah"}}}},
|
rcs: []api.ReplicationController{{Spec: api.ReplicationControllerSpec{Selector: map[string]string{"baz": "blah"}}}},
|
||||||
expectedList: []schedulerapi.HostPriority{{"machine1", 0}, {"machine2", 5}},
|
expectedList: []schedulerapi.HostPriority{{"machine1", 0}, {"machine2", 5}},
|
||||||
test: "Replication controller with partial pod label matches",
|
test: "Another replication controller with partial pod label matches",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
pod: &api.Pod{ObjectMeta: api.ObjectMeta{Labels: labels1}},
|
pod: &api.Pod{ObjectMeta: api.ObjectMeta{Labels: labels1, OwnerReferences: controllerRef("ReplicaSet", "name", "abc123")}},
|
||||||
pods: []*api.Pod{
|
pods: []*api.Pod{
|
||||||
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels2}},
|
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels2, OwnerReferences: controllerRef("ReplicaSet", "name", "abc123")}},
|
||||||
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels1}},
|
{Spec: zone1Spec, ObjectMeta: api.ObjectMeta{Labels: labels1, OwnerReferences: controllerRef("ReplicaSet", "name", "abc123")}},
|
||||||
{Spec: zone2Spec, ObjectMeta: api.ObjectMeta{Labels: labels1}},
|
{Spec: zone2Spec, ObjectMeta: api.ObjectMeta{Labels: labels1, OwnerReferences: controllerRef("ReplicaSet", "name", "abc123")}},
|
||||||
},
|
},
|
||||||
nodes: []string{"machine1", "machine2"},
|
nodes: []string{"machine1", "machine2"},
|
||||||
rss: []extensions.ReplicaSet{{Spec: extensions.ReplicaSetSpec{Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"baz": "blah"}}}}},
|
rss: []extensions.ReplicaSet{{Spec: extensions.ReplicaSetSpec{Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"baz": "blah"}}}}},
|
||||||
// We use ReplicaSet, instead of ReplicationController. The result should be exactly as above.
|
// We use ReplicaSet, instead of ReplicationController. The result should be exactly as above.
|
||||||
expectedList: []schedulerapi.HostPriority{{"machine1", 0}, {"machine2", 5}},
|
expectedList: []schedulerapi.HostPriority{{"machine1", 0}, {"machine2", 5}},
|
||||||
test: "Replication controller with partial pod label matches",
|
test: "Another replication set with partial pod label matches",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
nodeNameToInfo := schedulercache.CreateNodeNameToInfoMap(test.pods, nil)
|
nodeNameToInfo := schedulercache.CreateNodeNameToInfoMap(test.pods, nil)
|
||||||
selectorSpread := SelectorSpread{podLister: algorithm.FakePodLister(test.pods), serviceLister: algorithm.FakeServiceLister(test.services), controllerLister: algorithm.FakeControllerLister(test.rcs), replicaSetLister: algorithm.FakeReplicaSetLister(test.rss)}
|
selectorSpread := SelectorSpread{
|
||||||
|
podLister: algorithm.FakePodLister(test.pods),
|
||||||
|
serviceLister: algorithm.FakeServiceLister(test.services),
|
||||||
|
controllerLister: algorithm.FakeControllerLister(test.rcs),
|
||||||
|
replicaSetLister: algorithm.FakeReplicaSetLister(test.rss),
|
||||||
|
}
|
||||||
list, err := selectorSpread.CalculateSpreadPriority(test.pod, nodeNameToInfo, makeNodeList(test.nodes))
|
list, err := selectorSpread.CalculateSpreadPriority(test.pod, nodeNameToInfo, makeNodeList(test.nodes))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
@ -288,6 +301,13 @@ func TestSelectorSpreadPriority(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func buildPod(nodeName string, labels map[string]string, ownerRefs []api.OwnerReference) *api.Pod {
|
||||||
|
return &api.Pod{
|
||||||
|
ObjectMeta: api.ObjectMeta{Labels: labels, OwnerReferences: ownerRefs},
|
||||||
|
Spec: api.PodSpec{NodeName: nodeName},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestZoneSelectorSpreadPriority(t *testing.T) {
|
func TestZoneSelectorSpreadPriority(t *testing.T) {
|
||||||
labels1 := map[string]string{
|
labels1 := map[string]string{
|
||||||
"label1": "l1",
|
"label1": "l1",
|
||||||
|
@ -307,7 +327,7 @@ func TestZoneSelectorSpreadPriority(t *testing.T) {
|
||||||
|
|
||||||
buildNodeLabels := func(failureDomain string) map[string]string {
|
buildNodeLabels := func(failureDomain string) map[string]string {
|
||||||
labels := map[string]string{
|
labels := map[string]string{
|
||||||
wellknownlabels.LabelZoneFailureDomain: failureDomain,
|
unversioned.LabelZoneFailureDomain: failureDomain,
|
||||||
}
|
}
|
||||||
return labels
|
return labels
|
||||||
}
|
}
|
||||||
|
@ -320,11 +340,6 @@ func TestZoneSelectorSpreadPriority(t *testing.T) {
|
||||||
nodeMachine3Zone3: buildNodeLabels("zone3"),
|
nodeMachine3Zone3: buildNodeLabels("zone3"),
|
||||||
}
|
}
|
||||||
|
|
||||||
buildPod := func(nodeName string, labels map[string]string) *api.Pod {
|
|
||||||
pod := &api.Pod{Spec: api.PodSpec{NodeName: nodeName}, ObjectMeta: api.ObjectMeta{Labels: labels}}
|
|
||||||
return pod
|
|
||||||
}
|
|
||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
pod *api.Pod
|
pod *api.Pod
|
||||||
pods []*api.Pod
|
pods []*api.Pod
|
||||||
|
@ -348,8 +363,8 @@ func TestZoneSelectorSpreadPriority(t *testing.T) {
|
||||||
test: "nothing scheduled",
|
test: "nothing scheduled",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
pod: buildPod("", labels1),
|
pod: buildPod("", labels1, nil),
|
||||||
pods: []*api.Pod{buildPod(nodeMachine1Zone1, nil)},
|
pods: []*api.Pod{buildPod(nodeMachine1Zone1, nil, nil)},
|
||||||
expectedList: []schedulerapi.HostPriority{
|
expectedList: []schedulerapi.HostPriority{
|
||||||
{nodeMachine1Zone1, 10},
|
{nodeMachine1Zone1, 10},
|
||||||
{nodeMachine1Zone2, 10},
|
{nodeMachine1Zone2, 10},
|
||||||
|
@ -361,8 +376,8 @@ func TestZoneSelectorSpreadPriority(t *testing.T) {
|
||||||
test: "no services",
|
test: "no services",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
pod: buildPod("", labels1),
|
pod: buildPod("", labels1, nil),
|
||||||
pods: []*api.Pod{buildPod(nodeMachine1Zone1, labels2)},
|
pods: []*api.Pod{buildPod(nodeMachine1Zone1, labels2, nil)},
|
||||||
services: []api.Service{{Spec: api.ServiceSpec{Selector: map[string]string{"key": "value"}}}},
|
services: []api.Service{{Spec: api.ServiceSpec{Selector: map[string]string{"key": "value"}}}},
|
||||||
expectedList: []schedulerapi.HostPriority{
|
expectedList: []schedulerapi.HostPriority{
|
||||||
{nodeMachine1Zone1, 10},
|
{nodeMachine1Zone1, 10},
|
||||||
|
@ -375,10 +390,10 @@ func TestZoneSelectorSpreadPriority(t *testing.T) {
|
||||||
test: "different services",
|
test: "different services",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
pod: buildPod("", labels1),
|
pod: buildPod("", labels1, nil),
|
||||||
pods: []*api.Pod{
|
pods: []*api.Pod{
|
||||||
buildPod(nodeMachine1Zone1, labels2),
|
buildPod(nodeMachine1Zone1, labels2, nil),
|
||||||
buildPod(nodeMachine1Zone2, labels1),
|
buildPod(nodeMachine1Zone2, labels1, nil),
|
||||||
},
|
},
|
||||||
services: []api.Service{{Spec: api.ServiceSpec{Selector: labels1}}},
|
services: []api.Service{{Spec: api.ServiceSpec{Selector: labels1}}},
|
||||||
expectedList: []schedulerapi.HostPriority{
|
expectedList: []schedulerapi.HostPriority{
|
||||||
|
@ -392,13 +407,13 @@ func TestZoneSelectorSpreadPriority(t *testing.T) {
|
||||||
test: "two pods, 1 matching (in z2)",
|
test: "two pods, 1 matching (in z2)",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
pod: buildPod("", labels1),
|
pod: buildPod("", labels1, nil),
|
||||||
pods: []*api.Pod{
|
pods: []*api.Pod{
|
||||||
buildPod(nodeMachine1Zone1, labels2),
|
buildPod(nodeMachine1Zone1, labels2, nil),
|
||||||
buildPod(nodeMachine1Zone2, labels1),
|
buildPod(nodeMachine1Zone2, labels1, nil),
|
||||||
buildPod(nodeMachine2Zone2, labels1),
|
buildPod(nodeMachine2Zone2, labels1, nil),
|
||||||
buildPod(nodeMachine1Zone3, labels2),
|
buildPod(nodeMachine1Zone3, labels2, nil),
|
||||||
buildPod(nodeMachine2Zone3, labels1),
|
buildPod(nodeMachine2Zone3, labels1, nil),
|
||||||
},
|
},
|
||||||
services: []api.Service{{Spec: api.ServiceSpec{Selector: labels1}}},
|
services: []api.Service{{Spec: api.ServiceSpec{Selector: labels1}}},
|
||||||
expectedList: []schedulerapi.HostPriority{
|
expectedList: []schedulerapi.HostPriority{
|
||||||
|
@ -412,12 +427,12 @@ func TestZoneSelectorSpreadPriority(t *testing.T) {
|
||||||
test: "five pods, 3 matching (z2=2, z3=1)",
|
test: "five pods, 3 matching (z2=2, z3=1)",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
pod: buildPod("", labels1),
|
pod: buildPod("", labels1, nil),
|
||||||
pods: []*api.Pod{
|
pods: []*api.Pod{
|
||||||
buildPod(nodeMachine1Zone1, labels1),
|
buildPod(nodeMachine1Zone1, labels1, nil),
|
||||||
buildPod(nodeMachine1Zone2, labels1),
|
buildPod(nodeMachine1Zone2, labels1, nil),
|
||||||
buildPod(nodeMachine2Zone2, labels2),
|
buildPod(nodeMachine2Zone2, labels2, nil),
|
||||||
buildPod(nodeMachine1Zone3, labels1),
|
buildPod(nodeMachine1Zone3, labels1, nil),
|
||||||
},
|
},
|
||||||
services: []api.Service{{Spec: api.ServiceSpec{Selector: labels1}}},
|
services: []api.Service{{Spec: api.ServiceSpec{Selector: labels1}}},
|
||||||
expectedList: []schedulerapi.HostPriority{
|
expectedList: []schedulerapi.HostPriority{
|
||||||
|
@ -431,12 +446,12 @@ func TestZoneSelectorSpreadPriority(t *testing.T) {
|
||||||
test: "four pods, 3 matching (z1=1, z2=1, z3=1)",
|
test: "four pods, 3 matching (z1=1, z2=1, z3=1)",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
pod: buildPod("", labels1),
|
pod: buildPod("", labels1, nil),
|
||||||
pods: []*api.Pod{
|
pods: []*api.Pod{
|
||||||
buildPod(nodeMachine1Zone1, labels1),
|
buildPod(nodeMachine1Zone1, labels1, nil),
|
||||||
buildPod(nodeMachine1Zone2, labels1),
|
buildPod(nodeMachine1Zone2, labels1, nil),
|
||||||
buildPod(nodeMachine1Zone3, labels1),
|
buildPod(nodeMachine1Zone3, labels1, nil),
|
||||||
buildPod(nodeMachine2Zone2, labels2),
|
buildPod(nodeMachine2Zone2, labels2, nil),
|
||||||
},
|
},
|
||||||
services: []api.Service{{Spec: api.ServiceSpec{Selector: labels1}}},
|
services: []api.Service{{Spec: api.ServiceSpec{Selector: labels1}}},
|
||||||
expectedList: []schedulerapi.HostPriority{
|
expectedList: []schedulerapi.HostPriority{
|
||||||
|
@ -450,11 +465,11 @@ func TestZoneSelectorSpreadPriority(t *testing.T) {
|
||||||
test: "four pods, 3 matching (z1=1, z2=1, z3=1)",
|
test: "four pods, 3 matching (z1=1, z2=1, z3=1)",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
pod: buildPod("", labels1),
|
pod: buildPod("", labels1, controllerRef("ReplicationController", "name", "abc123")),
|
||||||
pods: []*api.Pod{
|
pods: []*api.Pod{
|
||||||
buildPod(nodeMachine1Zone3, labels1),
|
buildPod(nodeMachine1Zone3, labels1, controllerRef("ReplicationController", "name", "abc123")),
|
||||||
buildPod(nodeMachine1Zone2, labels1),
|
buildPod(nodeMachine1Zone2, labels1, controllerRef("ReplicationController", "name", "abc123")),
|
||||||
buildPod(nodeMachine1Zone3, labels1),
|
buildPod(nodeMachine1Zone3, labels1, controllerRef("ReplicationController", "name", "abc123")),
|
||||||
},
|
},
|
||||||
rcs: []api.ReplicationController{{Spec: api.ReplicationControllerSpec{Selector: labels1}}},
|
rcs: []api.ReplicationController{{Spec: api.ReplicationControllerSpec{Selector: labels1}}},
|
||||||
expectedList: []schedulerapi.HostPriority{
|
expectedList: []schedulerapi.HostPriority{
|
||||||
|
@ -478,7 +493,12 @@ func TestZoneSelectorSpreadPriority(t *testing.T) {
|
||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
nodeNameToInfo := schedulercache.CreateNodeNameToInfoMap(test.pods, nil)
|
nodeNameToInfo := schedulercache.CreateNodeNameToInfoMap(test.pods, nil)
|
||||||
selectorSpread := SelectorSpread{podLister: algorithm.FakePodLister(test.pods), serviceLister: algorithm.FakeServiceLister(test.services), controllerLister: algorithm.FakeControllerLister(test.rcs), replicaSetLister: algorithm.FakeReplicaSetLister(test.rss)}
|
selectorSpread := SelectorSpread{
|
||||||
|
podLister: algorithm.FakePodLister(test.pods),
|
||||||
|
serviceLister: algorithm.FakeServiceLister(test.services),
|
||||||
|
controllerLister: algorithm.FakeControllerLister(test.rcs),
|
||||||
|
replicaSetLister: algorithm.FakeReplicaSetLister(test.rss),
|
||||||
|
}
|
||||||
list, err := selectorSpread.CalculateSpreadPriority(test.pod, nodeNameToInfo, makeLabeledNodeList(labeledNodes))
|
list, err := selectorSpread.CalculateSpreadPriority(test.pod, nodeNameToInfo, makeLabeledNodeList(labeledNodes))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
|
Loading…
Reference in New Issue