diff --git a/pkg/controller/nodeipam/ipam/BUILD b/pkg/controller/nodeipam/ipam/BUILD index 22da7772912..b8223f6d2dd 100644 --- a/pkg/controller/nodeipam/ipam/BUILD +++ b/pkg/controller/nodeipam/ipam/BUILD @@ -48,7 +48,9 @@ go_library( "//pkg/controller/nodeipam/ipam/cidrset:go_default_library", "//pkg/controller/nodeipam/ipam/sync:go_default_library", "//pkg/controller/util/node:go_default_library", + "//pkg/scheduler/algorithm:go_default_library", "//pkg/util/node:go_default_library", + "//pkg/util/taints:go_default_library", "//vendor/github.com/golang/glog:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", diff --git a/pkg/controller/nodeipam/ipam/cloud_cidr_allocator.go b/pkg/controller/nodeipam/ipam/cloud_cidr_allocator.go index 6f4e4cfcc7a..da7ff245722 100644 --- a/pkg/controller/nodeipam/ipam/cloud_cidr_allocator.go +++ b/pkg/controller/nodeipam/ipam/cloud_cidr_allocator.go @@ -41,7 +41,9 @@ import ( "k8s.io/kubernetes/pkg/cloudprovider/providers/gce" "k8s.io/kubernetes/pkg/controller" nodeutil "k8s.io/kubernetes/pkg/controller/util/node" + "k8s.io/kubernetes/pkg/scheduler/algorithm" utilnode "k8s.io/kubernetes/pkg/util/node" + utiltaints "k8s.io/kubernetes/pkg/util/taints" ) // cloudCIDRAllocator allocates node CIDRs according to IP address aliases @@ -108,8 +110,9 @@ func NewCloudCIDRAllocator(client clientset.Interface, cloud cloudprovider.Inter } // Even if PodCIDR is assigned, but NetworkUnavailable condition is // set to true, we need to process the node to set the condition. + networkUnavailableTaint := &v1.Taint{Key: algorithm.TaintNodeNetworkUnavailable, Effect: v1.TaintEffectNoSchedule} _, cond := v1node.GetNodeCondition(&newNode.Status, v1.NodeNetworkUnavailable) - if cond == nil || cond.Status != v1.ConditionFalse { + if cond == nil || cond.Status != v1.ConditionFalse || !utiltaints.TaintExists(newNode.Spec.Taints, networkUnavailableTaint) { return ca.AllocateOrOccupyCIDR(newNode) } return nil