目 录CONTENT

文章目录

如何修改k8s默认配置的pod数量

Administrator
2025-10-20 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

 

字数 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. 1. IP 地址空间是基础: Kubernetes 在内部为每个Pod 分配一个虚拟IP 地址(Pod IP)。 这使得Pod 能够独立地进行网络通信。

  2. 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

IP块

CIDR范围

IP地址范围

可用IP

第1块

192.168.229.0/26

192.168.229.0 - 63

62个

第2块

192.168.229.64/26

192.168.229.64 - 127

62个

总计

-

-

124个


    
    
    
  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. 1. kubectl 是客户端工具: 重启 kubectl 自身通常不会对Kubernetes 集群造成任何影响,因为它仅仅是一个命令行的接口。

  2. 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/

 

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区