From c3a80719a21d9b0d90a8d84a54f8045343c51da9 Mon Sep 17 00:00:00 2001 From: Avesh Agarwal Date: Fri, 10 Mar 2017 15:15:00 -0500 Subject: [PATCH] Fix taint based pod eviction for clusters where controller manager is not running with --allocate-node-cidrs set. --- pkg/controller/node/nodecontroller.go | 47 +++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/pkg/controller/node/nodecontroller.go b/pkg/controller/node/nodecontroller.go index d7efe35cd8b..eba9ff6e352 100644 --- a/pkg/controller/node/nodecontroller.go +++ b/pkg/controller/node/nodecontroller.go @@ -415,6 +415,53 @@ func NewNodeController( } }, } + } else { + nodeEventHandlerFuncs = cache.ResourceEventHandlerFuncs{ + AddFunc: func(originalObj interface{}) { + obj, err := api.Scheme.DeepCopy(originalObj) + if err != nil { + utilruntime.HandleError(err) + return + } + node := obj.(*v1.Node) + if nc.taintManager != nil { + nc.taintManager.NodeUpdated(nil, node) + } + }, + UpdateFunc: func(oldNode, newNode interface{}) { + node := newNode.(*v1.Node) + prevNode := oldNode.(*v1.Node) + if nc.taintManager != nil { + nc.taintManager.NodeUpdated(prevNode, node) + + } + }, + DeleteFunc: func(originalObj interface{}) { + obj, err := api.Scheme.DeepCopy(originalObj) + if err != nil { + utilruntime.HandleError(err) + return + } + + node, isNode := obj.(*v1.Node) + // We can get DeletedFinalStateUnknown instead of *v1.Node here and we need to handle that correctly. #34692 + if !isNode { + deletedState, ok := obj.(cache.DeletedFinalStateUnknown) + if !ok { + glog.Errorf("Received unexpected object: %v", obj) + return + } + node, ok = deletedState.Obj.(*v1.Node) + if !ok { + glog.Errorf("DeletedFinalStateUnknown contained non-Node object: %v", deletedState.Obj) + return + } + } + if nc.taintManager != nil { + nc.taintManager.NodeUpdated(node, nil) + } + }, + } } if nc.runTaintManager {