github.com/cilium/cilium@v1.16.2/operator/pkg/nodeipam/node_predicates.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright Authors of Cilium
     3  
     4  package nodeipam
     5  
     6  import v1 "k8s.io/api/core/v1"
     7  
     8  const (
     9  	// ToBeDeletedTaint is a taint used by the Cluster Autoscaler before marking a node for deletion. Defined in
    10  	// https://github.com/kubernetes/autoscaler/blob/e80ab518340f88f364fe3ef063f8303755125971/cluster-autoscaler/utils/deletetaint/delete.go#L36
    11  	toBeDeletedTaint = "ToBeDeletedByClusterAutoscaler"
    12  )
    13  
    14  // shouldIncludeNode matches the stableNodeSetPredicates in the
    15  // kubernetes/cloud-provider project as described by KEP-3458, see the link below.
    16  // https://github.com/kubernetes/cloud-provider/blob/d7d37dea2df950e8cdf156bcf9fc0e32f6540ad5/controllers/service/controller.go#L1015
    17  func shouldIncludeNode(node *v1.Node) bool {
    18  	return nodeNotDeletedPredicate(node) &&
    19  		nodeIncludedPredicate(node) &&
    20  		nodeUnTaintedPredicate(node)
    21  }
    22  
    23  func nodeNotDeletedPredicate(node *v1.Node) bool {
    24  	return node.DeletionTimestamp.IsZero()
    25  }
    26  
    27  // We consider the node for load balancing only when the node is not labelled for exclusion.
    28  func nodeIncludedPredicate(node *v1.Node) bool {
    29  	_, hasExcludeBalancerLabel := node.Labels[v1.LabelNodeExcludeBalancers]
    30  	return !hasExcludeBalancerLabel
    31  }
    32  
    33  // We consider the node for load balancing only when it is not tainted for deletion by the cluster autoscaler.
    34  func nodeUnTaintedPredicate(node *v1.Node) bool {
    35  	for _, taint := range node.Spec.Taints {
    36  		if taint.Key == toBeDeletedTaint {
    37  			return false
    38  		}
    39  	}
    40  	return true
    41  }