前言
共享网卡固定 IP 模式的集群移除子网需严格遵循本流程,如果 Pod 仍在使用子网时执行移除,将影响后续新增 Pod 的 IP 分配,即使分配其他子网也可能受影响。移除后如发现仍有 Pod 在使用该子网,需尽快将其重建至其他子网。
如何确定集群网络类型
操作步骤如下:
1. 登录 容器服务控制台,选择左侧导航中的集群。
2. 在集群页面,选择目标集群名称,进入集群详情页,查看集群基础信息下的节点和网络信息。
3. 查看容器网络插件是否为 VPC-CNI 共享网卡多 IP 以及是否固定 Pod IP 为是。

查看集群内是否有 Pod 使用待移除子网
首先通过子网 ID 确定子网对应 CIDR:
1. 在集群详情页面,查看集群基础信息下的节点和网络信息。
2. 在容器子网一栏确认待移除子网的 CIDR。

假设子网 CIDR 为
21.9.32.0/19,那么其范围是 21.9.32.0 - 21.9.63.255。其对应的正则表达式为 "21\\.9\\.(3[2-9]|[4-5][0-9]|6[0-3])",通过对 VpcIP 资源的名称进行检索可以查询到占用目标子网的所有 IP 以及对应的 Pod 资源:# 需要将命令中的子网正则表达式替换为目标子网的正则表达式kubectl get vip -ocustom-columns=Name:.metadata.name,phase:.status.phase,policy:.metadata.labels."tke\\.cloud\\.tencent\\.com/static-ip",namespace:.spec.claimRef.namespace,name:.spec.claimRef.name| grep -E "21\\.9\\.(3[2-9]|[4-5][0-9]|6[0-3])" | grep -vE "Attached|Reserved"
该命令的执行结果示例如下:
Name phase policy namespace name10.0.0.11 Assigned no kube-system test110.0.0.12 Assigned no kube-system test2
其中的 namespace 和 name 即对应使用该 IP 资源的 Pod 名称。
禁止在子网中分配 IP
操作步骤如下:
1. 登录 容器服务控制台,选择左侧导航中的集群。
2. 在集群页面,选择目标集群名称,进入集群详情页。
3. 选择左侧导航栏中的组件管理,在组件页面选择 eniipamd 组件右侧的修改全局配置。

4. 将待删除的子网 ID 添加到 “ipam.onlyNominatedEniSubnets” 列表中。修改后保存并退出。

释放子网内的存量 IP
操作步骤如下:
1. 根据第一步的检索结果,获取集群内所有使用目标子网的 Pod 信息。示例显示当前使用子网内 IP 的 Pod 为 kube-system 下名称为 test1 以及 test2 的 Pod。
2. 执行以下命令删除 Pod 对应的 VpcIPClaim 资源:
kubectl -n<podNamespace> delete vipc <podName>
3. 删除 Pod 对应的 VpcIPClaim 资源以后,对 Pod 进行重建。
删除弹性网卡对应的 VpcIP 资源
执行以下命令,查询当前集群中是否还存在使用目标子网的弹性网卡:
# 需要将命令中的子网正则表达式替换为目标子网的正则表达式kubectl get vip -ocustom-columns=Name:.metadata.name,phase:.status.phase,policy:.metadata.labels."tke\\.cloud\\.tencent\\.com/static-ip",namespace:.spec.claimRef.namespace,name:.spec.claimRef.name| grep -E "21\\.9\\.(3[2-9]|[4-5][0-9]|6[0-3])" | grep "Attached"
执行以下命令,删除查询到的弹性网卡对应的 VpcIP 资源:
kubectl delete vip <vipName>
从集群配置中移除子网
确认所有子网内的 IP 都释放后,可以移除子网。
操作步骤如下:
1. 登录 容器服务控制台,选择左侧导航中的集群。
2. 在集群页面,选择目标集群名称,进入集群详情页。
3. 选择左侧导航栏中的组件管理,在组件页面选择 eniipamd 组件右侧的修改全局配置。
4. 将待删除的子网 ID 从 “ipam.subnetIds” 以及 “ipam.onlyNominatedEniSubnets” 列表中删除。修改后保存并退出。
