无需重建节点,如何更新Kubernetes单节点集群的podCIDR
无需重建集群更新单节点Kubernetes的PodCIDR方案
针对你遇到的单节点集群PodCIDR过小导致无法创建更多Pod的问题,确实不用删除节点重建集群,按以下步骤操作即可:
隔离节点并驱逐现有Pod
- 先标记节点为不可调度,防止新Pod在操作过程中调度上来:
kubectl cordon <你的节点名称> - 驱逐节点上的普通Pod(kube-system中的静态Pod如kube-apiserver等会由kubelet自动重启,无需手动处理):
kubectl drain <你的节点名称> --ignore-daemonsets --delete-emptydir-data
- 先标记节点为不可调度,防止新Pod在操作过程中调度上来:
更新节点的PodCIDR配置
- 编辑节点对象,修改
spec.podCIDR字段为更大的网段(比如10.244.0.0/16,可提供65534个可用IP,完全满足需求):kubectl edit node <你的节点名称>
在编辑器中找到
spec.podCIDR行,替换为新的网段后保存退出。- 编辑节点对象,修改
调整kube-controller-manager的集群CIDR配置
kube-controller-manager负责PodCIDR的分配,需要确保其--cluster-cidr参数与新网段一致:- 如果是kubeadm部署的集群,kube-controller-manager是静态Pod,配置文件位于
/etc/kubernetes/manifests/kube-controller-manager.yaml,编辑该文件:vi /etc/kubernetes/manifests/kube-controller-manager.yaml
找到
command数组中的--cluster-cidr项,修改为新的网段(比如--cluster-cidr=10.244.0.0/16),保存后kubelet会自动重启kube-controller-manager Pod。- 如果是kubeadm部署的集群,kube-controller-manager是静态Pod,配置文件位于
更新CNI插件的网络配置
以常用的Flannel为例,需要同步修改其ConfigMap中的网段配置:- 编辑Flannel的ConfigMap:
kubectl edit configmap kube-flannel-cfg -n kube-system
找到
Network字段,替换为新的网段(比如"Network": "10.244.0.0/16"),保存退出。- 重启Flannel Pod使配置生效:
kubectl delete pod -n kube-system -l app=flannel
- 编辑Flannel的ConfigMap:
恢复节点可调度状态
操作完成后,将节点重新标记为可调度:kubectl uncordon <你的节点名称>验证配置
- 检查节点的PodCIDR是否更新:
kubectl get node <你的节点名称> -o jsonpath='{.spec.podCIDR}' - 部署一批测试Pod,确认能正常获取新网段的IP,且数量超过255后仍可创建。
- 检查节点的PodCIDR是否更新:
注意事项
- 原有Pod重启后会获取新网段的IP,若业务存在依赖Pod固定IP的场景,需提前做好兼容处理。
- 操作过程中kube-apiserver等核心组件可能短暂重启,建议在业务低峰期执行。
内容的提问来源于stack exchange,提问作者flyingfox
相关产品推荐
相关产品推荐

