在k3s中,kubelet是作为一个子进程内建的。 这也导致,在k3s中,无法像在k8s中一样,直接对kubelet的参数进行修改。
为解决这一问题,k3s server提供了众多的flag,用于对k3s中的子进程进行配置。对于kubelet的配置,可以使用--kubelet-arg value
。
以kubelet的eviction-hard
参数为例,启动server时,添加相应的flag
k3s server --kubelet-arg "eviction-hard=memory.available<5%,nodefs.available<25%"
对于已经部署好的集群,可以使用配置文件的方式实现。
① 在需要的节点(master或agent)创建配置文件。
[root@localhost ~]# touch /etc/rancher/k3s/config.yaml
② 修改配置文件内容
kubelet-arg: - "eviction-hard=memory.available<5%,nodefs.available<25%"
修改后重启节点。
环境信息:
K3s 版本:1.22
节点 CPU 架构、操作系统和版本:x84_64
集群配置:
复现步骤:
3个节点的物理内存分别为,m1:8G,n1:32G,n2:32G。
eviction-hard参数的内存上限分别设置为m1:5%,n1:5%,n2:20%。
重启集群后,3个节点的可用内存情况如下图所示:
验证:在本测试中,只设置了eviction-hard
参数的情况下,和下图所示的k8s节点可分配资源说明,是匹配的,说明kubelet的参数设置成功。
注意:在进行eviction-hard
参数的设置时,建议不要把上限设置为当前节点可以触发eviction的情况,我出现了无法调度的状况。
参考文档:Node Pressure Eviction threshold · Issue #5213 · k3s-io/k3s · GitHub
https://docs.k3s.io/cli/server#customized-flags-for-kubernetes-processes
附加上下文/日志:
日志