kubelet失败,原因是kubelet cgroup驱动程序“ cgroupfs”与docker cgroup驱动程序不同


前言

公司的k8s服务好端端的不工作了,网上找了半天,发现是kubelet cgroup驱动程序“ cgroupfs”与docker cgroup驱动程序不同,所导致,原因不详

cgroups 的全称是 Linux Control Groups,主要作用是限制、记录和隔离进程组(process groups)使用的物理资源(cpu、memory、IO 等)。

systemd是系统自带的cgroup管理器, 系统初始化就存在的, 和cgroups联系紧密,为每一个进程分配cgroups, 用它管理就行了. 如果设置成cgroupfs就存在2个cgroup控制管理器, 实验证明在资源有压力的情况下,会存在不稳定的情况。


一、查看docker cgroup驱动

$ docker info   

在这里插入图片描述

二、查看kubelet cgroup驱动

systemctl show --property=Environment kubelet | cat

在这里插入图片描述
发现确实是俩个cgroup驱动程序不一致导致的

三、解决办法

3.1 修改docker的Cgroup Driver

修改/etc/docker/daemon.json文件

{
  "exec-opts": ["native.cgroupdriver=systemd"]
}

重启docker

systemctl daemon-reload
systemctl restart docker

3.2 修改kubelet的Cgroup Driver

修改/etc/systemd/system/kubelet.service.d/10-kubeadm.conf文件,增加–cgroup-driver=systemd (官方推荐用systemd)

Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --cgroup-driver=systemd"

重启kubelet

systemctl daemon-reload
systemctl restart kubelet

有的配置文件在 /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf,看你安装k8s的位置


版权声明:本文为u012140251原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。