原因之一:是kubelet cgroup驱动程序“ cgroupfs”与docker cgroup驱动程序不同
公司的k8s,新增了一个节点,但kubelet启动一直报错,无法启动,网上找了半天,发现是kubelet cgroup驱动程序“ cgroupfs”与docker cgroup驱动程序不同,所导致,原因不详。
cgroups 的全称是 Linux Control Groups,主要作用是限制、记录和隔离进程组(process groups)使用的物理资源(cpu、memory、IO 等)。
systemd是系统自带的cgroup管理器, 系统初始化就存在的, 和cgroups联系紧密,为每一个进程分配cgroups, 用它管理就行了. 如果设置成cgroupfs就存在2个cgroup控制管理器, 实验证明在资源有压力的情况下,会存在不稳定的情况。
一、查看docker cgroup驱动
[root@shrs-35 ~]# docker info|grep Driver
Storage Driver: overlay2
Logging Driver: json-file
Cgroup Driver: systemd
二、查看kubelet cgroup驱动
[root@shrs-35 ~]# systemctl show --property=Environment kubelet | cat
Environment=KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/ --kubeconfig=/etc/kubernetes/ KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/
发现确实是俩个cgroup驱动程序不一致导致的
三、解决办法
3.1 修改docker的Cgroup Driver
修改/etc/docker/文件
{
"exec-opts": ["=systemd"]
}
重启docker
systemctl daemon-reload
systemctl restart docker
3.2 修改kubelet的Cgroup Driver
修改/etc/systemd/system//文件,增加–cgroup-driver=systemd (官方推荐用systemd)
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/ --kubeconfig=/etc/kubernetes/ --cgroup-driver=systemd"
重启kubelet
systemctl daemon-reload
systemctl restart kubelet