字数 1019,阅读大约需 6 分钟
如何修改k8s默认配置的pod数量
问题背景
问题:Kubernetes安装完成之后,默认node上运行pod数量的上限是110个,该如何修改这个上限。
我们在高配置的宿主机里,110个POD并不一定能全部充分用尽物理资源,因此,动态调整节点支持的最大POD数量,是100%有必要的。
只需要在 kubelet 启动命令中增加 --max-pods 参数,然后,重启 kubelet 服务,就生效
k8s官方说明
数量约束
大规模集群的注意事项 | Kubernetes[1]
集群包含多个运行着 Kubernetes 代理程序、 由控制平面管理的一组节点(物理机或虚拟机)。 Kubernetes v1.34 单个集群支持的最大节点数为 5,000。 更具体地说,Kubernetes 设计为满足以下所有标准的配置:
每个节点的 Pod 数量不超过 110
节点数不超过 5,000
Pod 总数不超过 150,000
容器总数不超过 300,000
实验:测试K8S Pod 数量超过110 会发生什么事? - HackMD[2]
结论:即使节点的CPU、内存、Disk …等硬体资源很够力,但只要在单一节点上kubelet 检查到超过110 个Pod 总数,新建立的Pod 是无法Running 的
网络IP
1. IP 地址空间是基础: Kubernetes 在内部为每个Pod 分配一个虚拟IP 地址(Pod IP)。 这使得Pod 能够独立地进行网络通信。
2. 每个节点分配一个Pod CIDR: 在集群创建时,会为每个节点分配一个Pod IP 地址段(Pod CIDR)。 这个地址段的范围决定了该节点上最多可以运行多少个Pod。 例如,如果一个节点被分配了 /28 的CIDR 块,它理论上最多可以容纳16 个IP 地址(除去网络地址和广播地址等,实际可用数量会更少),因此最大Pod 数量受此限制
CNI网络插件
# AI生成的答案
CNI网络插件的IP地址分配机制
不同的CNI插件对IP资源的管理方式直接影响Pod数量限制:
Flannel (host-gw/VXLAN模式)
每个节点分配一个子网段(默认/24,即256个IP)
实际可用IP = 子网大小 - 网络地址 - 广播地址
例如:/24子网最多支持约254个Pod
Calico (IPIP/BGP模式)
默认使用IPAM从IP池中为每个Pod分配IP
受限于分配给集群的IP池大小
可以配置不同大小的IP块(IPPool)
AWS VPC CNI
每个节点使用EC2实例的ENI(弹性网络接口)
可用Pod数 = (ENI数量 × 每个ENI的IP数) - 主IP数
这是云环境中最直接受网络IP限制的场景
查询使用的CNI
kubectl get pods -n kube-system | grep -E 'calico|flannel'
calico-kube-controllers-f5f969df7-5lmz2 1/1 Running 1 (150d ago) 287d
calico-node-whpd9 1/1 Running 4 (150d ago) 2y254d
在我的宿主机上查询IP数量,使用的是calico
kubectl get ippool -o yaml
kubectl get blockaffinities
2023-02-06 (2y254d前)
↓
节点创建,分配第一个IP块 (192.168.229.0/26)
↓
Pod数量增长...
↓
2023-11-30 (641d前)
↓
第一个IP块接近用完
↓
Calico自动分配第二个IP块 (192.168.229.64/26)
↓
现在支持最多124个Pod
参考文章
kubelet-config[3]
tool-reference[4]
K8S 修改节点 pod 上限[5]
操作方式
1.查看默认pod数量的上限
$ kubectl describe node 〈nodeName〉|grep pods
pods: 110
pods: 110
2.修改kubelet参数并重启
$ vim /var/lib/kubelet/config.yaml
maxPods: {待调整的数量}
systemctl restart kubelet
3.验证
$ kubectl describe node {}|grep pods
修改影响
重启kubectl
1. kubectl 是客户端工具: 重启 kubectl 自身通常不会对Kubernetes 集群造成任何影响,因为它仅仅是一个命令行的接口。
2. Pod 和容器的重启是关键: 当执行与Pod 和容器相关的操作时(如删除或滚动重启),会影响到其上的应用程序和服务。
引用链接
[1]
大规模集群的注意事项 | Kubernetes: https://kubernetes.io/zh-cn/docs/setup/best-practices/cluster-large/[2]
测试K8S Pod 数量超过110 会发生什么事? - HackMD: https://hackmd.io/@QI-AN/What-happens-when-the-number-of-K8S-Pods-exceeds-110#17-%E5%86%8D%E6%AC%A1%E6%9F%A5%E7%9C%8B%E7%8B%80%E6%85%8B%E7%82%BA-OutOfpods-%E7%9A%84-Deployment-Pod-%E7%B8%BD%E6%95%B8[3]
kubelet-config: https://kubernetes.io/docs/reference/config-api/kubelet-config.v1beta1/[4]
tool-reference: https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/[5]
K8S 修改节点 pod 上限: https://koomu.cn/k8s-modify-node-pods-limits/
评论区