1
0
mirror of https://github.com/kubernetes-sigs/descheduler.git synced 2026-01-28 06:29:29 +01:00

fix sharedInformerFactory register

This commit is contained in:
sunxiaofei
2022-09-22 16:02:13 +08:00
parent 3e385d9504
commit c10e6d6c12
18 changed files with 59 additions and 63 deletions

View File

@@ -29,10 +29,10 @@ import (
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/util/wait"
"k8s.io/client-go/informers" "k8s.io/client-go/informers"
corev1informers "k8s.io/client-go/informers/core/v1"
schedulingv1informers "k8s.io/client-go/informers/scheduling/v1"
clientset "k8s.io/client-go/kubernetes" clientset "k8s.io/client-go/kubernetes"
fakeclientset "k8s.io/client-go/kubernetes/fake" fakeclientset "k8s.io/client-go/kubernetes/fake"
listersv1 "k8s.io/client-go/listers/core/v1"
schedulingv1 "k8s.io/client-go/listers/scheduling/v1"
core "k8s.io/client-go/testing" core "k8s.io/client-go/testing"
"sigs.k8s.io/descheduler/cmd/descheduler/app/options" "sigs.k8s.io/descheduler/cmd/descheduler/app/options"
@@ -93,10 +93,10 @@ type strategyFunction func(ctx context.Context, client clientset.Interface, stra
func cachedClient( func cachedClient(
realClient clientset.Interface, realClient clientset.Interface,
podInformer corev1informers.PodInformer, podLister listersv1.PodLister,
nodeInformer corev1informers.NodeInformer, nodeLister listersv1.NodeLister,
namespaceInformer corev1informers.NamespaceInformer, namespaceLister listersv1.NamespaceLister,
priorityClassInformer schedulingv1informers.PriorityClassInformer, priorityClassLister schedulingv1.PriorityClassLister,
) (clientset.Interface, error) { ) (clientset.Interface, error) {
fakeClient := fakeclientset.NewSimpleClientset() fakeClient := fakeclientset.NewSimpleClientset()
// simulate a pod eviction by deleting a pod // simulate a pod eviction by deleting a pod
@@ -120,7 +120,7 @@ func cachedClient(
}) })
klog.V(3).Infof("Pulling resources for the cached client from the cluster") klog.V(3).Infof("Pulling resources for the cached client from the cluster")
pods, err := podInformer.Lister().List(labels.Everything()) pods, err := podLister.List(labels.Everything())
if err != nil { if err != nil {
return nil, fmt.Errorf("unable to list pods: %v", err) return nil, fmt.Errorf("unable to list pods: %v", err)
} }
@@ -131,7 +131,7 @@ func cachedClient(
} }
} }
nodes, err := nodeInformer.Lister().List(labels.Everything()) nodes, err := nodeLister.List(labels.Everything())
if err != nil { if err != nil {
return nil, fmt.Errorf("unable to list nodes: %v", err) return nil, fmt.Errorf("unable to list nodes: %v", err)
} }
@@ -142,7 +142,7 @@ func cachedClient(
} }
} }
namespaces, err := namespaceInformer.Lister().List(labels.Everything()) namespaces, err := namespaceLister.List(labels.Everything())
if err != nil { if err != nil {
return nil, fmt.Errorf("unable to list namespaces: %v", err) return nil, fmt.Errorf("unable to list namespaces: %v", err)
} }
@@ -153,7 +153,7 @@ func cachedClient(
} }
} }
priorityClasses, err := priorityClassInformer.Lister().List(labels.Everything()) priorityClasses, err := priorityClassLister.List(labels.Everything())
if err != nil { if err != nil {
return nil, fmt.Errorf("unable to list priorityclasses: %v", err) return nil, fmt.Errorf("unable to list priorityclasses: %v", err)
} }
@@ -227,18 +227,15 @@ func (hi *handleImpl) Evictor() framework.Evictor {
func RunDeschedulerStrategies(ctx context.Context, rs *options.DeschedulerServer, deschedulerPolicy *api.DeschedulerPolicy, evictionPolicyGroupVersion string) error { func RunDeschedulerStrategies(ctx context.Context, rs *options.DeschedulerServer, deschedulerPolicy *api.DeschedulerPolicy, evictionPolicyGroupVersion string) error {
sharedInformerFactory := informers.NewSharedInformerFactory(rs.Client, 0) sharedInformerFactory := informers.NewSharedInformerFactory(rs.Client, 0)
nodeInformer := sharedInformerFactory.Core().V1().Nodes() podInformer := sharedInformerFactory.Core().V1().Pods().Informer()
podInformer := sharedInformerFactory.Core().V1().Pods() podLister := sharedInformerFactory.Core().V1().Pods().Lister()
namespaceInformer := sharedInformerFactory.Core().V1().Namespaces() nodeLister := sharedInformerFactory.Core().V1().Nodes().Lister()
priorityClassInformer := sharedInformerFactory.Scheduling().V1().PriorityClasses() namespaceLister := sharedInformerFactory.Core().V1().Namespaces().Lister()
priorityClassLister := sharedInformerFactory.Scheduling().V1().PriorityClasses().Lister()
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
// create the informers
namespaceInformer.Informer()
priorityClassInformer.Informer()
getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer) getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer)
if err != nil { if err != nil {
return fmt.Errorf("build get pods assigned to node function error: %v", err) return fmt.Errorf("build get pods assigned to node function error: %v", err)
@@ -302,7 +299,7 @@ func RunDeschedulerStrategies(ctx context.Context, rs *options.DeschedulerServer
defer eventBroadcaster.Shutdown() defer eventBroadcaster.Shutdown()
wait.NonSlidingUntil(func() { wait.NonSlidingUntil(func() {
nodes, err := nodeutil.ReadyNodes(ctx, rs.Client, nodeInformer, nodeSelector) nodes, err := nodeutil.ReadyNodes(ctx, rs.Client, nodeLister, nodeSelector)
if err != nil { if err != nil {
klog.V(1).InfoS("Unable to get ready nodes", "err", err) klog.V(1).InfoS("Unable to get ready nodes", "err", err)
cancel() cancel()
@@ -322,14 +319,14 @@ func RunDeschedulerStrategies(ctx context.Context, rs *options.DeschedulerServer
if rs.DryRun { if rs.DryRun {
klog.V(3).Infof("Building a cached client from the cluster for the dry run") klog.V(3).Infof("Building a cached client from the cluster for the dry run")
// Create a new cache so we start from scratch without any leftovers // Create a new cache so we start from scratch without any leftovers
fakeClient, err := cachedClient(rs.Client, podInformer, nodeInformer, namespaceInformer, priorityClassInformer) fakeClient, err := cachedClient(rs.Client, podLister, nodeLister, namespaceLister, priorityClassLister)
if err != nil { if err != nil {
klog.Error(err) klog.Error(err)
return return
} }
fakeSharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0) fakeSharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0)
getPodsAssignedToNode, err = podutil.BuildGetPodsAssignedToNodeFunc(fakeSharedInformerFactory.Core().V1().Pods()) getPodsAssignedToNode, err = podutil.BuildGetPodsAssignedToNodeFunc(fakeSharedInformerFactory.Core().V1().Pods().Informer())
if err != nil { if err != nil {
klog.Errorf("build get pods assigned to node function error: %v", err) klog.Errorf("build get pods assigned to node function error: %v", err)
return return

View File

@@ -24,8 +24,8 @@ import (
"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/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/labels"
coreinformers "k8s.io/client-go/informers/core/v1"
clientset "k8s.io/client-go/kubernetes" clientset "k8s.io/client-go/kubernetes"
listersv1 "k8s.io/client-go/listers/core/v1"
"k8s.io/klog/v2" "k8s.io/klog/v2"
podutil "sigs.k8s.io/descheduler/pkg/descheduler/pod" podutil "sigs.k8s.io/descheduler/pkg/descheduler/pod"
"sigs.k8s.io/descheduler/pkg/utils" "sigs.k8s.io/descheduler/pkg/utils"
@@ -33,7 +33,7 @@ import (
// ReadyNodes returns ready nodes irrespective of whether they are // ReadyNodes returns ready nodes irrespective of whether they are
// schedulable or not. // schedulable or not.
func ReadyNodes(ctx context.Context, client clientset.Interface, nodeInformer coreinformers.NodeInformer, nodeSelector string) ([]*v1.Node, error) { func ReadyNodes(ctx context.Context, client clientset.Interface, nodeLister listersv1.NodeLister, nodeSelector string) ([]*v1.Node, error) {
ns, err := labels.Parse(nodeSelector) ns, err := labels.Parse(nodeSelector)
if err != nil { if err != nil {
return []*v1.Node{}, err return []*v1.Node{}, err
@@ -41,7 +41,7 @@ func ReadyNodes(ctx context.Context, client clientset.Interface, nodeInformer co
var nodes []*v1.Node var nodes []*v1.Node
// err is defined above // err is defined above
if nodes, err = nodeInformer.Lister().List(ns); err != nil { if nodes, err = nodeLister.List(ns); err != nil {
return []*v1.Node{}, err return []*v1.Node{}, err
} }

View File

@@ -70,14 +70,14 @@ func TestReadyNodesWithNodeSelector(t *testing.T) {
nodeSelector := "type=compute" nodeSelector := "type=compute"
sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0) sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0)
nodeInformer := sharedInformerFactory.Core().V1().Nodes() nodeLister := sharedInformerFactory.Core().V1().Nodes().Lister()
stopChannel := make(chan struct{}) stopChannel := make(chan struct{})
sharedInformerFactory.Start(stopChannel) sharedInformerFactory.Start(stopChannel)
sharedInformerFactory.WaitForCacheSync(stopChannel) sharedInformerFactory.WaitForCacheSync(stopChannel)
defer close(stopChannel) defer close(stopChannel)
nodes, _ := ReadyNodes(ctx, fakeClient, nodeInformer, nodeSelector) nodes, _ := ReadyNodes(ctx, fakeClient, nodeLister, nodeSelector)
if nodes[0].Name != "node1" { if nodes[0].Name != "node1" {
t.Errorf("Expected node1, got %s", nodes[0].Name) t.Errorf("Expected node1, got %s", nodes[0].Name)
@@ -207,7 +207,7 @@ func TestPodFitsCurrentNode(t *testing.T) {
fakeClient := fake.NewSimpleClientset(objs...) fakeClient := fake.NewSimpleClientset(objs...)
sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0) sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0)
podInformer := sharedInformerFactory.Core().V1().Pods() podInformer := sharedInformerFactory.Core().V1().Pods().Informer()
getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer) getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer)
if err != nil { if err != nil {
@@ -737,7 +737,7 @@ func TestPodFitsAnyOtherNode(t *testing.T) {
fakeClient := fake.NewSimpleClientset(objs...) fakeClient := fake.NewSimpleClientset(objs...)
sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0) sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0)
podInformer := sharedInformerFactory.Core().V1().Pods() podInformer := sharedInformerFactory.Core().V1().Pods().Informer()
getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer) getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer)
if err != nil { if err != nil {

View File

@@ -23,7 +23,6 @@ import (
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/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"
coreinformers "k8s.io/client-go/informers/core/v1"
"k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/cache"
"sigs.k8s.io/descheduler/pkg/utils" "sigs.k8s.io/descheduler/pkg/utils"
@@ -118,9 +117,9 @@ func (o *Options) BuildFilterFunc() (FilterFunc, error) {
// BuildGetPodsAssignedToNodeFunc establishes an indexer to map the pods and their assigned nodes. // BuildGetPodsAssignedToNodeFunc establishes an indexer to map the pods and their assigned nodes.
// It returns a function to help us get all the pods that assigned to a node based on the indexer. // It returns a function to help us get all the pods that assigned to a node based on the indexer.
func BuildGetPodsAssignedToNodeFunc(podInformer coreinformers.PodInformer) (GetPodsAssignedToNodeFunc, error) { func BuildGetPodsAssignedToNodeFunc(podInformer cache.SharedIndexInformer) (GetPodsAssignedToNodeFunc, error) {
// Establish an indexer to map the pods and their assigned nodes. // Establish an indexer to map the pods and their assigned nodes.
err := podInformer.Informer().AddIndexers(cache.Indexers{ err := podInformer.AddIndexers(cache.Indexers{
nodeNameKeyIndex: func(obj interface{}) ([]string, error) { nodeNameKeyIndex: func(obj interface{}) ([]string, error) {
pod, ok := obj.(*v1.Pod) pod, ok := obj.(*v1.Pod)
if !ok { if !ok {
@@ -137,7 +136,7 @@ func BuildGetPodsAssignedToNodeFunc(podInformer coreinformers.PodInformer) (GetP
} }
// The indexer helps us get all the pods that assigned to a node. // The indexer helps us get all the pods that assigned to a node.
podIndexer := podInformer.Informer().GetIndexer() podIndexer := podInformer.GetIndexer()
getPodsAssignedToNode := func(nodeName string, filter FilterFunc) ([]*v1.Pod, error) { getPodsAssignedToNode := func(nodeName string, filter FilterFunc) ([]*v1.Pod, error) {
objs, err := podIndexer.ByIndex(nodeNameKeyIndex, nodeName) objs, err := podIndexer.ByIndex(nodeNameKeyIndex, nodeName)
if err != nil { if err != nil {

View File

@@ -94,7 +94,7 @@ func TestListPodsOnANode(t *testing.T) {
fakeClient := fake.NewSimpleClientset(objs...) fakeClient := fake.NewSimpleClientset(objs...)
sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0) sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0)
podInformer := sharedInformerFactory.Core().V1().Pods() podInformer := sharedInformerFactory.Core().V1().Pods().Informer()
getPodsAssignedToNode, err := BuildGetPodsAssignedToNodeFunc(podInformer) getPodsAssignedToNode, err := BuildGetPodsAssignedToNodeFunc(podInformer)
if err != nil { if err != nil {

View File

@@ -149,7 +149,7 @@ func (d *DefaultEvictor) Name() string {
func (d *DefaultEvictor) PreEvictionFilter(pod *v1.Pod) bool { func (d *DefaultEvictor) PreEvictionFilter(pod *v1.Pod) bool {
defaultEvictorArgs := d.args.(*DefaultEvictorArgs) defaultEvictorArgs := d.args.(*DefaultEvictorArgs)
if defaultEvictorArgs.NodeFit { if defaultEvictorArgs.NodeFit {
nodes, err := nodeutil.ReadyNodes(context.TODO(), d.handle.ClientSet(), d.handle.SharedInformerFactory().Core().V1().Nodes(), defaultEvictorArgs.NodeSelector) nodes, err := nodeutil.ReadyNodes(context.TODO(), d.handle.ClientSet(), d.handle.SharedInformerFactory().Core().V1().Nodes().Lister(), defaultEvictorArgs.NodeSelector)
if err != nil { if err != nil {
klog.V(1).ErrorS(fmt.Errorf("Pod fails the following checks"), "pod", klog.KObj(pod)) klog.V(1).ErrorS(fmt.Errorf("Pod fails the following checks"), "pod", klog.KObj(pod))
return false return false

View File

@@ -316,7 +316,7 @@ func TestDefaultEvictorPreEvictionFilter(t *testing.T) {
fakeClient := fake.NewSimpleClientset(objs...) fakeClient := fake.NewSimpleClientset(objs...)
sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0) sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0)
podInformer := sharedInformerFactory.Core().V1().Pods() podInformer := sharedInformerFactory.Core().V1().Pods().Informer()
getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer) getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer)
if err != nil { if err != nil {
@@ -722,7 +722,7 @@ func TestDefaultEvictorFilter(t *testing.T) {
fakeClient := fake.NewSimpleClientset(objs...) fakeClient := fake.NewSimpleClientset(objs...)
sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0) sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0)
podInformer := sharedInformerFactory.Core().V1().Pods() podInformer := sharedInformerFactory.Core().V1().Pods().Informer()
getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer) getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer)
if err != nil { if err != nil {

View File

@@ -451,7 +451,7 @@ func TestHighNodeUtilization(t *testing.T) {
fakeClient := fake.NewSimpleClientset(objs...) fakeClient := fake.NewSimpleClientset(objs...)
sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0) sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0)
podInformer := sharedInformerFactory.Core().V1().Pods() podInformer := sharedInformerFactory.Core().V1().Pods().Informer()
getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer) getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer)
if err != nil { if err != nil {
@@ -625,7 +625,7 @@ func TestHighNodeUtilizationWithTaints(t *testing.T) {
fakeClient := fake.NewSimpleClientset(objs...) fakeClient := fake.NewSimpleClientset(objs...)
sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0) sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0)
podInformer := sharedInformerFactory.Core().V1().Pods() podInformer := sharedInformerFactory.Core().V1().Pods().Informer()
getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer) getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer)
if err != nil { if err != nil {

View File

@@ -717,7 +717,7 @@ func TestLowNodeUtilization(t *testing.T) {
fakeClient := fake.NewSimpleClientset(objs...) fakeClient := fake.NewSimpleClientset(objs...)
sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0) sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0)
podInformer := sharedInformerFactory.Core().V1().Pods() podInformer := sharedInformerFactory.Core().V1().Pods().Informer()
getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer) getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer)
if err != nil { if err != nil {
@@ -911,7 +911,7 @@ func TestLowNodeUtilizationWithTaints(t *testing.T) {
fakeClient := fake.NewSimpleClientset(objs...) fakeClient := fake.NewSimpleClientset(objs...)
sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0) sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0)
podInformer := sharedInformerFactory.Core().V1().Pods() podInformer := sharedInformerFactory.Core().V1().Pods().Informer()
getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer) getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer)
if err != nil { if err != nil {

View File

@@ -334,7 +334,7 @@ func TestPodLifeTime(t *testing.T) {
fakeClient := fake.NewSimpleClientset(objs...) fakeClient := fake.NewSimpleClientset(objs...)
sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0) sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0)
podInformer := sharedInformerFactory.Core().V1().Pods() podInformer := sharedInformerFactory.Core().V1().Pods().Informer()
getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer) getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer)
if err != nil { if err != nil {

View File

@@ -301,7 +301,7 @@ func TestFindDuplicatePods(t *testing.T) {
fakeClient := fake.NewSimpleClientset(objs...) fakeClient := fake.NewSimpleClientset(objs...)
sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0) sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0)
podInformer := sharedInformerFactory.Core().V1().Pods() podInformer := sharedInformerFactory.Core().V1().Pods().Informer()
getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer) getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer)
if err != nil { if err != nil {
@@ -751,7 +751,7 @@ func TestRemoveDuplicatesUniformly(t *testing.T) {
fakeClient := fake.NewSimpleClientset(objs...) fakeClient := fake.NewSimpleClientset(objs...)
sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0) sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0)
podInformer := sharedInformerFactory.Core().V1().Pods() podInformer := sharedInformerFactory.Core().V1().Pods().Informer()
getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer) getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer)
if err != nil { if err != nil {

View File

@@ -279,7 +279,7 @@ func TestRemoveFailedPods(t *testing.T) {
fakeClient := fake.NewSimpleClientset(objs...) fakeClient := fake.NewSimpleClientset(objs...)
sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0) sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0)
podInformer := sharedInformerFactory.Core().V1().Pods() podInformer := sharedInformerFactory.Core().V1().Pods().Informer()
getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer) getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer)
if err != nil { if err != nil {

View File

@@ -240,7 +240,7 @@ func TestRemovePodsHavingTooManyRestarts(t *testing.T) {
fakeClient := fake.NewSimpleClientset(objs...) fakeClient := fake.NewSimpleClientset(objs...)
sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0) sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0)
podInformer := sharedInformerFactory.Core().V1().Pods() podInformer := sharedInformerFactory.Core().V1().Pods().Informer()
getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer) getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer)
if err != nil { if err != nil {

View File

@@ -205,7 +205,7 @@ func TestPodAntiAffinity(t *testing.T) {
fakeClient := fake.NewSimpleClientset(objs...) fakeClient := fake.NewSimpleClientset(objs...)
sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0) sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0)
podInformer := sharedInformerFactory.Core().V1().Pods() podInformer := sharedInformerFactory.Core().V1().Pods().Informer()
getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer) getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer)
if err != nil { if err != nil {

View File

@@ -204,7 +204,7 @@ func TestRemovePodsViolatingNodeAffinity(t *testing.T) {
fakeClient := fake.NewSimpleClientset(objs...) fakeClient := fake.NewSimpleClientset(objs...)
sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0) sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0)
podInformer := sharedInformerFactory.Core().V1().Pods() podInformer := sharedInformerFactory.Core().V1().Pods().Informer()
getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer) getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer)
if err != nil { if err != nil {

View File

@@ -341,7 +341,7 @@ func TestDeletePodsViolatingNodeTaints(t *testing.T) {
fakeClient := fake.NewSimpleClientset(objs...) fakeClient := fake.NewSimpleClientset(objs...)
sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0) sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0)
podInformer := sharedInformerFactory.Core().V1().Pods() podInformer := sharedInformerFactory.Core().V1().Pods().Informer()
getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer) getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer)
if err != nil { if err != nil {

View File

@@ -1136,7 +1136,7 @@ func TestTopologySpreadConstraint(t *testing.T) {
fakeClient := fake.NewSimpleClientset(objs...) fakeClient := fake.NewSimpleClientset(objs...)
sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0) sharedInformerFactory := informers.NewSharedInformerFactory(fakeClient, 0)
podInformer := sharedInformerFactory.Core().V1().Pods() podInformer := sharedInformerFactory.Core().V1().Pods().Informer()
getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer) getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer)
if err != nil { if err != nil {

View File

@@ -34,8 +34,8 @@ import (
"k8s.io/apimachinery/pkg/util/uuid" "k8s.io/apimachinery/pkg/util/uuid"
"k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/util/wait"
"k8s.io/client-go/informers" "k8s.io/client-go/informers"
coreinformers "k8s.io/client-go/informers/core/v1"
clientset "k8s.io/client-go/kubernetes" clientset "k8s.io/client-go/kubernetes"
listersv1 "k8s.io/client-go/listers/core/v1"
"k8s.io/client-go/tools/events" "k8s.io/client-go/tools/events"
"k8s.io/utils/pointer" "k8s.io/utils/pointer"
"sigs.k8s.io/descheduler/cmd/descheduler/app/options" "sigs.k8s.io/descheduler/cmd/descheduler/app/options"
@@ -110,7 +110,7 @@ func RcByNameContainer(name, namespace string, replicas int32, labels map[string
} }
} }
func initializeClient(t *testing.T) (clientset.Interface, informers.SharedInformerFactory, coreinformers.NodeInformer, podutil.GetPodsAssignedToNodeFunc, chan struct{}) { func initializeClient(t *testing.T) (clientset.Interface, informers.SharedInformerFactory, listersv1.NodeLister, podutil.GetPodsAssignedToNodeFunc, chan struct{}) {
clientSet, err := client.CreateClient(os.Getenv("KUBECONFIG"), "") clientSet, err := client.CreateClient(os.Getenv("KUBECONFIG"), "")
if err != nil { if err != nil {
t.Errorf("Error during client creation with %v", err) t.Errorf("Error during client creation with %v", err)
@@ -119,8 +119,8 @@ func initializeClient(t *testing.T) (clientset.Interface, informers.SharedInform
stopChannel := make(chan struct{}) stopChannel := make(chan struct{})
sharedInformerFactory := informers.NewSharedInformerFactory(clientSet, 0) sharedInformerFactory := informers.NewSharedInformerFactory(clientSet, 0)
nodeInformer := sharedInformerFactory.Core().V1().Nodes() nodeLister := sharedInformerFactory.Core().V1().Nodes().Lister()
podInformer := sharedInformerFactory.Core().V1().Pods() podInformer := sharedInformerFactory.Core().V1().Pods().Informer()
getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer) getPodsAssignedToNode, err := podutil.BuildGetPodsAssignedToNodeFunc(podInformer)
if err != nil { if err != nil {
@@ -130,18 +130,18 @@ func initializeClient(t *testing.T) (clientset.Interface, informers.SharedInform
sharedInformerFactory.Start(stopChannel) sharedInformerFactory.Start(stopChannel)
sharedInformerFactory.WaitForCacheSync(stopChannel) sharedInformerFactory.WaitForCacheSync(stopChannel)
waitForNodesReady(context.Background(), t, clientSet, nodeInformer) waitForNodesReady(context.Background(), t, clientSet, nodeLister)
return clientSet, sharedInformerFactory, nodeInformer, getPodsAssignedToNode, stopChannel return clientSet, sharedInformerFactory, nodeLister, getPodsAssignedToNode, stopChannel
} }
func waitForNodesReady(ctx context.Context, t *testing.T, clientSet clientset.Interface, nodeInformer coreinformers.NodeInformer) { func waitForNodesReady(ctx context.Context, t *testing.T, clientSet clientset.Interface, nodeLister listersv1.NodeLister) {
if err := wait.PollImmediate(5*time.Second, 30*time.Second, func() (bool, error) { if err := wait.PollImmediate(5*time.Second, 30*time.Second, func() (bool, error) {
nodeList, err := clientSet.CoreV1().Nodes().List(ctx, metav1.ListOptions{}) nodeList, err := clientSet.CoreV1().Nodes().List(ctx, metav1.ListOptions{})
if err != nil { if err != nil {
return false, err return false, err
} }
readyNodes, err := nodeutil.ReadyNodes(ctx, clientSet, nodeInformer, "") readyNodes, err := nodeutil.ReadyNodes(ctx, clientSet, nodeLister, "")
if err != nil { if err != nil {
return false, err return false, err
} }
@@ -160,7 +160,7 @@ func runPodLifetimePlugin(
ctx context.Context, ctx context.Context,
t *testing.T, t *testing.T,
clientset clientset.Interface, clientset clientset.Interface,
nodeInformer coreinformers.NodeInformer, nodeLister listersv1.NodeLister,
namespaces *deschedulerapi.Namespaces, namespaces *deschedulerapi.Namespaces,
priorityClass string, priorityClass string,
priority *int32, priority *int32,
@@ -174,7 +174,7 @@ func runPodLifetimePlugin(
t.Fatalf("%v", err) t.Fatalf("%v", err)
} }
nodes, err := nodeutil.ReadyNodes(ctx, clientset, nodeInformer, "") nodes, err := nodeutil.ReadyNodes(ctx, clientset, nodeLister, "")
if err != nil { if err != nil {
t.Fatalf("%v", err) t.Fatalf("%v", err)
} }
@@ -930,7 +930,7 @@ func TestPodLabelSelector(t *testing.T) {
func TestEvictAnnotation(t *testing.T) { func TestEvictAnnotation(t *testing.T) {
ctx := context.Background() ctx := context.Background()
clientSet, _, nodeInformer, getPodsAssignedToNode, stopCh := initializeClient(t) clientSet, _, nodeLister, getPodsAssignedToNode, stopCh := initializeClient(t)
defer close(stopCh) defer close(stopCh)
testNamespace := &v1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: "e2e-" + strings.ToLower(t.Name())}} testNamespace := &v1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: "e2e-" + strings.ToLower(t.Name())}}
@@ -975,7 +975,7 @@ func TestEvictAnnotation(t *testing.T) {
t.Logf("Existing pods: %v", initialPodNames) t.Logf("Existing pods: %v", initialPodNames)
t.Log("Running PodLifetime plugin") t.Log("Running PodLifetime plugin")
runPodLifetimePlugin(ctx, t, clientSet, nodeInformer, nil, "", nil, false, nil, nil, getPodsAssignedToNode) runPodLifetimePlugin(ctx, t, clientSet, nodeLister, nil, "", nil, false, nil, nil, getPodsAssignedToNode)
if err := wait.PollImmediate(5*time.Second, time.Minute, func() (bool, error) { if err := wait.PollImmediate(5*time.Second, time.Minute, func() (bool, error) {
podList, err = clientSet.CoreV1().Pods(rc.Namespace).List(ctx, metav1.ListOptions{LabelSelector: labels.SelectorFromSet(rc.Spec.Template.Labels).String()}) podList, err = clientSet.CoreV1().Pods(rc.Namespace).List(ctx, metav1.ListOptions{LabelSelector: labels.SelectorFromSet(rc.Spec.Template.Labels).String()})
@@ -1002,7 +1002,7 @@ func TestEvictAnnotation(t *testing.T) {
func TestPodLifeTimeOldestEvicted(t *testing.T) { func TestPodLifeTimeOldestEvicted(t *testing.T) {
ctx := context.Background() ctx := context.Background()
clientSet, _, nodeInformer, getPodsAssignedToNode, stopCh := initializeClient(t) clientSet, _, nodeLister, getPodsAssignedToNode, stopCh := initializeClient(t)
defer close(stopCh) defer close(stopCh)
testNamespace := &v1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: "e2e-" + strings.ToLower(t.Name())}} testNamespace := &v1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: "e2e-" + strings.ToLower(t.Name())}}
@@ -1041,7 +1041,7 @@ func TestPodLifeTimeOldestEvicted(t *testing.T) {
t.Log("Running PodLifetime plugin with maxPodsToEvictPerNamespace=1 to ensure only the oldest pod is evicted") t.Log("Running PodLifetime plugin with maxPodsToEvictPerNamespace=1 to ensure only the oldest pod is evicted")
var maxPodsToEvictPerNamespace uint = 1 var maxPodsToEvictPerNamespace uint = 1
runPodLifetimePlugin(ctx, t, clientSet, nodeInformer, nil, "", nil, false, &maxPodsToEvictPerNamespace, nil, getPodsAssignedToNode) runPodLifetimePlugin(ctx, t, clientSet, nodeLister, nil, "", nil, false, &maxPodsToEvictPerNamespace, nil, getPodsAssignedToNode)
t.Log("Finished PodLifetime plugin") t.Log("Finished PodLifetime plugin")
t.Logf("Wait for terminating pod to disappear") t.Logf("Wait for terminating pod to disappear")