kubeadm部署k8s(1.23.1)集群时报错,或集群运行过程中突然出现异常,根据提示的方法,查看到报错信息如下:

kubelet cgroup driver: \undefinedsystemd\undefined is different from docker cgroup driver: \undefinedcgroupfs\undefined

从报错信息很明显的可以看出,kubelet启动失败,原因是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 |grep Cgroup
Cgroup Driver: systemd

然后再来查看下kubelet的cgroup驱动

#systemctl show --property=Environment kubelet | grep cgroup-driver
Environment=KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf\x20--kubeconfig=/etc/kubernetes/kubelet.conf\x20--cgroup-driver=cgroupfs KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml

可以很明显的看到两个cgroup驱动程序确实不一致 解决方案步骤如下: 1、先修改docker的Cgroup Driver 修改/etc/docker/daemon.json文件

{
undefinedexec-optsundefined: [undefinednative.cgroupdriver=systemdundefined]
}

重启docker

systemctl daemon-reload
systemctl restart docker

2、然后修改kubelet的Cgroup Driver 修改 “/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf ” 文件,增加(或修改成)“–cgroup-driver=systemd” (官方推荐用systemd)

Environment=undefinedKUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --cgroup-driver=systemdundefined

修改 “/var/lib/kubelet/kubeadm-flags.env ”文件,增加(或修改成)“--cgroup-driver=systemd”

KUBELET_KUBEADM_ARGS=undefined--cgroup-driver=systemd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.2undefined

如果是原来正常运行的集群出现这个错误导致集群运行出现异常,修改完以上配置后,需要重启kubelet

systemctl daemon-reload
systemctl restart kubelet

正常情况下问题解决,k8s集群运行正常。