如何突破k8s node单节点可运行的pod数上限
原创 zhuhb 运维笔谈 2024-02-11 08:19 江苏 听全文前记: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 Kubernetes24 Kubernetes · 目录 上一篇k9s——kubernetes命令行交互UI,让你的kubectl快起来下一篇如何获取pod的IP等属性添加到环境变量 个人观点,仅供参考 阅读 546 运维笔谈 喜欢此内容的人还喜欢 Kubernetes容器生命周期管理的postStart和preStop用法 我看过的号 运维笔谈 不看的原因- 内容低质
- 不看此公众号内容
- 内容低质
- 不看此公众号内容
- 内容低质
- 不看此公众号内容
人划线
标签:node,KUBELET,ARGS,kubelet,pod,k8s,节点 From: https://www.cnblogs.com/cheyunhua/p/18067849