mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-25 12:43:23 +00:00
Merge pull request #84099 from draveness/feature/remove-lister-wrapper
feat(scheduler): replace several algorithm listers with client listers
This commit is contained in:
commit
9c25b16d88
@ -11,13 +11,15 @@ go_library(
|
|||||||
],
|
],
|
||||||
importpath = "k8s.io/kubernetes/pkg/scheduler/algorithm",
|
importpath = "k8s.io/kubernetes/pkg/scheduler/algorithm",
|
||||||
deps = [
|
deps = [
|
||||||
|
"//pkg/apis/apps:go_default_library",
|
||||||
"//pkg/scheduler/api:go_default_library",
|
"//pkg/scheduler/api:go_default_library",
|
||||||
"//pkg/scheduler/apis/extender/v1:go_default_library",
|
"//pkg/scheduler/apis/extender/v1:go_default_library",
|
||||||
"//pkg/scheduler/nodeinfo:go_default_library",
|
"//pkg/scheduler/nodeinfo:go_default_library",
|
||||||
"//staging/src/k8s.io/api/apps/v1:go_default_library",
|
"//staging/src/k8s.io/api/apps/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/api/policy/v1beta1:go_default_library",
|
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
|
||||||
|
"//staging/src/k8s.io/client-go/listers/apps/v1:go_default_library",
|
||||||
|
"//staging/src/k8s.io/client-go/listers/core/v1:go_default_library",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -1050,7 +1050,7 @@ func (n *NodeLabelChecker) CheckNodeLabelPresence(pod *v1.Pod, meta PredicateMet
|
|||||||
// ServiceAffinity defines a struct used for creating service affinity predicates.
|
// ServiceAffinity defines a struct used for creating service affinity predicates.
|
||||||
type ServiceAffinity struct {
|
type ServiceAffinity struct {
|
||||||
podLister algorithm.PodLister
|
podLister algorithm.PodLister
|
||||||
serviceLister algorithm.ServiceLister
|
serviceLister corelisters.ServiceLister
|
||||||
nodeInfo NodeInfo
|
nodeInfo NodeInfo
|
||||||
labels []string
|
labels []string
|
||||||
}
|
}
|
||||||
@ -1082,7 +1082,7 @@ func (s *ServiceAffinity) serviceAffinityMetadataProducer(pm *predicateMetadata)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewServiceAffinityPredicate creates a ServiceAffinity.
|
// NewServiceAffinityPredicate creates a ServiceAffinity.
|
||||||
func NewServiceAffinityPredicate(podLister algorithm.PodLister, serviceLister algorithm.ServiceLister, nodeInfo NodeInfo, labels []string) (FitPredicate, predicateMetadataProducer) {
|
func NewServiceAffinityPredicate(podLister algorithm.PodLister, serviceLister corelisters.ServiceLister, nodeInfo NodeInfo, labels []string) (FitPredicate, predicateMetadataProducer) {
|
||||||
affinity := &ServiceAffinity{
|
affinity := &ServiceAffinity{
|
||||||
podLister: podLister,
|
podLister: podLister,
|
||||||
serviceLister: serviceLister,
|
serviceLister: serviceLister,
|
||||||
|
@ -47,6 +47,8 @@ go_library(
|
|||||||
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
|
||||||
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
|
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
|
||||||
|
"//staging/src/k8s.io/client-go/listers/apps/v1:go_default_library",
|
||||||
|
"//staging/src/k8s.io/client-go/listers/core/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/client-go/util/workqueue:go_default_library",
|
"//staging/src/k8s.io/client-go/util/workqueue:go_default_library",
|
||||||
"//vendor/k8s.io/klog:go_default_library",
|
"//vendor/k8s.io/klog:go_default_library",
|
||||||
],
|
],
|
||||||
@ -86,6 +88,8 @@ go_test(
|
|||||||
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
|
||||||
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
|
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
|
||||||
|
"//staging/src/k8s.io/client-go/informers:go_default_library",
|
||||||
|
"//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library",
|
||||||
"//staging/src/k8s.io/component-base/featuregate/testing:go_default_library",
|
"//staging/src/k8s.io/component-base/featuregate/testing:go_default_library",
|
||||||
"//vendor/github.com/stretchr/testify/assert:go_default_library",
|
"//vendor/github.com/stretchr/testify/assert:go_default_library",
|
||||||
],
|
],
|
||||||
|
@ -20,20 +20,26 @@ import (
|
|||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/labels"
|
"k8s.io/apimachinery/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithm"
|
appslisters "k8s.io/client-go/listers/apps/v1"
|
||||||
|
corelisters "k8s.io/client-go/listers/core/v1"
|
||||||
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
|
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
|
||||||
)
|
)
|
||||||
|
|
||||||
// PriorityMetadataFactory is a factory to produce PriorityMetadata.
|
// PriorityMetadataFactory is a factory to produce PriorityMetadata.
|
||||||
type PriorityMetadataFactory struct {
|
type PriorityMetadataFactory struct {
|
||||||
serviceLister algorithm.ServiceLister
|
serviceLister corelisters.ServiceLister
|
||||||
controllerLister algorithm.ControllerLister
|
controllerLister corelisters.ReplicationControllerLister
|
||||||
replicaSetLister algorithm.ReplicaSetLister
|
replicaSetLister appslisters.ReplicaSetLister
|
||||||
statefulSetLister algorithm.StatefulSetLister
|
statefulSetLister appslisters.StatefulSetLister
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewPriorityMetadataFactory creates a PriorityMetadataFactory.
|
// NewPriorityMetadataFactory creates a PriorityMetadataFactory.
|
||||||
func NewPriorityMetadataFactory(serviceLister algorithm.ServiceLister, controllerLister algorithm.ControllerLister, replicaSetLister algorithm.ReplicaSetLister, statefulSetLister algorithm.StatefulSetLister) PriorityMetadataProducer {
|
func NewPriorityMetadataFactory(
|
||||||
|
serviceLister corelisters.ServiceLister,
|
||||||
|
controllerLister corelisters.ReplicationControllerLister,
|
||||||
|
replicaSetLister appslisters.ReplicaSetLister,
|
||||||
|
statefulSetLister appslisters.StatefulSetLister,
|
||||||
|
) PriorityMetadataProducer {
|
||||||
factory := &PriorityMetadataFactory{
|
factory := &PriorityMetadataFactory{
|
||||||
serviceLister: serviceLister,
|
serviceLister: serviceLister,
|
||||||
controllerLister: controllerLister,
|
controllerLister: controllerLister,
|
||||||
@ -72,7 +78,7 @@ func (pmf *PriorityMetadataFactory) PriorityMetadata(pod *v1.Pod, nodeNameToInfo
|
|||||||
}
|
}
|
||||||
|
|
||||||
// getFirstServiceSelector returns one selector of services the given pod.
|
// getFirstServiceSelector returns one selector of services the given pod.
|
||||||
func getFirstServiceSelector(pod *v1.Pod, sl algorithm.ServiceLister) (firstServiceSelector labels.Selector) {
|
func getFirstServiceSelector(pod *v1.Pod, sl corelisters.ServiceLister) (firstServiceSelector labels.Selector) {
|
||||||
if services, err := sl.GetPodServices(pod); err == nil && len(services) > 0 {
|
if services, err := sl.GetPodServices(pod); err == nil && len(services) > 0 {
|
||||||
return labels.SelectorFromSet(services[0].Spec.Selector)
|
return labels.SelectorFromSet(services[0].Spec.Selector)
|
||||||
}
|
}
|
||||||
@ -80,7 +86,7 @@ func getFirstServiceSelector(pod *v1.Pod, sl algorithm.ServiceLister) (firstServ
|
|||||||
}
|
}
|
||||||
|
|
||||||
// getSelectors returns selectors of services, RCs and RSs matching the given pod.
|
// getSelectors returns selectors of services, RCs and RSs matching the given pod.
|
||||||
func getSelectors(pod *v1.Pod, sl algorithm.ServiceLister, cl algorithm.ControllerLister, rsl algorithm.ReplicaSetLister, ssl algorithm.StatefulSetLister) []labels.Selector {
|
func getSelectors(pod *v1.Pod, sl corelisters.ServiceLister, cl corelisters.ReplicationControllerLister, rsl appslisters.ReplicaSetLister, ssl appslisters.StatefulSetLister) []labels.Selector {
|
||||||
var selectors []labels.Selector
|
var selectors []labels.Selector
|
||||||
|
|
||||||
if services, err := sl.GetPodServices(pod); err == nil {
|
if services, err := sl.GetPodServices(pod); err == nil {
|
||||||
|
@ -20,13 +20,13 @@ import (
|
|||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1"
|
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/api/resource"
|
"k8s.io/apimachinery/pkg/api/resource"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/client-go/informers"
|
||||||
|
clientsetfake "k8s.io/client-go/kubernetes/fake"
|
||||||
priorityutil "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/util"
|
priorityutil "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/util"
|
||||||
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
|
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
|
||||||
schedulertesting "k8s.io/kubernetes/pkg/scheduler/testing"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestPriorityMetadata(t *testing.T) {
|
func TestPriorityMetadata(t *testing.T) {
|
||||||
@ -162,11 +162,15 @@ func TestPriorityMetadata(t *testing.T) {
|
|||||||
name: "Produce a priorityMetadata with specified requests",
|
name: "Produce a priorityMetadata with specified requests",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
client := clientsetfake.NewSimpleClientset()
|
||||||
|
informerFactory := informers.NewSharedInformerFactory(client, 0)
|
||||||
|
|
||||||
metaDataProducer := NewPriorityMetadataFactory(
|
metaDataProducer := NewPriorityMetadataFactory(
|
||||||
schedulertesting.FakeServiceLister([]*v1.Service{}),
|
informerFactory.Core().V1().Services().Lister(),
|
||||||
schedulertesting.FakeControllerLister([]*v1.ReplicationController{}),
|
informerFactory.Core().V1().ReplicationControllers().Lister(),
|
||||||
schedulertesting.FakeReplicaSetLister([]*apps.ReplicaSet{}),
|
informerFactory.Apps().V1().ReplicaSets().Lister(),
|
||||||
schedulertesting.FakeStatefulSetLister([]*apps.StatefulSet{}))
|
informerFactory.Apps().V1().StatefulSets().Lister(),
|
||||||
|
)
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
ptData := metaDataProducer(test.pod, nil)
|
ptData := metaDataProducer(test.pod, nil)
|
||||||
|
@ -21,6 +21,8 @@ import (
|
|||||||
|
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/labels"
|
"k8s.io/apimachinery/pkg/labels"
|
||||||
|
appslisters "k8s.io/client-go/listers/apps/v1"
|
||||||
|
corelisters "k8s.io/client-go/listers/core/v1"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithm"
|
"k8s.io/kubernetes/pkg/scheduler/algorithm"
|
||||||
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
|
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
|
||||||
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
|
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
|
||||||
@ -35,18 +37,18 @@ const zoneWeighting float64 = 2.0 / 3.0
|
|||||||
|
|
||||||
// SelectorSpread contains information to calculate selector spread priority.
|
// SelectorSpread contains information to calculate selector spread priority.
|
||||||
type SelectorSpread struct {
|
type SelectorSpread struct {
|
||||||
serviceLister algorithm.ServiceLister
|
serviceLister corelisters.ServiceLister
|
||||||
controllerLister algorithm.ControllerLister
|
controllerLister corelisters.ReplicationControllerLister
|
||||||
replicaSetLister algorithm.ReplicaSetLister
|
replicaSetLister appslisters.ReplicaSetLister
|
||||||
statefulSetLister algorithm.StatefulSetLister
|
statefulSetLister appslisters.StatefulSetLister
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewSelectorSpreadPriority creates a SelectorSpread.
|
// NewSelectorSpreadPriority creates a SelectorSpread.
|
||||||
func NewSelectorSpreadPriority(
|
func NewSelectorSpreadPriority(
|
||||||
serviceLister algorithm.ServiceLister,
|
serviceLister corelisters.ServiceLister,
|
||||||
controllerLister algorithm.ControllerLister,
|
controllerLister corelisters.ReplicationControllerLister,
|
||||||
replicaSetLister algorithm.ReplicaSetLister,
|
replicaSetLister appslisters.ReplicaSetLister,
|
||||||
statefulSetLister algorithm.StatefulSetLister) (PriorityMapFunction, PriorityReduceFunction) {
|
statefulSetLister appslisters.StatefulSetLister) (PriorityMapFunction, PriorityReduceFunction) {
|
||||||
selectorSpread := &SelectorSpread{
|
selectorSpread := &SelectorSpread{
|
||||||
serviceLister: serviceLister,
|
serviceLister: serviceLister,
|
||||||
controllerLister: controllerLister,
|
controllerLister: controllerLister,
|
||||||
@ -154,12 +156,12 @@ func (s *SelectorSpread) CalculateSpreadPriorityReduce(pod *v1.Pod, meta interfa
|
|||||||
// ServiceAntiAffinity contains information to calculate service anti-affinity priority.
|
// ServiceAntiAffinity contains information to calculate service anti-affinity priority.
|
||||||
type ServiceAntiAffinity struct {
|
type ServiceAntiAffinity struct {
|
||||||
podLister algorithm.PodLister
|
podLister algorithm.PodLister
|
||||||
serviceLister algorithm.ServiceLister
|
serviceLister corelisters.ServiceLister
|
||||||
label string
|
label string
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewServiceAntiAffinityPriority creates a ServiceAntiAffinity.
|
// NewServiceAntiAffinityPriority creates a ServiceAntiAffinity.
|
||||||
func NewServiceAntiAffinityPriority(podLister algorithm.PodLister, serviceLister algorithm.ServiceLister, label string) (PriorityMapFunction, PriorityReduceFunction) {
|
func NewServiceAntiAffinityPriority(podLister algorithm.PodLister, serviceLister corelisters.ServiceLister, label string) (PriorityMapFunction, PriorityReduceFunction) {
|
||||||
antiAffinity := &ServiceAntiAffinity{
|
antiAffinity := &ServiceAntiAffinity{
|
||||||
podLister: podLister,
|
podLister: podLister,
|
||||||
serviceLister: serviceLister,
|
serviceLister: serviceLister,
|
||||||
|
@ -17,10 +17,12 @@ limitations under the License.
|
|||||||
package algorithm
|
package algorithm
|
||||||
|
|
||||||
import (
|
import (
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
"k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
policyv1beta1 "k8s.io/api/policy/v1beta1"
|
|
||||||
"k8s.io/apimachinery/pkg/labels"
|
"k8s.io/apimachinery/pkg/labels"
|
||||||
|
appslisters "k8s.io/client-go/listers/apps/v1"
|
||||||
|
corelisters "k8s.io/client-go/listers/core/v1"
|
||||||
|
"k8s.io/kubernetes/pkg/apis/apps"
|
||||||
schedulerapi "k8s.io/kubernetes/pkg/scheduler/api"
|
schedulerapi "k8s.io/kubernetes/pkg/scheduler/api"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -43,35 +45,7 @@ type PodLister interface {
|
|||||||
FilteredList(podFilter PodFilter, selector labels.Selector) ([]*v1.Pod, error)
|
FilteredList(podFilter PodFilter, selector labels.Selector) ([]*v1.Pod, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ServiceLister interface represents anything that can produce a list of services; the list is consumed by a scheduler.
|
var _ corelisters.ReplicationControllerLister = &EmptyControllerLister{}
|
||||||
type ServiceLister interface {
|
|
||||||
// Lists all the services
|
|
||||||
List(labels.Selector) ([]*v1.Service, error)
|
|
||||||
// Gets the services for the given pod
|
|
||||||
GetPodServices(*v1.Pod) ([]*v1.Service, error)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ControllerLister interface represents anything that can produce a list of ReplicationController; the list is consumed by a scheduler.
|
|
||||||
type ControllerLister interface {
|
|
||||||
// Lists all the replication controllers
|
|
||||||
List(labels.Selector) ([]*v1.ReplicationController, error)
|
|
||||||
// Gets the replication controller for the given pod
|
|
||||||
GetPodControllers(*v1.Pod) ([]*v1.ReplicationController, error)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ReplicaSetLister interface represents anything that can produce a list of ReplicaSet; the list is consumed by a scheduler.
|
|
||||||
type ReplicaSetLister interface {
|
|
||||||
// Gets the replicasets for the given pod
|
|
||||||
GetPodReplicaSets(*v1.Pod) ([]*apps.ReplicaSet, error)
|
|
||||||
}
|
|
||||||
|
|
||||||
// PDBLister interface represents anything that can list PodDisruptionBudget objects.
|
|
||||||
type PDBLister interface {
|
|
||||||
// List all the PodDisruptionBudgets matching the selector
|
|
||||||
List(labels.Selector) ([]*policyv1beta1.PodDisruptionBudget, error)
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ ControllerLister = &EmptyControllerLister{}
|
|
||||||
|
|
||||||
// EmptyControllerLister implements ControllerLister on []v1.ReplicationController returning empty data
|
// EmptyControllerLister implements ControllerLister on []v1.ReplicationController returning empty data
|
||||||
type EmptyControllerLister struct{}
|
type EmptyControllerLister struct{}
|
||||||
@ -86,28 +60,53 @@ func (f EmptyControllerLister) GetPodControllers(pod *v1.Pod) (controllers []*v1
|
|||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ ReplicaSetLister = &EmptyReplicaSetLister{}
|
// ReplicationControllers returns nil
|
||||||
|
func (f EmptyControllerLister) ReplicationControllers(namespace string) corelisters.ReplicationControllerNamespaceLister {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ appslisters.ReplicaSetLister = &EmptyReplicaSetLister{}
|
||||||
|
|
||||||
// EmptyReplicaSetLister implements ReplicaSetLister on []extensions.ReplicaSet returning empty data
|
// EmptyReplicaSetLister implements ReplicaSetLister on []extensions.ReplicaSet returning empty data
|
||||||
type EmptyReplicaSetLister struct{}
|
type EmptyReplicaSetLister struct{}
|
||||||
|
|
||||||
// GetPodReplicaSets returns nil
|
// List returns nil
|
||||||
func (f EmptyReplicaSetLister) GetPodReplicaSets(pod *v1.Pod) (rss []*apps.ReplicaSet, err error) {
|
func (f EmptyReplicaSetLister) List(labels.Selector) ([]*appsv1.ReplicaSet, error) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetPodReplicaSets returns nil
|
||||||
|
func (f EmptyReplicaSetLister) GetPodReplicaSets(pod *v1.Pod) (rss []*appsv1.ReplicaSet, err error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReplicaSets returns nil
|
||||||
|
func (f EmptyReplicaSetLister) ReplicaSets(namespace string) appslisters.ReplicaSetNamespaceLister {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// StatefulSetLister interface represents anything that can produce a list of StatefulSet; the list is consumed by a scheduler.
|
// StatefulSetLister interface represents anything that can produce a list of StatefulSet; the list is consumed by a scheduler.
|
||||||
type StatefulSetLister interface {
|
type StatefulSetLister interface {
|
||||||
// Gets the StatefulSet for the given pod.
|
// Gets the StatefulSet for the given pod.
|
||||||
GetPodStatefulSets(*v1.Pod) ([]*apps.StatefulSet, error)
|
GetPodStatefulSets(*v1.Pod) ([]*apps.StatefulSet, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ StatefulSetLister = &EmptyStatefulSetLister{}
|
var _ appslisters.StatefulSetLister = &EmptyStatefulSetLister{}
|
||||||
|
|
||||||
// EmptyStatefulSetLister implements StatefulSetLister on []apps.StatefulSet returning empty data.
|
// EmptyStatefulSetLister implements StatefulSetLister on []apps.StatefulSet returning empty data.
|
||||||
type EmptyStatefulSetLister struct{}
|
type EmptyStatefulSetLister struct{}
|
||||||
|
|
||||||
// GetPodStatefulSets of EmptyStatefulSetLister returns nil.
|
// List returns nil
|
||||||
func (f EmptyStatefulSetLister) GetPodStatefulSets(pod *v1.Pod) (sss []*apps.StatefulSet, err error) {
|
func (f EmptyStatefulSetLister) List(labels.Selector) ([]*appsv1.StatefulSet, error) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetPodStatefulSets of EmptyStatefulSetLister returns nil.
|
||||||
|
func (f EmptyStatefulSetLister) GetPodStatefulSets(pod *v1.Pod) (sss []*appsv1.StatefulSet, err error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// StatefulSets returns nil
|
||||||
|
func (f EmptyStatefulSetLister) StatefulSets(namespace string) appslisters.StatefulSetNamespaceLister {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
@ -24,6 +24,9 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
|
appslisters "k8s.io/client-go/listers/apps/v1"
|
||||||
|
corelisters "k8s.io/client-go/listers/core/v1"
|
||||||
|
policylisters "k8s.io/client-go/listers/policy/v1beta1"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithm"
|
"k8s.io/kubernetes/pkg/scheduler/algorithm"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
|
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithm/priorities"
|
"k8s.io/kubernetes/pkg/scheduler/algorithm/priorities"
|
||||||
@ -37,11 +40,11 @@ import (
|
|||||||
// PluginFactoryArgs are passed to all plugin factory functions.
|
// PluginFactoryArgs are passed to all plugin factory functions.
|
||||||
type PluginFactoryArgs struct {
|
type PluginFactoryArgs struct {
|
||||||
PodLister algorithm.PodLister
|
PodLister algorithm.PodLister
|
||||||
ServiceLister algorithm.ServiceLister
|
ServiceLister corelisters.ServiceLister
|
||||||
ControllerLister algorithm.ControllerLister
|
ControllerLister corelisters.ReplicationControllerLister
|
||||||
ReplicaSetLister algorithm.ReplicaSetLister
|
ReplicaSetLister appslisters.ReplicaSetLister
|
||||||
StatefulSetLister algorithm.StatefulSetLister
|
StatefulSetLister appslisters.StatefulSetLister
|
||||||
PDBLister algorithm.PDBLister
|
PDBLister policylisters.PodDisruptionBudgetLister
|
||||||
NodeInfo predicates.NodeInfo
|
NodeInfo predicates.NodeInfo
|
||||||
CSINodeInfo predicates.CSINodeInfo
|
CSINodeInfo predicates.CSINodeInfo
|
||||||
PVInfo predicates.PersistentVolumeInfo
|
PVInfo predicates.PersistentVolumeInfo
|
||||||
|
@ -31,6 +31,7 @@ go_library(
|
|||||||
"//staging/src/k8s.io/apimachinery/pkg/util/net:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/util/net:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
||||||
"//staging/src/k8s.io/client-go/listers/core/v1:go_default_library",
|
"//staging/src/k8s.io/client-go/listers/core/v1:go_default_library",
|
||||||
|
"//staging/src/k8s.io/client-go/listers/policy/v1beta1:go_default_library",
|
||||||
"//staging/src/k8s.io/client-go/rest:go_default_library",
|
"//staging/src/k8s.io/client-go/rest:go_default_library",
|
||||||
"//staging/src/k8s.io/client-go/util/workqueue:go_default_library",
|
"//staging/src/k8s.io/client-go/util/workqueue:go_default_library",
|
||||||
"//vendor/k8s.io/klog:go_default_library",
|
"//vendor/k8s.io/klog:go_default_library",
|
||||||
@ -60,7 +61,6 @@ go_test(
|
|||||||
"//pkg/scheduler/nodeinfo:go_default_library",
|
"//pkg/scheduler/nodeinfo:go_default_library",
|
||||||
"//pkg/scheduler/testing:go_default_library",
|
"//pkg/scheduler/testing:go_default_library",
|
||||||
"//pkg/scheduler/util:go_default_library",
|
"//pkg/scheduler/util:go_default_library",
|
||||||
"//staging/src/k8s.io/api/apps/v1:go_default_library",
|
|
||||||
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||||
@ -69,6 +69,8 @@ go_test(
|
|||||||
"//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
|
||||||
|
"//staging/src/k8s.io/client-go/informers:go_default_library",
|
||||||
|
"//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -29,6 +29,8 @@ import (
|
|||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
"k8s.io/apimachinery/pkg/util/wait"
|
"k8s.io/apimachinery/pkg/util/wait"
|
||||||
|
"k8s.io/client-go/informers"
|
||||||
|
clientsetfake "k8s.io/client-go/kubernetes/fake"
|
||||||
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
|
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithm"
|
"k8s.io/kubernetes/pkg/scheduler/algorithm"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
|
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
|
||||||
@ -39,7 +41,6 @@ import (
|
|||||||
internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache"
|
internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache"
|
||||||
internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue"
|
internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue"
|
||||||
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
|
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
|
||||||
schedulertesting "k8s.io/kubernetes/pkg/scheduler/testing"
|
|
||||||
"k8s.io/kubernetes/pkg/scheduler/util"
|
"k8s.io/kubernetes/pkg/scheduler/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -533,6 +534,9 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
|
|||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
client := clientsetfake.NewSimpleClientset()
|
||||||
|
informerFactory := informers.NewSharedInformerFactory(client, 0)
|
||||||
|
|
||||||
extenders := []algorithm.SchedulerExtender{}
|
extenders := []algorithm.SchedulerExtender{}
|
||||||
for ii := range test.extenders {
|
for ii := range test.extenders {
|
||||||
extenders = append(extenders, &test.extenders[ii])
|
extenders = append(extenders, &test.extenders[ii])
|
||||||
@ -552,8 +556,8 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
|
|||||||
emptyFramework,
|
emptyFramework,
|
||||||
extenders,
|
extenders,
|
||||||
nil,
|
nil,
|
||||||
schedulertesting.FakePersistentVolumeClaimLister{},
|
informerFactory.Core().V1().PersistentVolumeClaims().Lister(),
|
||||||
schedulertesting.FakePDBLister{},
|
informerFactory.Policy().V1beta1().PodDisruptionBudgets().Lister(),
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
schedulerapi.DefaultPercentageOfNodesToScore,
|
schedulerapi.DefaultPercentageOfNodesToScore,
|
||||||
|
@ -35,6 +35,7 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/labels"
|
"k8s.io/apimachinery/pkg/labels"
|
||||||
"k8s.io/apimachinery/pkg/util/errors"
|
"k8s.io/apimachinery/pkg/util/errors"
|
||||||
corelisters "k8s.io/client-go/listers/core/v1"
|
corelisters "k8s.io/client-go/listers/core/v1"
|
||||||
|
policylisters "k8s.io/client-go/listers/policy/v1beta1"
|
||||||
"k8s.io/client-go/util/workqueue"
|
"k8s.io/client-go/util/workqueue"
|
||||||
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
|
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithm"
|
"k8s.io/kubernetes/pkg/scheduler/algorithm"
|
||||||
@ -155,7 +156,7 @@ type genericScheduler struct {
|
|||||||
nodeInfoSnapshot *schedulernodeinfo.Snapshot
|
nodeInfoSnapshot *schedulernodeinfo.Snapshot
|
||||||
volumeBinder *volumebinder.VolumeBinder
|
volumeBinder *volumebinder.VolumeBinder
|
||||||
pvcLister corelisters.PersistentVolumeClaimLister
|
pvcLister corelisters.PersistentVolumeClaimLister
|
||||||
pdbLister algorithm.PDBLister
|
pdbLister policylisters.PodDisruptionBudgetLister
|
||||||
disablePreemption bool
|
disablePreemption bool
|
||||||
percentageOfNodesToScore int32
|
percentageOfNodesToScore int32
|
||||||
enableNonPreempting bool
|
enableNonPreempting bool
|
||||||
@ -1278,7 +1279,7 @@ func NewGenericScheduler(
|
|||||||
extenders []algorithm.SchedulerExtender,
|
extenders []algorithm.SchedulerExtender,
|
||||||
volumeBinder *volumebinder.VolumeBinder,
|
volumeBinder *volumebinder.VolumeBinder,
|
||||||
pvcLister corelisters.PersistentVolumeClaimLister,
|
pvcLister corelisters.PersistentVolumeClaimLister,
|
||||||
pdbLister algorithm.PDBLister,
|
pdbLister policylisters.PodDisruptionBudgetLister,
|
||||||
alwaysCheckAllPredicates bool,
|
alwaysCheckAllPredicates bool,
|
||||||
disablePreemption bool,
|
disablePreemption bool,
|
||||||
percentageOfNodesToScore int32,
|
percentageOfNodesToScore int32,
|
||||||
|
@ -27,7 +27,6 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1"
|
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/api/resource"
|
"k8s.io/apimachinery/pkg/api/resource"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
@ -36,6 +35,8 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/util/errors"
|
"k8s.io/apimachinery/pkg/util/errors"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
"k8s.io/apimachinery/pkg/util/wait"
|
"k8s.io/apimachinery/pkg/util/wait"
|
||||||
|
"k8s.io/client-go/informers"
|
||||||
|
clientsetfake "k8s.io/client-go/kubernetes/fake"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithm"
|
"k8s.io/kubernetes/pkg/scheduler/algorithm"
|
||||||
algorithmpredicates "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
|
algorithmpredicates "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithm/priorities"
|
"k8s.io/kubernetes/pkg/scheduler/algorithm/priorities"
|
||||||
@ -641,6 +642,9 @@ func TestGenericScheduler(t *testing.T) {
|
|||||||
}
|
}
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
client := clientsetfake.NewSimpleClientset()
|
||||||
|
informerFactory := informers.NewSharedInformerFactory(client, 0)
|
||||||
|
|
||||||
filterPlugin.failedNodeReturnCodeMap = test.filterFailedNodeReturnCodeMap
|
filterPlugin.failedNodeReturnCodeMap = test.filterFailedNodeReturnCodeMap
|
||||||
|
|
||||||
cache := internalcache.New(time.Duration(0), wait.NeverStop)
|
cache := internalcache.New(time.Duration(0), wait.NeverStop)
|
||||||
@ -670,7 +674,7 @@ func TestGenericScheduler(t *testing.T) {
|
|||||||
[]algorithm.SchedulerExtender{},
|
[]algorithm.SchedulerExtender{},
|
||||||
nil,
|
nil,
|
||||||
pvcLister,
|
pvcLister,
|
||||||
schedulertesting.FakePDBLister{},
|
informerFactory.Policy().V1beta1().PodDisruptionBudgets().Lister(),
|
||||||
test.alwaysCheckAllPredicates,
|
test.alwaysCheckAllPredicates,
|
||||||
false,
|
false,
|
||||||
schedulerapi.DefaultPercentageOfNodesToScore,
|
schedulerapi.DefaultPercentageOfNodesToScore,
|
||||||
@ -974,6 +978,9 @@ func TestZeroRequest(t *testing.T) {
|
|||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
client := clientsetfake.NewSimpleClientset()
|
||||||
|
informerFactory := informers.NewSharedInformerFactory(client, 0)
|
||||||
|
|
||||||
// This should match the configuration in defaultPriorities() in
|
// This should match the configuration in defaultPriorities() in
|
||||||
// pkg/scheduler/algorithmprovider/defaults/defaults.go if you want
|
// pkg/scheduler/algorithmprovider/defaults/defaults.go if you want
|
||||||
// to test what's actually in production.
|
// to test what's actually in production.
|
||||||
@ -982,20 +989,23 @@ func TestZeroRequest(t *testing.T) {
|
|||||||
{Map: priorities.BalancedResourceAllocationMap, Weight: 1},
|
{Map: priorities.BalancedResourceAllocationMap, Weight: 1},
|
||||||
}
|
}
|
||||||
selectorSpreadPriorityMap, selectorSpreadPriorityReduce := priorities.NewSelectorSpreadPriority(
|
selectorSpreadPriorityMap, selectorSpreadPriorityReduce := priorities.NewSelectorSpreadPriority(
|
||||||
schedulertesting.FakeServiceLister([]*v1.Service{}),
|
informerFactory.Core().V1().Services().Lister(),
|
||||||
schedulertesting.FakeControllerLister([]*v1.ReplicationController{}),
|
informerFactory.Core().V1().ReplicationControllers().Lister(),
|
||||||
schedulertesting.FakeReplicaSetLister([]*apps.ReplicaSet{}),
|
informerFactory.Apps().V1().ReplicaSets().Lister(),
|
||||||
schedulertesting.FakeStatefulSetLister([]*apps.StatefulSet{}))
|
informerFactory.Apps().V1().StatefulSets().Lister(),
|
||||||
|
)
|
||||||
pc := priorities.PriorityConfig{Map: selectorSpreadPriorityMap, Reduce: selectorSpreadPriorityReduce, Weight: 1}
|
pc := priorities.PriorityConfig{Map: selectorSpreadPriorityMap, Reduce: selectorSpreadPriorityReduce, Weight: 1}
|
||||||
priorityConfigs = append(priorityConfigs, pc)
|
priorityConfigs = append(priorityConfigs, pc)
|
||||||
|
|
||||||
nodeNameToInfo := schedulernodeinfo.CreateNodeNameToInfoMap(test.pods, test.nodes)
|
nodeNameToInfo := schedulernodeinfo.CreateNodeNameToInfoMap(test.pods, test.nodes)
|
||||||
|
|
||||||
metaDataProducer := priorities.NewPriorityMetadataFactory(
|
metaDataProducer := priorities.NewPriorityMetadataFactory(
|
||||||
schedulertesting.FakeServiceLister([]*v1.Service{}),
|
informerFactory.Core().V1().Services().Lister(),
|
||||||
schedulertesting.FakeControllerLister([]*v1.ReplicationController{}),
|
informerFactory.Core().V1().ReplicationControllers().Lister(),
|
||||||
schedulertesting.FakeReplicaSetLister([]*apps.ReplicaSet{}),
|
informerFactory.Apps().V1().ReplicaSets().Lister(),
|
||||||
schedulertesting.FakeStatefulSetLister([]*apps.StatefulSet{}))
|
informerFactory.Apps().V1().StatefulSets().Lister(),
|
||||||
|
)
|
||||||
|
|
||||||
metaData := metaDataProducer(test.pod, nodeNameToInfo)
|
metaData := metaDataProducer(test.pod, nodeNameToInfo)
|
||||||
|
|
||||||
list, err := PrioritizeNodes(
|
list, err := PrioritizeNodes(
|
||||||
@ -1370,6 +1380,9 @@ func TestSelectNodesForPreemption(t *testing.T) {
|
|||||||
labelKeys := []string{"hostname", "zone", "region"}
|
labelKeys := []string{"hostname", "zone", "region"}
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
client := clientsetfake.NewSimpleClientset()
|
||||||
|
informerFactory := informers.NewSharedInformerFactory(client, 0)
|
||||||
|
|
||||||
filterFailedNodeReturnCodeMap := map[string]framework.Code{}
|
filterFailedNodeReturnCodeMap := map[string]framework.Code{}
|
||||||
cache := internalcache.New(time.Duration(0), wait.NeverStop)
|
cache := internalcache.New(time.Duration(0), wait.NeverStop)
|
||||||
for _, pod := range test.pods {
|
for _, pod := range test.pods {
|
||||||
@ -1392,7 +1405,7 @@ func TestSelectNodesForPreemption(t *testing.T) {
|
|||||||
[]algorithm.SchedulerExtender{},
|
[]algorithm.SchedulerExtender{},
|
||||||
nil,
|
nil,
|
||||||
nil,
|
nil,
|
||||||
schedulertesting.FakePDBLister{},
|
informerFactory.Policy().V1beta1().PodDisruptionBudgets().Lister(),
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
schedulerapi.DefaultPercentageOfNodesToScore,
|
schedulerapi.DefaultPercentageOfNodesToScore,
|
||||||
@ -2078,6 +2091,9 @@ func TestPreempt(t *testing.T) {
|
|||||||
labelKeys := []string{"hostname", "zone", "region"}
|
labelKeys := []string{"hostname", "zone", "region"}
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
client := clientsetfake.NewSimpleClientset()
|
||||||
|
informerFactory := informers.NewSharedInformerFactory(client, 0)
|
||||||
|
|
||||||
t.Logf("===== Running test %v", t.Name())
|
t.Logf("===== Running test %v", t.Name())
|
||||||
stop := make(chan struct{})
|
stop := make(chan struct{})
|
||||||
cache := internalcache.New(time.Duration(0), stop)
|
cache := internalcache.New(time.Duration(0), stop)
|
||||||
@ -2130,8 +2146,8 @@ func TestPreempt(t *testing.T) {
|
|||||||
emptyFramework,
|
emptyFramework,
|
||||||
extenders,
|
extenders,
|
||||||
nil,
|
nil,
|
||||||
schedulertesting.FakePersistentVolumeClaimLister{},
|
informerFactory.Core().V1().PersistentVolumeClaims().Lister(),
|
||||||
schedulertesting.FakePDBLister{},
|
informerFactory.Policy().V1beta1().PodDisruptionBudgets().Lister(),
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
schedulerapi.DefaultPercentageOfNodesToScore,
|
schedulerapi.DefaultPercentageOfNodesToScore,
|
||||||
|
@ -23,11 +23,11 @@ go_test(
|
|||||||
"//pkg/scheduler/framework/plugins/migration:go_default_library",
|
"//pkg/scheduler/framework/plugins/migration:go_default_library",
|
||||||
"//pkg/scheduler/framework/v1alpha1:go_default_library",
|
"//pkg/scheduler/framework/v1alpha1:go_default_library",
|
||||||
"//pkg/scheduler/nodeinfo:go_default_library",
|
"//pkg/scheduler/nodeinfo:go_default_library",
|
||||||
"//pkg/scheduler/testing:go_default_library",
|
|
||||||
"//pkg/util/parsers:go_default_library",
|
"//pkg/util/parsers:go_default_library",
|
||||||
"//staging/src/k8s.io/api/apps/v1:go_default_library",
|
|
||||||
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||||
|
"//staging/src/k8s.io/client-go/informers:go_default_library",
|
||||||
|
"//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -21,14 +21,14 @@ import (
|
|||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1"
|
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/client-go/informers"
|
||||||
|
clientsetfake "k8s.io/client-go/kubernetes/fake"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithm/priorities"
|
"k8s.io/kubernetes/pkg/scheduler/algorithm/priorities"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/migration"
|
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/migration"
|
||||||
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
|
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
|
||||||
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
|
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
|
||||||
schedulertesting "k8s.io/kubernetes/pkg/scheduler/testing"
|
|
||||||
"k8s.io/kubernetes/pkg/util/parsers"
|
"k8s.io/kubernetes/pkg/util/parsers"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -36,6 +36,7 @@ func TestImageLocalityPriority(t *testing.T) {
|
|||||||
test40250 := v1.PodSpec{
|
test40250 := v1.PodSpec{
|
||||||
Containers: []v1.Container{
|
Containers: []v1.Container{
|
||||||
{
|
{
|
||||||
|
|
||||||
Image: "gcr.io/40",
|
Image: "gcr.io/40",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -187,11 +188,15 @@ func TestImageLocalityPriority(t *testing.T) {
|
|||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
client := clientsetfake.NewSimpleClientset()
|
||||||
|
informerFactory := informers.NewSharedInformerFactory(client, 0)
|
||||||
|
|
||||||
metaDataProducer := priorities.NewPriorityMetadataFactory(
|
metaDataProducer := priorities.NewPriorityMetadataFactory(
|
||||||
schedulertesting.FakeServiceLister([]*v1.Service{}),
|
informerFactory.Core().V1().Services().Lister(),
|
||||||
schedulertesting.FakeControllerLister([]*v1.ReplicationController{}),
|
informerFactory.Core().V1().ReplicationControllers().Lister(),
|
||||||
schedulertesting.FakeReplicaSetLister([]*apps.ReplicaSet{}),
|
informerFactory.Apps().V1().ReplicaSets().Lister(),
|
||||||
schedulertesting.FakeStatefulSetLister([]*apps.StatefulSet{}))
|
informerFactory.Apps().V1().StatefulSets().Lister(),
|
||||||
|
)
|
||||||
|
|
||||||
nodeNameToInfo := schedulernodeinfo.CreateNodeNameToInfoMap(nil, test.nodes)
|
nodeNameToInfo := schedulernodeinfo.CreateNodeNameToInfoMap(nil, test.nodes)
|
||||||
|
|
||||||
|
@ -14,9 +14,9 @@ go_library(
|
|||||||
"//pkg/scheduler/algorithm:go_default_library",
|
"//pkg/scheduler/algorithm:go_default_library",
|
||||||
"//staging/src/k8s.io/api/apps/v1:go_default_library",
|
"//staging/src/k8s.io/api/apps/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/api/policy/v1beta1:go_default_library",
|
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
|
||||||
|
"//staging/src/k8s.io/client-go/listers/apps/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/client-go/listers/core/v1:go_default_library",
|
"//staging/src/k8s.io/client-go/listers/core/v1:go_default_library",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
@ -19,11 +19,11 @@ package testing
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
apps "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
"k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
policy "k8s.io/api/policy/v1beta1"
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/labels"
|
"k8s.io/apimachinery/pkg/labels"
|
||||||
|
appslisters "k8s.io/client-go/listers/apps/v1"
|
||||||
corelisters "k8s.io/client-go/listers/core/v1"
|
corelisters "k8s.io/client-go/listers/core/v1"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithm"
|
"k8s.io/kubernetes/pkg/scheduler/algorithm"
|
||||||
)
|
)
|
||||||
@ -53,11 +53,16 @@ func (f FakePodLister) FilteredList(podFilter algorithm.PodFilter, s labels.Sele
|
|||||||
return selected, nil
|
return selected, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ algorithm.ServiceLister = &FakeServiceLister{}
|
var _ corelisters.ServiceLister = &FakeServiceLister{}
|
||||||
|
|
||||||
// FakeServiceLister implements ServiceLister on []v1.Service for test purposes.
|
// FakeServiceLister implements ServiceLister on []v1.Service for test purposes.
|
||||||
type FakeServiceLister []*v1.Service
|
type FakeServiceLister []*v1.Service
|
||||||
|
|
||||||
|
// Services returns nil.
|
||||||
|
func (f FakeServiceLister) Services(namespace string) corelisters.ServiceNamespaceLister {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// List returns v1.ServiceList, the list of all services.
|
// List returns v1.ServiceList, the list of all services.
|
||||||
func (f FakeServiceLister) List(labels.Selector) ([]*v1.Service, error) {
|
func (f FakeServiceLister) List(labels.Selector) ([]*v1.Service, error) {
|
||||||
return f, nil
|
return f, nil
|
||||||
@ -81,7 +86,7 @@ func (f FakeServiceLister) GetPodServices(pod *v1.Pod) (services []*v1.Service,
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ algorithm.ControllerLister = &FakeControllerLister{}
|
var _ corelisters.ReplicationControllerLister = &FakeControllerLister{}
|
||||||
|
|
||||||
// FakeControllerLister implements ControllerLister on []v1.ReplicationController for test purposes.
|
// FakeControllerLister implements ControllerLister on []v1.ReplicationController for test purposes.
|
||||||
type FakeControllerLister []*v1.ReplicationController
|
type FakeControllerLister []*v1.ReplicationController
|
||||||
@ -112,13 +117,23 @@ func (f FakeControllerLister) GetPodControllers(pod *v1.Pod) (controllers []*v1.
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ algorithm.ReplicaSetLister = &FakeReplicaSetLister{}
|
// ReplicationControllers returns nil
|
||||||
|
func (f FakeControllerLister) ReplicationControllers(namespace string) corelisters.ReplicationControllerNamespaceLister {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ appslisters.ReplicaSetLister = &FakeReplicaSetLister{}
|
||||||
|
|
||||||
// FakeReplicaSetLister implements ControllerLister on []extensions.ReplicaSet for test purposes.
|
// FakeReplicaSetLister implements ControllerLister on []extensions.ReplicaSet for test purposes.
|
||||||
type FakeReplicaSetLister []*apps.ReplicaSet
|
type FakeReplicaSetLister []*appsv1.ReplicaSet
|
||||||
|
|
||||||
|
// List returns replica sets.
|
||||||
|
func (f FakeReplicaSetLister) List(labels.Selector) ([]*appsv1.ReplicaSet, error) {
|
||||||
|
return f, nil
|
||||||
|
}
|
||||||
|
|
||||||
// GetPodReplicaSets gets the ReplicaSets that have the selector that match the labels on the given pod
|
// GetPodReplicaSets gets the ReplicaSets that have the selector that match the labels on the given pod
|
||||||
func (f FakeReplicaSetLister) GetPodReplicaSets(pod *v1.Pod) (rss []*apps.ReplicaSet, err error) {
|
func (f FakeReplicaSetLister) GetPodReplicaSets(pod *v1.Pod) (rss []*appsv1.ReplicaSet, err error) {
|
||||||
var selector labels.Selector
|
var selector labels.Selector
|
||||||
|
|
||||||
for _, rs := range f {
|
for _, rs := range f {
|
||||||
@ -141,13 +156,23 @@ func (f FakeReplicaSetLister) GetPodReplicaSets(pod *v1.Pod) (rss []*apps.Replic
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ algorithm.StatefulSetLister = &FakeStatefulSetLister{}
|
// ReplicaSets returns nil
|
||||||
|
func (f FakeReplicaSetLister) ReplicaSets(namespace string) appslisters.ReplicaSetNamespaceLister {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// FakeStatefulSetLister implements ControllerLister on []apps.StatefulSet for testing purposes.
|
var _ appslisters.StatefulSetLister = &FakeStatefulSetLister{}
|
||||||
type FakeStatefulSetLister []*apps.StatefulSet
|
|
||||||
|
// FakeStatefulSetLister implements ControllerLister on []appsv1.StatefulSet for testing purposes.
|
||||||
|
type FakeStatefulSetLister []*appsv1.StatefulSet
|
||||||
|
|
||||||
|
// List returns stateful sets.
|
||||||
|
func (f FakeStatefulSetLister) List(labels.Selector) ([]*appsv1.StatefulSet, error) {
|
||||||
|
return f, nil
|
||||||
|
}
|
||||||
|
|
||||||
// GetPodStatefulSets gets the StatefulSets that have the selector that match the labels on the given pod.
|
// GetPodStatefulSets gets the StatefulSets that have the selector that match the labels on the given pod.
|
||||||
func (f FakeStatefulSetLister) GetPodStatefulSets(pod *v1.Pod) (sss []*apps.StatefulSet, err error) {
|
func (f FakeStatefulSetLister) GetPodStatefulSets(pod *v1.Pod) (sss []*appsv1.StatefulSet, err error) {
|
||||||
var selector labels.Selector
|
var selector labels.Selector
|
||||||
|
|
||||||
for _, ss := range f {
|
for _, ss := range f {
|
||||||
@ -168,6 +193,11 @@ func (f FakeStatefulSetLister) GetPodStatefulSets(pod *v1.Pod) (sss []*apps.Stat
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StatefulSets returns nil
|
||||||
|
func (f FakeStatefulSetLister) StatefulSets(namespace string) appslisters.StatefulSetNamespaceLister {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// FakePersistentVolumeClaimLister implements PersistentVolumeClaimLister on []*v1.PersistentVolumeClaim for test purposes.
|
// FakePersistentVolumeClaimLister implements PersistentVolumeClaimLister on []*v1.PersistentVolumeClaim for test purposes.
|
||||||
type FakePersistentVolumeClaimLister []*v1.PersistentVolumeClaim
|
type FakePersistentVolumeClaimLister []*v1.PersistentVolumeClaim
|
||||||
|
|
||||||
@ -204,11 +234,3 @@ func (f *fakePersistentVolumeClaimNamespaceLister) Get(name string) (*v1.Persist
|
|||||||
func (f fakePersistentVolumeClaimNamespaceLister) List(selector labels.Selector) (ret []*v1.PersistentVolumeClaim, err error) {
|
func (f fakePersistentVolumeClaimNamespaceLister) List(selector labels.Selector) (ret []*v1.PersistentVolumeClaim, err error) {
|
||||||
return nil, fmt.Errorf("not implemented")
|
return nil, fmt.Errorf("not implemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
// FakePDBLister implements PDBLister on a slice of PodDisruptionBudgets for test purposes.
|
|
||||||
type FakePDBLister []*policy.PodDisruptionBudget
|
|
||||||
|
|
||||||
// List returns a list of PodDisruptionBudgets.
|
|
||||||
func (f FakePDBLister) List(labels.Selector) ([]*policy.PodDisruptionBudget, error) {
|
|
||||||
return f, nil
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user