Skip to content

Commit

Permalink
Merge branch 'tke/v1.20.6' into 'tke/v1.20.6' (merge request !446)
Browse files Browse the repository at this point in the history
do not create routes or allocate podCIDR for external nodes in IDC
**MR 描述 / 目的**:

do not create routes or allocate podCIDR for external nodes in IDC

**关联 issue**:
Fixes #

**代码审查须知**:

**MR 是否对用户有影响?**:

```发布须知

```
  • Loading branch information
borgerli committed May 24, 2021
2 parents 04ec96c + 5610a19 commit 5e8aacc
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 12 deletions.
23 changes: 23 additions & 0 deletions pkg/controller/nodeipam/ipam/range_allocator.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,12 @@ func NewCIDRRangeAllocator(client clientset.Interface, nodeInformer informers.No
continue
}

// Do not allocate PodCIDR for external nodes
if nodeutil.IsExternalKubelet(&node) {
klog.V(4).Infof("No need to process external node %s", node.Name)
continue
}

if len(node.Spec.PodCIDRs) == 0 {
klog.V(4).Infof("Node %v has no CIDR, ignoring", node.Name)
continue
Expand Down Expand Up @@ -152,6 +158,17 @@ func NewCIDRRangeAllocator(client clientset.Interface, nodeInformer informers.No
klog.V(4).Infof("No need to allocate PodCIDR for virtual node %s", newNode.Name)
return nil
}

// Node should not be changed from external to non-external, neither vice-versa
if nodeutil.IsExternalKubelet(oldNode) != nodeutil.IsExternalKubelet(newNode) {
return fmt.Errorf("Node %s should not be changed from external to non-external, neither vice-versa", newNode.Name)
}

// Do not allocate PodCIDR for external nodes
if nodeutil.IsExternalKubelet(newNode) {
klog.V(4).Infof("No need to allocate PodCIDR for external node %s", newNode.Name)
return nil
}
// If the PodCIDRs list is not empty we either:
// - already processed a Node that already had CIDRs after NC restarted
// (cidr is marked as used),
Expand Down Expand Up @@ -272,6 +289,12 @@ func (r *rangeAllocator) AllocateOrOccupyCIDR(node *v1.Node) error {
return nil
}

// Do not allocate PodCIDR for external nodes
if nodeutil.IsExternalKubelet(node) {
klog.V(4).Infof("No need to allocate PodCIDR for external node %s", node.Name)
return nil
}

if !r.insertNodeToProcessing(node.Name) {
klog.V(2).Infof("Node %v is already in a process of CIDR assignment.", node.Name)
return nil
Expand Down
41 changes: 33 additions & 8 deletions pkg/controller/util/node/controller_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,10 @@ import (
)

const (
// Label ant value to identify virtual kubelet node
virtualKubeletLabelBeta = "beta.kubernetes.io/instance-type"
virtualKubeletLabel = "node.kubernetes.io/instance-type"
virtualKubeletLabelValue = "eklet"
// EKS virutal node
InstanceTypeVirtual = "eklet"
// External IDC node
InstanceTypeExternal = "external"
)

// DeletePods will delete all pods from master running on given node,
Expand Down Expand Up @@ -320,15 +320,40 @@ func IsVirtualKubelet(node *v1.Node) bool {
return false
}

v, ok := nodeLabels[virtualKubeletLabelBeta]
if ok && v == virtualKubeletLabelValue {
v, ok := nodeLabels[v1.LabelInstanceType]
if ok && v == InstanceTypeVirtual {
return true
}

v, ok = nodeLabels[virtualKubeletLabel]
v, ok = nodeLabels[v1.LabelInstanceTypeStable]
if !ok {
return false
}

return v == virtualKubeletLabelValue
return v == InstanceTypeVirtual
}

// IsExternalKubelet checks whether a node is external running in IDC, based on the "instance-type" label
// Return true if the value of instance-type label equals to "external"
func IsExternalKubelet(node *v1.Node) bool {
if node == nil {
return false
}
nodeLabels := node.Labels

if nodeLabels == nil {
return false
}

v, ok := nodeLabels[v1.LabelInstanceType]
if ok && v == InstanceTypeExternal {
return true
}

v, ok = nodeLabels[v1.LabelInstanceTypeStable]
if !ok {
return false
}

return v == InstanceTypeExternal
}
Original file line number Diff line number Diff line change
Expand Up @@ -157,8 +157,8 @@ func (rc *RouteController) reconcile(nodes []*v1.Node, routes []*cloudprovider.R
continue
}

// Skip virtual nodes
if nodeutil.IsVirtualKubelet(node) {
// Skip virtual/external nodes
if nodeutil.IsVirtualKubelet(node) || nodeutil.IsExternalKubelet(node) {
continue
}

Expand Down Expand Up @@ -266,8 +266,8 @@ func (rc *RouteController) reconcile(nodes []*v1.Node, routes []*cloudprovider.R
// after all routes have been created (or not), we start updating
// all nodes' statuses with the outcome
for _, node := range nodes {
// Skip virtual nodes
if nodeutil.IsVirtualKubelet(node) {
// Skip virtual/external nodes
if nodeutil.IsVirtualKubelet(node) || nodeutil.IsExternalKubelet(node) {
continue
}

Expand Down

0 comments on commit 5e8aacc

Please sign in to comment.