上云无忧 > 文档中心 > 百度智能云容器引擎服务 CCE 容器网段空间耗尽如何继续扩容(VPC网络模式)
容器引擎服务CCE
百度智能云容器引擎服务 CCE 容器网段空间耗尽如何继续扩容(VPC网络模式)

文档简介:
注意:以下内容仅针对使用 “VPC 网络”模式的集群 概述: 一个集群中最大的节点数量由容器网段的大小和每个节点上最大 Pod 数量所决定,例如: 容器网段选择 172.16.0.0/16,每个节点最大 Pod 数量为 256,则一个集群中最多只能有 256 个节点;
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

注意:以下内容仅针对使用 “VPC 网络”模式的集群

概述

一个集群中最大的节点数量由容器网段的大小和每个节点上最大 Pod 数量所决定,例如:

  • 容器网段选择 172.16.0.0/16,每个节点最大 Pod 数量为 256,则一个集群中最多只能有 256 个节点;
  • 容器网段选择 192.168.0.0/22,每个节点最大 Pod 数量为 128,则一个集群中最多只能有 8 个节点;

在某些情况下,由于用户创建的集群时,选择的容器网段过小或者每个节点上最大的容器数量过大,在后续对集群进行扩容时,节点数量超过了集群中最大的节点数量。由于 kube-controller-manager 无法为这些扩容的节点分配Pod 的网段,会导致节点状态 notReady。

解决方法

第一步

修改集群中 master 节点上 kube-controller-manager 的配置,需要修改的字段是 --node-cidr-mask-size。由于修改目的是让集群中可以容纳更多节点,也就是让节点上最大的 Pod 数量变小,我们需要修改 --node-cidr-mask-size 值使其变大。

如果是多副本的 master,需要逐一修改各 master 节点上的配置。

注意: 不能修改 --node-cidr-mask-size 比当前值更小,否则会造成网段冲突导致网络不通

第二步

从集群中移出节点再加入,包括的方法有两种:

  • 从 CCE 产品 console 界面上选择“移出节点”或“删除节点”, 之后再“移入节点”或“添加节点”。
  • 执行 kubectl delete node <nodeName> 从 k8s 集群中删除节点。执行 kubectl get pods --all-namespaces=true -o wide | grep <nodeName> 确保该节点上没有 Pod 之后,在节点上重启 kubelet 将节点重新加入到 k8s 集群。

注意:不论哪种方式将节点从集群中删除,都会导致移出的节点上的所有 Pod 漂移。对于承载了线上服务的节点,需要谨慎操作。

实际案例

问题场景

目前有一个集群的容器网段是 172.26.0.0/22,kube-controller-manager 配置中 --node-cidr-mask-size=24。也就是说,集群中最多容纳 4 个节点,每个节点上最大 Pod 数量是 256。

集群中已经有 4 个节点了,如果再扩容节点将会导致新扩容的节点不可用。

[root@instance-rhkiutp6-3 ~]# kubectl get node
NAME       STATUS   ROLES    AGE    VERSION
10.0.5.3   Ready    <none>   119m   v1.13.10
10.0.5.4   Ready    <none>   117m   v1.13.10
10.0.5.5   Ready    <none>   20m    v1.13.10
10.0.5.6   Ready    <none>   118m   v1.13.10
[root@instance-rhkiutp6-3 ~]# kubectl describe node | grep -i podcidr
PodCIDR:                     172.26.2.0/24
PodCIDR:                     172.26.1.0/24
PodCIDR:                     172.26.3.0/24
PodCIDR:                     172.26.0.0/24

修改步骤

第一步

在 master 上执行 vim /etc/systemd/system/kube-controller.service 查看 kube-controller-manager 配置:

[Unit]
Description=Kubernetes Controller Manager
After=network.target
After=kube-apiserver.service

[Service]
ExecStart=/opt/kube/bin/kube-controller-manager \
--allocate-node-cidrs=true \
--cloud-config=/etc/kubernetes/cloud.config \
--cluster-cidr=172.26.0.0/22 \
--node-cidr-mask-size=24 \   #修改这里
.......
--kubeconfig=/etc/kubernetes/controller-manager.conf \
--leader-elect=true \
--logtostderr=true \
--master=https://100.64.230.195:6443 \
--v=6
Restart=always
Type=simple
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

修改 --node-cidr-mask-size 值从 24 变更为 26。这样修改后,集群中最多可以容纳 16 个节点,每个节点上最大 Pod 数量则减少为 64。

依次在每个 master 节点修改配置后执行以下命令重启 kube-controller-manager。

systemctl daemon-reload
systemctl restart kube-controller.service

第二步

执行 kubectl delete node 10.0.5.4,此时集群状态中已经没有 10.0.5.4 节点:

[root@instance-rhkiutp6-3 ~]# kubectl get node
NAME       STATUS   ROLES    AGE    VERSION
10.0.5.3   Ready    <none>   132m   v1.13.10
10.0.5.5   Ready    <none>   33m    v1.13.10
10.0.5.6   Ready    <none>   132m   v1.13.10
[root@instance-rhkiutp6-3 ~]# kubectl describe node | grep -i podcidr
PodCIDR:                     172.26.2.0/24
PodCIDR:                     172.26.3.0/24
PodCIDR:                     172.26.0.0/24

执行 kubectl get pods --all-namespaces=true -o wide | grep <nodeName> 确保 10.0.5.4 上没有 Pod。

在 10.0.5.4 节点上执行 systemctl restart kubelet.service 重启 kubelet,此时集群状态中表明 10.0.5.4 节点又被加入并且容器网段变为了 172.26.1.0/26:

[root@instance-rhkiutp6-3 ~]# kubectl get node
NAME       STATUS   ROLES    AGE     VERSION
10.0.5.3   Ready    <none>   138m    v1.13.10
10.0.5.4   Ready    <none>   3m55s   v1.13.10
10.0.5.5   Ready    <none>   40m     v1.13.10
10.0.5.6   Ready    <none>   138m    v1.13.10
[root@instance-rhkiutp6-3 ~]# kubectl describe node | grep -i podcidr
PodCIDR:                     172.26.2.0/24
PodCIDR:                     172.26.1.0/26
PodCIDR:                     172.26.3.0/24
PodCIDR:                     172.26.0.0/24

每移入移出一个已有节点将会创造出 3 个节点的扩容空间。例如现在可以给集群继续扩容 3 台节点,分配的 PodCIDR 将会是 172.26.1.64/26、 172.26.1.128/26 以及 172.26.1.192/26。

用户继续执行以上步骤移入移出所有节点,以创造更多的扩容空间。

注意:PodCIDR 掩码不同的节点理论上可以存在于同一集群中,但还是建议用户将所有节点移入移出一遍,让节点拥有相同掩码的 PodCIDR。

相似文档
  • IPv6 可以有效地弥补 IPv4 网络地址空间有限的问题,CCE 目前支持 IPv4/IPv6 双栈集群,包括如下特点: 1. Node 同时支持 IPv4 和 IPv6 地址,集群内部支持使用两种类型地址通信; 2. Pod 双栈同时支持 IPv4 和 IPv6 地址,并支持两种类型 IP 访问; 3. Service 同时支持 IPv4 和 IPv6 地址,并支持通过 IPv6 对外暴露服务。
  • 本文档会详细展示如何配置 ip-masq-agent, 用户可以灵活地将各种配置进行组合,满足容器流量出节点时身份的选择。 关键术语: NAT (网络地址解析) 是一种通过修改 IP 地址头中的源和/或目标地址信息将一个 IP 地址重新映射到另一个 IP 地址的方法。通常由执行 IP 路由的设备执行。
  • 本文档会描述在对等连接场景下, 跨 VPC 的集群如何配置 VPC 路由,以便不同集群可以在节点、容器层面实现互相连通。 前置条件: 对等连接已经创建完成。 对等连接提供了VPC级别的网络互联服务,帮助用户实现在不同虚拟网络之间的流量互通。在本文档中,默认用户已经创建好对等连接以及 VPC 中的端点。 【百度智能云】对等连接
  • 在 VPC Route 网络模式下, Pod 的 IP 地址网段通常与节点 IP 地址网段不同。 在集群默认配置下,当非 HostNetwork 网络模式的 Pod 访问私有 IP 地址段内的 IP (10.0.0.0/8、172.16.0.0/12 和 192.168.0.0/16)时,数据包的源 IP 是 Pod IP。这导致当访问目的地址是集群外的虚机或服务时,会出现网络不通的情况。 对于这些情况,我们需要配置 ip-masq-agent 以满足网络访问需求。
  • 注意:以下内容仅针对使用 “VPC-CNI”模式的集群。 概述: VPC-CNI 模式下,容器的 IP 来自 VPC 中的子网。随着集群规模扩大,ENI 子网中的 IP 可能耗尽,利用 CNI 提供的动态配置功能,可以给集群增加新的 ENI 子网。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部