在AI基础设施部署中,尤其是面对微服务化部署的大量模型服务(如使用KServe或VLLM部署小型专用模型)或高密度计算任务时,Kubernetes集群的节点Pod密度限制往往成为瓶颈。Rancher部署的K8s集群(通常基于RKE或RKE2)默认情况下限制每个Node最多只能运行110个Pod。本指南将详细介绍如何通过修改Kubelet配置来提升这一限制,确保AI工作负载能够充分利用节点资源。
1. 为什么默认限制是110个Pod?
这个限制由Kubelet进程的启动参数–max-pods控制。Kubernetes社区设定110作为一个保守且安全的默认值,主要考虑到IP地址分配、网络性能(特别是CNI插件的效率)以及Kubelet自身的开销。当Pod数量过多时,可能会导致网络延迟增加或系统稳定性下降。
2. 调整限制的风险与准备
在调高–max-pods之前,必须确保你的CNI网络插件(如Flannel, Calico, Canal等)能够支持更多的IP地址分配,并且节点的硬件配置(尤其是内存和CPU核数)足以支撑更高的Kubelet和Pod密度开销。通常建议将限制提高到250或更高,但需根据实际负载进行压力测试。
3. Rancher集群配置修改步骤(RKE/Rancher 2.x)
由于Rancher管理着Kubelet的生命周期和配置,我们不能直接SSH到节点修改静态Pod文件,而必须通过Rancher UI或API来修改集群配置。
步骤 3.1: 登录Rancher UI
登录到你的Rancher Server。
步骤 3.2: 编辑集群配置
导航到目标集群,点击右侧的“三个点”或“编辑集群”按钮,选择“编辑配置”。
步骤 3.3: 注入Kubelet额外参数
在集群编辑页面的底部,找到“集群选项”或“编辑为YAML”视图。如果使用YAML视图,你需要找到rkeConfig下的kubelet配置块,并添加extra_args。
使用YAML视图注入配置示例:
rkeConfig:
# ... 其他RKE配置 ...
kubelet:
extra_args:
# 设置新的最大Pod限制。此处示例设置为250
max-pods: "250"
# ...
注意: max-pods的值必须用引号包裹,因为它是一个字符串参数。
如果是修改特定节点角色:
如果你只想修改Worker节点的限制,可以配置节点池或节点模板:
# 适用于RKE集群配置
nodes:
- address: <Node IP>
role: [worker]
# ... 其他配置
kubelet_extra_args:
max-pods: "250"
步骤 3.4: 保存并等待集群更新
保存配置。Rancher/RKE将开始更新所有相关节点的Kubelet配置。这个过程通常涉及Kubelet的重启,可能会短暂影响节点上的现有Pod。
4. 验证配置是否生效
集群更新完成后,可以通过以下两种方式验证–max-pods参数是否已成功应用:
验证方法一:检查Kubelet进程参数
SSH进入集群中的一个节点,检查Kubelet的启动命令:
# 检查正在运行的Kubelet进程,查找 max-pods 参数
ps aux | grep kubelet | grep max-pods
你应该能看到类似如下的输出:
/usr/bin/kubelet --kubeconfig=/etc/kubernetes/ssl/kubeconfig-kubelet.yaml --max-pods=250 --cgroups-per-qos=true ...
验证方法二:检查Node Capacity
使用kubectl检查节点的容量信息。Kubernetes会将–max-pods的值反映在Node对象的.status.capacity.pods字段中。
kubectl describe node <node-name> | grep Pods:
如果配置成功,输出应显示新的限制:
Capacity:
cpu: 8
ephemeral-storage: 958042456Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 32757512Ki
pods: 250
# 注意:这里的Pods值已从110变为250
通过成功调高max-pods限制,你的Rancher K8s集群将能更好地支持高密度的AI模型部署和训练任务,最大化地利用计算资源。
汤不热吧