mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 09:22:44 +00:00
Merge pull request #33834 from wojtek-t/scheduler_map_reduce_6
Automatic merge from submit-queue Migrate EqualPriority in scheduler to map-reduce-like framework Ref #24246
This commit is contained in:
commit
96fde0fe8d
@ -39,19 +39,16 @@ const maxPriority float32 = 10
|
|||||||
const zoneWeighting = 2.0 / 3.0
|
const zoneWeighting = 2.0 / 3.0
|
||||||
|
|
||||||
type SelectorSpread struct {
|
type SelectorSpread struct {
|
||||||
podLister algorithm.PodLister
|
|
||||||
serviceLister algorithm.ServiceLister
|
serviceLister algorithm.ServiceLister
|
||||||
controllerLister algorithm.ControllerLister
|
controllerLister algorithm.ControllerLister
|
||||||
replicaSetLister algorithm.ReplicaSetLister
|
replicaSetLister algorithm.ReplicaSetLister
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewSelectorSpreadPriority(
|
func NewSelectorSpreadPriority(
|
||||||
podLister algorithm.PodLister,
|
|
||||||
serviceLister algorithm.ServiceLister,
|
serviceLister algorithm.ServiceLister,
|
||||||
controllerLister algorithm.ControllerLister,
|
controllerLister algorithm.ControllerLister,
|
||||||
replicaSetLister algorithm.ReplicaSetLister) algorithm.PriorityFunction {
|
replicaSetLister algorithm.ReplicaSetLister) algorithm.PriorityFunction {
|
||||||
selectorSpread := &SelectorSpread{
|
selectorSpread := &SelectorSpread{
|
||||||
podLister: podLister,
|
|
||||||
serviceLister: serviceLister,
|
serviceLister: serviceLister,
|
||||||
controllerLister: controllerLister,
|
controllerLister: controllerLister,
|
||||||
replicaSetLister: replicaSetLister,
|
replicaSetLister: replicaSetLister,
|
||||||
@ -59,31 +56,41 @@ func NewSelectorSpreadPriority(
|
|||||||
return selectorSpread.CalculateSpreadPriority
|
return selectorSpread.CalculateSpreadPriority
|
||||||
}
|
}
|
||||||
|
|
||||||
// CalculateSpreadPriority spreads pods across hosts and zones, considering pods belonging to the same service or replication controller.
|
// Returns selectors of services, RCs and RSs matching the given pod.
|
||||||
// When a pod is scheduled, it looks for services or RCs that match the pod, then finds existing pods that match those selectors.
|
func getSelectors(pod *api.Pod, sl algorithm.ServiceLister, cl algorithm.ControllerLister, rsl algorithm.ReplicaSetLister) []labels.Selector {
|
||||||
// It favors nodes that have fewer existing matching pods.
|
|
||||||
// i.e. it pushes the scheduler towards a node where there's the smallest number of
|
|
||||||
// pods which match the same service selectors or RC selectors as the pod being scheduled.
|
|
||||||
// Where zone information is included on the nodes, it favors nodes in zones with fewer existing matching pods.
|
|
||||||
func (s *SelectorSpread) CalculateSpreadPriority(pod *api.Pod, nodeNameToInfo map[string]*schedulercache.NodeInfo, nodes []*api.Node) (schedulerapi.HostPriorityList, error) {
|
|
||||||
selectors := make([]labels.Selector, 0, 3)
|
selectors := make([]labels.Selector, 0, 3)
|
||||||
if services, err := s.serviceLister.GetPodServices(pod); err == nil {
|
if services, err := sl.GetPodServices(pod); err == nil {
|
||||||
for _, service := range services {
|
for _, service := range services {
|
||||||
selectors = append(selectors, labels.SelectorFromSet(service.Spec.Selector))
|
selectors = append(selectors, labels.SelectorFromSet(service.Spec.Selector))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if rcs, err := s.controllerLister.GetPodControllers(pod); err == nil {
|
if rcs, err := cl.GetPodControllers(pod); err == nil {
|
||||||
for _, rc := range rcs {
|
for _, rc := range rcs {
|
||||||
selectors = append(selectors, labels.SelectorFromSet(rc.Spec.Selector))
|
selectors = append(selectors, labels.SelectorFromSet(rc.Spec.Selector))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if rss, err := s.replicaSetLister.GetPodReplicaSets(pod); err == nil {
|
if rss, err := rsl.GetPodReplicaSets(pod); err == nil {
|
||||||
for _, rs := range rss {
|
for _, rs := range rss {
|
||||||
if selector, err := unversioned.LabelSelectorAsSelector(rs.Spec.Selector); err == nil {
|
if selector, err := unversioned.LabelSelectorAsSelector(rs.Spec.Selector); err == nil {
|
||||||
selectors = append(selectors, selector)
|
selectors = append(selectors, selector)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return selectors
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *SelectorSpread) getSelectors(pod *api.Pod) []labels.Selector {
|
||||||
|
return getSelectors(pod, s.serviceLister, s.controllerLister, s.replicaSetLister)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CalculateSpreadPriority spreads pods across hosts and zones, considering pods belonging to the same service or replication controller.
|
||||||
|
// When a pod is scheduled, it looks for services, RCs or RSs that match the pod, then finds existing pods that match those selectors.
|
||||||
|
// It favors nodes that have fewer existing matching pods.
|
||||||
|
// i.e. it pushes the scheduler towards a node where there's the smallest number of
|
||||||
|
// pods which match the same service, RC or RS selectors as the pod being scheduled.
|
||||||
|
// Where zone information is included on the nodes, it favors nodes in zones with fewer existing matching pods.
|
||||||
|
func (s *SelectorSpread) CalculateSpreadPriority(pod *api.Pod, nodeNameToInfo map[string]*schedulercache.NodeInfo, nodes []*api.Node) (schedulerapi.HostPriorityList, error) {
|
||||||
|
selectors := s.getSelectors(pod)
|
||||||
|
|
||||||
// Count similar pods by node
|
// Count similar pods by node
|
||||||
countsByNodeName := make(map[string]float32, len(nodes))
|
countsByNodeName := make(map[string]float32, len(nodes))
|
||||||
|
@ -286,7 +286,6 @@ func TestSelectorSpreadPriority(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{
|
selectorSpread := SelectorSpread{
|
||||||
podLister: algorithm.FakePodLister(test.pods),
|
|
||||||
serviceLister: algorithm.FakeServiceLister(test.services),
|
serviceLister: algorithm.FakeServiceLister(test.services),
|
||||||
controllerLister: algorithm.FakeControllerLister(test.rcs),
|
controllerLister: algorithm.FakeControllerLister(test.rcs),
|
||||||
replicaSetLister: algorithm.FakeReplicaSetLister(test.rss),
|
replicaSetLister: algorithm.FakeReplicaSetLister(test.rss),
|
||||||
@ -494,7 +493,6 @@ 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{
|
selectorSpread := SelectorSpread{
|
||||||
podLister: algorithm.FakePodLister(test.pods),
|
|
||||||
serviceLister: algorithm.FakeServiceLister(test.services),
|
serviceLister: algorithm.FakeServiceLister(test.services),
|
||||||
controllerLister: algorithm.FakeControllerLister(test.rcs),
|
controllerLister: algorithm.FakeControllerLister(test.rcs),
|
||||||
replicaSetLister: algorithm.FakeReplicaSetLister(test.rss),
|
replicaSetLister: algorithm.FakeReplicaSetLister(test.rss),
|
||||||
|
@ -67,7 +67,7 @@ func init() {
|
|||||||
// EqualPriority is a prioritizer function that gives an equal weight of one to all nodes
|
// EqualPriority is a prioritizer function that gives an equal weight of one to all nodes
|
||||||
// Register the priority function so that its available
|
// Register the priority function so that its available
|
||||||
// but do not include it as part of the default priorities
|
// but do not include it as part of the default priorities
|
||||||
factory.RegisterPriorityFunction("EqualPriority", scheduler.EqualPriority, 1)
|
factory.RegisterPriorityFunction2("EqualPriority", scheduler.EqualPriorityMap, nil, 1)
|
||||||
|
|
||||||
// ServiceSpreadingPriority is a priority config factory that spreads pods by minimizing
|
// ServiceSpreadingPriority is a priority config factory that spreads pods by minimizing
|
||||||
// the number of pods (belonging to the same service) on the same node.
|
// the number of pods (belonging to the same service) on the same node.
|
||||||
@ -77,7 +77,7 @@ func init() {
|
|||||||
"ServiceSpreadingPriority",
|
"ServiceSpreadingPriority",
|
||||||
factory.PriorityConfigFactory{
|
factory.PriorityConfigFactory{
|
||||||
Function: func(args factory.PluginFactoryArgs) algorithm.PriorityFunction {
|
Function: func(args factory.PluginFactoryArgs) algorithm.PriorityFunction {
|
||||||
return priorities.NewSelectorSpreadPriority(args.PodLister, args.ServiceLister, algorithm.EmptyControllerLister{}, algorithm.EmptyReplicaSetLister{})
|
return priorities.NewSelectorSpreadPriority(args.ServiceLister, algorithm.EmptyControllerLister{}, algorithm.EmptyReplicaSetLister{})
|
||||||
},
|
},
|
||||||
Weight: 1,
|
Weight: 1,
|
||||||
},
|
},
|
||||||
@ -182,7 +182,7 @@ func defaultPriorities() sets.String {
|
|||||||
"SelectorSpreadPriority",
|
"SelectorSpreadPriority",
|
||||||
factory.PriorityConfigFactory{
|
factory.PriorityConfigFactory{
|
||||||
Function: func(args factory.PluginFactoryArgs) algorithm.PriorityFunction {
|
Function: func(args factory.PluginFactoryArgs) algorithm.PriorityFunction {
|
||||||
return priorities.NewSelectorSpreadPriority(args.PodLister, args.ServiceLister, args.ControllerLister, args.ReplicaSetLister)
|
return priorities.NewSelectorSpreadPriority(args.ServiceLister, args.ControllerLister, args.ReplicaSetLister)
|
||||||
},
|
},
|
||||||
Weight: 1,
|
Weight: 1,
|
||||||
},
|
},
|
||||||
|
@ -19,12 +19,13 @@ package scheduler
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
|
"k8s.io/kubernetes/pkg/util/wait"
|
||||||
"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"
|
||||||
schedulertesting "k8s.io/kubernetes/plugin/pkg/scheduler/testing"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type fitPredicate func(pod *api.Pod, node *api.Node) (bool, error)
|
type fitPredicate func(pod *api.Pod, node *api.Node) (bool, error)
|
||||||
@ -170,7 +171,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
|
|||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
predicates: map[string]algorithm.FitPredicate{"true": truePredicate},
|
predicates: map[string]algorithm.FitPredicate{"true": truePredicate},
|
||||||
prioritizers: []algorithm.PriorityConfig{{Function: EqualPriority, Weight: 1}},
|
prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}},
|
||||||
extenders: []FakeExtender{
|
extenders: []FakeExtender{
|
||||||
{
|
{
|
||||||
predicates: []fitPredicate{truePredicateExtender},
|
predicates: []fitPredicate{truePredicateExtender},
|
||||||
@ -185,7 +186,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
predicates: map[string]algorithm.FitPredicate{"true": truePredicate},
|
predicates: map[string]algorithm.FitPredicate{"true": truePredicate},
|
||||||
prioritizers: []algorithm.PriorityConfig{{Function: EqualPriority, Weight: 1}},
|
prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}},
|
||||||
extenders: []FakeExtender{
|
extenders: []FakeExtender{
|
||||||
{
|
{
|
||||||
predicates: []fitPredicate{truePredicateExtender},
|
predicates: []fitPredicate{truePredicateExtender},
|
||||||
@ -200,7 +201,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
predicates: map[string]algorithm.FitPredicate{"true": truePredicate},
|
predicates: map[string]algorithm.FitPredicate{"true": truePredicate},
|
||||||
prioritizers: []algorithm.PriorityConfig{{Function: EqualPriority, Weight: 1}},
|
prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}},
|
||||||
extenders: []FakeExtender{
|
extenders: []FakeExtender{
|
||||||
{
|
{
|
||||||
predicates: []fitPredicate{truePredicateExtender},
|
predicates: []fitPredicate{truePredicateExtender},
|
||||||
@ -215,7 +216,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
predicates: map[string]algorithm.FitPredicate{"true": truePredicate},
|
predicates: map[string]algorithm.FitPredicate{"true": truePredicate},
|
||||||
prioritizers: []algorithm.PriorityConfig{{Function: EqualPriority, Weight: 1}},
|
prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}},
|
||||||
extenders: []FakeExtender{
|
extenders: []FakeExtender{
|
||||||
{
|
{
|
||||||
predicates: []fitPredicate{machine2PredicateExtender},
|
predicates: []fitPredicate{machine2PredicateExtender},
|
||||||
@ -230,7 +231,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
predicates: map[string]algorithm.FitPredicate{"true": truePredicate},
|
predicates: map[string]algorithm.FitPredicate{"true": truePredicate},
|
||||||
prioritizers: []algorithm.PriorityConfig{{Function: EqualPriority, Weight: 1}},
|
prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}},
|
||||||
extenders: []FakeExtender{
|
extenders: []FakeExtender{
|
||||||
{
|
{
|
||||||
predicates: []fitPredicate{truePredicateExtender},
|
predicates: []fitPredicate{truePredicateExtender},
|
||||||
@ -244,7 +245,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
predicates: map[string]algorithm.FitPredicate{"true": truePredicate},
|
predicates: map[string]algorithm.FitPredicate{"true": truePredicate},
|
||||||
prioritizers: []algorithm.PriorityConfig{{Function: EqualPriority, Weight: 1}},
|
prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}},
|
||||||
extenders: []FakeExtender{
|
extenders: []FakeExtender{
|
||||||
{
|
{
|
||||||
predicates: []fitPredicate{truePredicateExtender},
|
predicates: []fitPredicate{truePredicateExtender},
|
||||||
@ -282,8 +283,15 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
|
|||||||
for ii := range test.extenders {
|
for ii := range test.extenders {
|
||||||
extenders = append(extenders, &test.extenders[ii])
|
extenders = append(extenders, &test.extenders[ii])
|
||||||
}
|
}
|
||||||
|
cache := schedulercache.New(time.Duration(0), wait.NeverStop)
|
||||||
|
for _, pod := range test.pods {
|
||||||
|
cache.AddPod(pod)
|
||||||
|
}
|
||||||
|
for _, name := range test.nodes {
|
||||||
|
cache.AddNode(&api.Node{ObjectMeta: api.ObjectMeta{Name: name}})
|
||||||
|
}
|
||||||
scheduler := NewGenericScheduler(
|
scheduler := NewGenericScheduler(
|
||||||
schedulertesting.PodsToCache(test.pods), test.predicates, algorithm.EmptyMetadataProducer,
|
cache, test.predicates, algorithm.EmptyMetadataProducer,
|
||||||
test.prioritizers, extenders)
|
test.prioritizers, extenders)
|
||||||
machine, err := scheduler.Schedule(test.pod, algorithm.FakeNodeLister(makeNodeList(test.nodes)))
|
machine, err := scheduler.Schedule(test.pod, algorithm.FakeNodeLister(makeNodeList(test.nodes)))
|
||||||
if test.expectsErr {
|
if test.expectsErr {
|
||||||
|
@ -243,7 +243,15 @@ func PrioritizeNodes(
|
|||||||
// If no priority configs are provided, then the EqualPriority function is applied
|
// If no priority configs are provided, then the EqualPriority function is applied
|
||||||
// This is required to generate the priority list in the required format
|
// This is required to generate the priority list in the required format
|
||||||
if len(priorityConfigs) == 0 && len(extenders) == 0 {
|
if len(priorityConfigs) == 0 && len(extenders) == 0 {
|
||||||
return EqualPriority(pod, nodeNameToInfo, nodes)
|
result := make(schedulerapi.HostPriorityList, 0, len(nodes))
|
||||||
|
for i := range nodes {
|
||||||
|
hostPriority, err := EqualPriorityMap(pod, meta, nodeNameToInfo[nodes[i].Name])
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
result = append(result, hostPriority)
|
||||||
|
}
|
||||||
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -355,15 +363,15 @@ func PrioritizeNodes(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// EqualPriority is a prioritizer function that gives an equal weight of one to all nodes
|
// EqualPriority is a prioritizer function that gives an equal weight of one to all nodes
|
||||||
func EqualPriority(_ *api.Pod, nodeNameToInfo map[string]*schedulercache.NodeInfo, nodes []*api.Node) (schedulerapi.HostPriorityList, error) {
|
func EqualPriorityMap(_ *api.Pod, _ interface{}, nodeInfo *schedulercache.NodeInfo) (schedulerapi.HostPriority, error) {
|
||||||
result := make(schedulerapi.HostPriorityList, len(nodes))
|
node := nodeInfo.Node()
|
||||||
for _, node := range nodes {
|
if node == nil {
|
||||||
result = append(result, schedulerapi.HostPriority{
|
return schedulerapi.HostPriority{}, fmt.Errorf("node not found")
|
||||||
Host: node.Name,
|
|
||||||
Score: 1,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
return result, nil
|
return schedulerapi.HostPriority{
|
||||||
|
Host: node.Name,
|
||||||
|
Score: 1,
|
||||||
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewGenericScheduler(
|
func NewGenericScheduler(
|
||||||
|
@ -189,7 +189,7 @@ func TestGenericScheduler(t *testing.T) {
|
|||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
predicates: map[string]algorithm.FitPredicate{"false": falsePredicate},
|
predicates: map[string]algorithm.FitPredicate{"false": falsePredicate},
|
||||||
prioritizers: []algorithm.PriorityConfig{{Function: EqualPriority, Weight: 1}},
|
prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}},
|
||||||
nodes: []string{"machine1", "machine2"},
|
nodes: []string{"machine1", "machine2"},
|
||||||
expectsErr: true,
|
expectsErr: true,
|
||||||
pod: &api.Pod{ObjectMeta: api.ObjectMeta{Name: "2"}},
|
pod: &api.Pod{ObjectMeta: api.ObjectMeta{Name: "2"}},
|
||||||
@ -203,7 +203,7 @@ func TestGenericScheduler(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
predicates: map[string]algorithm.FitPredicate{"true": truePredicate},
|
predicates: map[string]algorithm.FitPredicate{"true": truePredicate},
|
||||||
prioritizers: []algorithm.PriorityConfig{{Function: EqualPriority, Weight: 1}},
|
prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}},
|
||||||
nodes: []string{"machine1", "machine2"},
|
nodes: []string{"machine1", "machine2"},
|
||||||
expectedHosts: sets.NewString("machine1", "machine2"),
|
expectedHosts: sets.NewString("machine1", "machine2"),
|
||||||
name: "test 2",
|
name: "test 2",
|
||||||
@ -212,7 +212,7 @@ func TestGenericScheduler(t *testing.T) {
|
|||||||
{
|
{
|
||||||
// Fits on a machine where the pod ID matches the machine name
|
// Fits on a machine where the pod ID matches the machine name
|
||||||
predicates: map[string]algorithm.FitPredicate{"matches": matchesPredicate},
|
predicates: map[string]algorithm.FitPredicate{"matches": matchesPredicate},
|
||||||
prioritizers: []algorithm.PriorityConfig{{Function: EqualPriority, Weight: 1}},
|
prioritizers: []algorithm.PriorityConfig{{Map: EqualPriorityMap, Weight: 1}},
|
||||||
nodes: []string{"machine1", "machine2"},
|
nodes: []string{"machine1", "machine2"},
|
||||||
pod: &api.Pod{ObjectMeta: api.ObjectMeta{Name: "machine2"}},
|
pod: &api.Pod{ObjectMeta: api.ObjectMeta{Name: "machine2"}},
|
||||||
expectedHosts: sets.NewString("machine2"),
|
expectedHosts: sets.NewString("machine2"),
|
||||||
@ -494,7 +494,6 @@ func TestZeroRequest(t *testing.T) {
|
|||||||
{Map: algorithmpriorities.BalancedResourceAllocationMap, Weight: 1},
|
{Map: algorithmpriorities.BalancedResourceAllocationMap, Weight: 1},
|
||||||
{
|
{
|
||||||
Function: algorithmpriorities.NewSelectorSpreadPriority(
|
Function: algorithmpriorities.NewSelectorSpreadPriority(
|
||||||
algorithm.FakePodLister(test.pods),
|
|
||||||
algorithm.FakeServiceLister([]*api.Service{}),
|
algorithm.FakeServiceLister([]*api.Service{}),
|
||||||
algorithm.FakeControllerLister([]*api.ReplicationController{}),
|
algorithm.FakeControllerLister([]*api.ReplicationController{}),
|
||||||
algorithm.FakeReplicaSetLister([]extensions.ReplicaSet{})),
|
algorithm.FakeReplicaSetLister([]extensions.ReplicaSet{})),
|
||||||
|
@ -185,6 +185,7 @@ func TestSchedulerNoPhantomPodAfterExpire(t *testing.T) {
|
|||||||
scache := schedulercache.New(100*time.Millisecond, stop)
|
scache := schedulercache.New(100*time.Millisecond, stop)
|
||||||
pod := podWithPort("pod.Name", "", 8080)
|
pod := podWithPort("pod.Name", "", 8080)
|
||||||
node := api.Node{ObjectMeta: api.ObjectMeta{Name: "machine1"}}
|
node := api.Node{ObjectMeta: api.ObjectMeta{Name: "machine1"}}
|
||||||
|
scache.AddNode(&node)
|
||||||
nodeLister := algorithm.FakeNodeLister([]*api.Node{&node})
|
nodeLister := algorithm.FakeNodeLister([]*api.Node{&node})
|
||||||
predicateMap := map[string]algorithm.FitPredicate{"PodFitsHostPorts": predicates.PodFitsHostPorts}
|
predicateMap := map[string]algorithm.FitPredicate{"PodFitsHostPorts": predicates.PodFitsHostPorts}
|
||||||
scheduler, bindingChan, _ := setupTestSchedulerWithOnePodOnNode(t, queuedPodStore, scache, nodeLister, predicateMap, pod, &node)
|
scheduler, bindingChan, _ := setupTestSchedulerWithOnePodOnNode(t, queuedPodStore, scache, nodeLister, predicateMap, pod, &node)
|
||||||
@ -242,6 +243,7 @@ func TestSchedulerNoPhantomPodAfterDelete(t *testing.T) {
|
|||||||
scache := schedulercache.New(10*time.Minute, stop)
|
scache := schedulercache.New(10*time.Minute, stop)
|
||||||
firstPod := podWithPort("pod.Name", "", 8080)
|
firstPod := podWithPort("pod.Name", "", 8080)
|
||||||
node := api.Node{ObjectMeta: api.ObjectMeta{Name: "machine1"}}
|
node := api.Node{ObjectMeta: api.ObjectMeta{Name: "machine1"}}
|
||||||
|
scache.AddNode(&node)
|
||||||
nodeLister := algorithm.FakeNodeLister([]*api.Node{&node})
|
nodeLister := algorithm.FakeNodeLister([]*api.Node{&node})
|
||||||
predicateMap := map[string]algorithm.FitPredicate{"PodFitsHostPorts": predicates.PodFitsHostPorts}
|
predicateMap := map[string]algorithm.FitPredicate{"PodFitsHostPorts": predicates.PodFitsHostPorts}
|
||||||
scheduler, bindingChan, errChan := setupTestSchedulerWithOnePodOnNode(t, queuedPodStore, scache, nodeLister, predicateMap, firstPod, &node)
|
scheduler, bindingChan, errChan := setupTestSchedulerWithOnePodOnNode(t, queuedPodStore, scache, nodeLister, predicateMap, firstPod, &node)
|
||||||
|
Loading…
Reference in New Issue
Block a user