如何突破k8s node单节点可运行的pod数上限

如何突破k8s node单节点可运行的pod数上限

前记:kubernetes每个node节点默认可运行的pod数目上限是110个。

我们有个单节点的kubernetes测试环境,随着上线的应用越来越多,今天早上查看有pod启动失败,提示没有可用的调度节点了。一时间没有想起来pod数目上限,先查看了deployment文件是否做了节点亲和,去掉了节点亲和的配置发现pod仍然处于pending的状态。

kubectl get po --all-namespaces |wc -l

得到的结果是112,原来是超过了一个节点可分配的pod数上限110了。

查看了下服务器的物理资源,cpu负载不高,内存还有部分结余,本着节约资源的想法,去调高node上pod可用数上限。

调整pod上限数做法

那么如何去增加node节点上的pod数目呢?我们知道节点pod启动是由kubelet来控制的,那么kubelet上是否有默认的配置呢?

那我们查看kubelet的system服务,执行下:

sudo systemctl status kubelet 可以查看kubelet.service文件的路径,具体如下图:

图片

查看具体的配置文件 cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/sysconfig/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS

我们有两个做法,一个是在systemd文件里添加环境变量,还有一个是配置文件里添加配置

方法一:

通过此文件我们发现 KUBELET_CONFIG_ARGS=--config=
/var/lib/kubelet/config.yaml

通过查看
/var/lib/kubelet/config.yaml 文件

图片

如图maxPods配置的是110

我们修改下maxPods的数值,增大到200(具体按照你node节点资源情况设置,不建议设置的过大)

修改完成之后重启下kubelet服务(不会影响正在运行的容器,放心的干吧)

sudo systemctl daemon-reload   
sudo systemctl restart kubelet

方法二:


文件  /etc/systemd/system/kubelet.service.d/10-kubeadm.conf  上添加:

Environment="KUBELET_NODE_MAX_PODS=--max-pods=300"

sudo systemctl daemon-reload  
sudo systemctl restart kubelet

使用方法二的前提是没有使用KUBELET_CONFIG_ARGS,否则会有配置冲突,不一定生效。

重启完kubelet之后,sudo systemctl status kubelet 服务正常,再次查看pod运行情况,pod已处于Running状态了

kubelet还有很多基础的配置,等着读者朋友们自行了解了(^_−)☆

图片

zhuhb
Kubernetes · 目录
上一篇k9s——kubernetes命令行交互UI,让你的kubectl快起来下一篇如何获取pod的IP等属性添加到环境变量
个人观点,仅供参考
阅读 546
 
 
关注公众号后可以给作者发消息
 
 
 
 
 
 
 
posted @   技术颜良  阅读(922)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
历史上的今天:
2019-03-12 Centos7.5基于MySQL5.7的 InnoDB Cluster 多节点高可用集群环境部署记录
2018-03-12 k8s pod的4种网络模式最佳实战(externalIPs )
点击右上角即可分享
微信分享提示