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 }