diff --git a/pkg/controller/nodelifecycle/node_lifecycle_controller.go b/pkg/controller/nodelifecycle/node_lifecycle_controller.go index f721145b773..4784e404894 100644 --- a/pkg/controller/nodelifecycle/node_lifecycle_controller.go +++ b/pkg/controller/nodelifecycle/node_lifecycle_controller.go @@ -206,6 +206,8 @@ type Controller struct { nodeLister corelisters.NodeLister nodeInformerSynced cache.InformerSynced + getPodsAssignedToNode func(nodeName string) ([]v1.Pod, error) + recorder record.EventRecorder // Value controlling Controller monitoring period, i.e. how often does Controller @@ -363,42 +365,42 @@ func NewNodeLifecycleController( }, }) nc.podInformerSynced = podInformer.Informer().HasSynced + podInformer.Informer().AddIndexers(cache.Indexers{ + nodeNameKeyIndex: func(obj interface{}) ([]string, error) { + pod, ok := obj.(*v1.Pod) + if !ok { + return []string{}, nil + } + if len(pod.Spec.NodeName) == 0 { + return []string{}, nil + } + return []string{pod.Spec.NodeName}, nil + }, + }) + + podIndexer := podInformer.Informer().GetIndexer() + nc.getPodsAssignedToNode = func(nodeName string) ([]v1.Pod, error) { + objs, err := podIndexer.ByIndex(nodeNameKeyIndex, nodeName) + if err != nil { + return nil, err + } + pods := make([]v1.Pod, 0, len(objs)) + for _, obj := range objs { + pod, ok := obj.(*v1.Pod) + if !ok { + continue + } + pods = append(pods, *pod) + } + return pods, nil + } if nc.runTaintManager { - podInformer.Informer().AddIndexers(cache.Indexers{ - nodeNameKeyIndex: func(obj interface{}) ([]string, error) { - pod, ok := obj.(*v1.Pod) - if !ok { - return []string{}, nil - } - if len(pod.Spec.NodeName) == 0 { - return []string{}, nil - } - return []string{pod.Spec.NodeName}, nil - }, - }) - - podIndexer := podInformer.Informer().GetIndexer() podLister := podInformer.Lister() podGetter := func(name, namespace string) (*v1.Pod, error) { return podLister.Pods(namespace).Get(name) } - podByNodeNameLister := func(nodeName string) ([]v1.Pod, error) { - objs, err := podIndexer.ByIndex(nodeNameKeyIndex, nodeName) - if err != nil { - return nil, err - } - pods := make([]v1.Pod, 0, len(objs)) - for _, obj := range objs { - pod, ok := obj.(*v1.Pod) - if !ok { - continue - } - pods = append(pods, *pod) - } - return pods, nil - } nodeLister := nodeInformer.Lister() nodeGetter := func(name string) (*v1.Node, error) { return nodeLister.Get(name) } - nc.taintManager = scheduler.NewNoExecuteTaintManager(kubeClient, podGetter, nodeGetter, podByNodeNameLister) + nc.taintManager = scheduler.NewNoExecuteTaintManager(kubeClient, podGetter, nodeGetter, nc.getPodsAssignedToNode) nodeInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ AddFunc: nodeutil.CreateAddNodeHandler(func(node *v1.Node) error { nc.taintManager.NodeUpdated(nil, node)