Update NetworkUnavailable condition in ipam controller

This commit is contained in:
Wojciech Tyczynski 2017-11-24 12:14:43 +01:00
parent e4f01051b5
commit 38597a26a8
2 changed files with 13 additions and 4 deletions

View File

@ -42,6 +42,7 @@ go_library(
], ],
importpath = "k8s.io/kubernetes/pkg/controller/node/ipam", importpath = "k8s.io/kubernetes/pkg/controller/node/ipam",
deps = [ deps = [
"//pkg/api/v1/node:go_default_library",
"//pkg/cloudprovider:go_default_library", "//pkg/cloudprovider:go_default_library",
"//pkg/cloudprovider/providers/gce:go_default_library", "//pkg/cloudprovider/providers/gce:go_default_library",
"//pkg/controller:go_default_library", "//pkg/controller:go_default_library",

View File

@ -36,11 +36,12 @@ import (
clientset "k8s.io/client-go/kubernetes" clientset "k8s.io/client-go/kubernetes"
"k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/kubernetes/scheme"
v1core "k8s.io/client-go/kubernetes/typed/core/v1" v1core "k8s.io/client-go/kubernetes/typed/core/v1"
v1node "k8s.io/kubernetes/pkg/api/v1/node"
"k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/cloudprovider"
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce" "k8s.io/kubernetes/pkg/cloudprovider/providers/gce"
"k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/controller"
"k8s.io/kubernetes/pkg/controller/node/util" "k8s.io/kubernetes/pkg/controller/node/util"
nodeutil "k8s.io/kubernetes/pkg/util/node" utilnode "k8s.io/kubernetes/pkg/util/node"
) )
// cloudCIDRAllocator allocates node CIDRs according to IP address aliases // cloudCIDRAllocator allocates node CIDRs according to IP address aliases
@ -105,6 +106,12 @@ func NewCloudCIDRAllocator(client clientset.Interface, cloud cloudprovider.Inter
if newNode.Spec.PodCIDR == "" { if newNode.Spec.PodCIDR == "" {
return ca.AllocateOrOccupyCIDR(newNode) return ca.AllocateOrOccupyCIDR(newNode)
} }
// Even if PodCIDR is assigned, but NetworkUnavailable condition is
// set to true, we need to process the node to set the condition.
_, cond := v1node.GetNodeCondition(&newNode.Status, v1.NodeNetworkUnavailable)
if cond == nil || cond.Status != v1.ConditionFalse {
return ca.AllocateOrOccupyCIDR(newNode)
}
return nil return nil
}), }),
DeleteFunc: util.CreateDeleteNodeHandler(ca.ReleaseCIDR), DeleteFunc: util.CreateDeleteNodeHandler(ca.ReleaseCIDR),
@ -209,7 +216,8 @@ func (ca *cloudCIDRAllocator) updateCIDRAllocation(nodeName string) error {
if node.Spec.PodCIDR != "" { if node.Spec.PodCIDR != "" {
if node.Spec.PodCIDR == podCIDR { if node.Spec.PodCIDR == podCIDR {
glog.V(4).Infof("Node %v already has allocated CIDR %v. It matches the proposed one.", node.Name, podCIDR) glog.V(4).Infof("Node %v already has allocated CIDR %v. It matches the proposed one.", node.Name, podCIDR)
return nil // We don't return to set the NetworkUnavailable condition if needed.
break
} }
glog.Errorf("PodCIDR being reassigned! Node %v spec has %v, but cloud provider has assigned %v", glog.Errorf("PodCIDR being reassigned! Node %v spec has %v, but cloud provider has assigned %v",
node.Name, node.Spec.PodCIDR, podCIDR) node.Name, node.Spec.PodCIDR, podCIDR)
@ -219,7 +227,7 @@ func (ca *cloudCIDRAllocator) updateCIDRAllocation(nodeName string) error {
// //
// See https://github.com/kubernetes/kubernetes/pull/42147#discussion_r103357248 // See https://github.com/kubernetes/kubernetes/pull/42147#discussion_r103357248
} }
if err = nodeutil.PatchNodeCIDR(ca.client, types.NodeName(node.Name), podCIDR); err == nil { if err = utilnode.PatchNodeCIDR(ca.client, types.NodeName(node.Name), podCIDR); err == nil {
glog.Infof("Set node %v PodCIDR to %v", node.Name, podCIDR) glog.Infof("Set node %v PodCIDR to %v", node.Name, podCIDR)
break break
} }
@ -231,7 +239,7 @@ func (ca *cloudCIDRAllocator) updateCIDRAllocation(nodeName string) error {
return err return err
} }
err = nodeutil.SetNodeCondition(ca.client, types.NodeName(node.Name), v1.NodeCondition{ err = utilnode.SetNodeCondition(ca.client, types.NodeName(node.Name), v1.NodeCondition{
Type: v1.NodeNetworkUnavailable, Type: v1.NodeNetworkUnavailable,
Status: v1.ConditionFalse, Status: v1.ConditionFalse,
Reason: "RouteCreated", Reason: "RouteCreated",