diff --git a/pkg/controller/cloud/node_lifecycle_controller.go b/pkg/controller/cloud/node_lifecycle_controller.go index 078b2bf17c2..8509a712e55 100644 --- a/pkg/controller/cloud/node_lifecycle_controller.go +++ b/pkg/controller/cloud/node_lifecycle_controller.go @@ -147,24 +147,6 @@ func (c *CloudNodeLifecycleController) MonitorNodes() { continue } - // we need to check this first to get taint working in similar in all cloudproviders - // current problem is that shutdown nodes are not working in similar way ie. all cloudproviders - // does not delete node from kubernetes cluster when instance it is shutdown see issue #46442 - shutdown, err := shutdownInCloudProvider(context.TODO(), c.cloud, node) - if err != nil { - klog.Errorf("error checking if node %s is shutdown: %v", node.Name, err) - } - - if shutdown && err == nil { - // if node is shutdown add shutdown taint - err = controller.AddOrUpdateTaintOnNode(c.kubeClient, node.Name, ShutdownTaint) - if err != nil { - klog.Errorf("failed to apply shutdown taint to node %s, it may have been deleted.", node.Name) - } - // Continue checking the remaining nodes since the current one is shutdown. - continue - } - // At this point the node has NotReady status, we need to check if the node has been removed // from the cloud provider. If node cannot be found in cloudprovider, then delete the node exists, err := ensureNodeExistsByProviderID(context.TODO(), instances, node) @@ -173,26 +155,41 @@ func (c *CloudNodeLifecycleController) MonitorNodes() { continue } - if exists { - // Continue checking the remaining nodes since the current one is fine. - continue - } + if !exists { + // Current node does not exist, we should delete it, its taints do not matter anymore - klog.V(2).Infof("deleting node since it is no longer present in cloud provider: %s", node.Name) + klog.V(2).Infof("deleting node since it is no longer present in cloud provider: %s", node.Name) - ref := &v1.ObjectReference{ - Kind: "Node", - Name: node.Name, - UID: types.UID(node.UID), - Namespace: "", - } + ref := &v1.ObjectReference{ + Kind: "Node", + Name: node.Name, + UID: types.UID(node.UID), + Namespace: "", + } - c.recorder.Eventf(ref, v1.EventTypeNormal, - fmt.Sprintf("Deleting node %v because it does not exist in the cloud provider", node.Name), - "Node %s event: %s", node.Name, deleteNodeEvent) + c.recorder.Eventf(ref, v1.EventTypeNormal, + fmt.Sprintf("Deleting node %v because it does not exist in the cloud provider", node.Name), + "Node %s event: %s", node.Name, deleteNodeEvent) - if err := c.kubeClient.CoreV1().Nodes().Delete(context.TODO(), node.Name, metav1.DeleteOptions{}); err != nil { - klog.Errorf("unable to delete node %q: %v", node.Name, err) + if err := c.kubeClient.CoreV1().Nodes().Delete(context.TODO(), node.Name, metav1.DeleteOptions{}); err != nil { + klog.Errorf("unable to delete node %q: %v", node.Name, err) + } + } else { + // Node exists. We need to check this to get taint working in similar in all cloudproviders + // current problem is that shutdown nodes are not working in similar way ie. all cloudproviders + // does not delete node from kubernetes cluster when instance it is shutdown see issue #46442 + shutdown, err := shutdownInCloudProvider(context.TODO(), c.cloud, node) + if err != nil { + klog.Errorf("error checking if node %s is shutdown: %v", node.Name, err) + } + + if shutdown && err == nil { + // if node is shutdown add shutdown taint + err = controller.AddOrUpdateTaintOnNode(c.kubeClient, node.Name, ShutdownTaint) + if err != nil { + klog.Errorf("failed to apply shutdown taint to node %s, it may have been deleted.", node.Name) + } + } } } }