Kubernetes如何为节点分配podCIDR?是否固定分配/24子网?
Kubernetes节点podCIDR的分配逻辑与子网大小说明
一、Kubernetes如何计算节点的CIDR范围?
Kubernetes中负责分配节点podCIDR的是kube-controller-manager组件内的CIDRAllocator模块,具体计算逻辑如下:
- 当你通过
kubeadm init --pod-network-cidr=xxx指定集群级的Pod网络大网段后,这个网段会作为CIDRAllocator的总分配池。 - 新节点加入集群时,CIDRAllocator会从总网段中,按照预设的子网大小(比如默认的/24),依次划分出未被占用的子网段分配给节点。
- 分配顺序遵循网段的自然递增规则,比如你用的
192.168.0.0/16,第一个节点会拿到192.168.0.0/24,第二个是192.168.1.0/24,第三个就是你看到的192.168.2.0/24,以此类推。
二、是否始终为每个节点分配/24子网?
不是的,/24只是默认的子网大小,这个值支持自定义配置:
- 控制该参数的是kube-controller-manager的
--node-cidr-mask-size选项。比如你可以设置--node-cidr-mask-size=23,这样每个节点的podCIDR就是/23网段,能提供512个可用IP(比/24多一倍),适合需要运行大量Pod的节点。 - 不同Kubernetes版本的默认值可能略有差异,但在1.24版本中默认确实是/24。如果没有手动修改这个参数,集群会按默认值分配子网。
如果用kubeadm搭建集群时要自定义子网大小,可在初始化时通过--controller-manager-extra-args传递参数,示例命令:
kubeadm init --pod-network-cidr=192.168.0.0/16 --kubernetes-version=1.24.0 --controller-manager-extra-args="node-cidr-mask-size=23"
内容的提问来源于stack exchange,提问作者YoavKlein
相关产品推荐
相关产品推荐

