kubernetes failed to create kubelet: misconfiguration: kubelet cgroup driver: "cgroupfs" is different from docker cgroup driver: "systemd"

错误原因

kubernetes 的文件驱动与 docker 不一致,导致镜像无法启动。

docker info 可以看到驱动方式 Cgroup Driver: systemd。

解决方案

统一资源管理,一致使用 systemd 或者 cgroupfs。

在 Linux 上,控制组(CGroup)用于限制分配给进程的资源。

当某个 Linux 系统发行版使用 systemd 作为其初始化系统时,初始化进程会生成并使用一个 root 控制组(cgroup),并充当 cgroup 管理器。

systemd 与 cgroup 集成紧密,并将为每个 systemd 单元分配一个 cgroup。 因此,如果你 systemd 用作初始化系统,同时使用 cgroupfs 驱动,则系统中会存在两个不同的 cgroup 管理器。

同时存在两个 cgroup 管理器将造成系统中针对可用的资源和使用中的资源出现两个视图。某些情况下, 将 kubelet 和容器运行时配置为使用 cgroupfs、但为剩余的进程使用 systemd 的那些节点将在资源压力增大时变得不稳定。

当 systemd 是选定的初始化系统时,缓解这个不稳定问题的方法是针对 kubelet 和容器运行时将 systemd 用作 cgroup 驱动。

docker修改方法

在 /etc/docker/daemon.json 文件中,新增 "exec-opts": ["native.cgroupdriver=systemd"]

重启 docker

systemctl daemon-reload
systemctl restart docker

kubelet修改方法

在 /etc/sysconfig/kubelet 文件中,修改 --cgroup-driver= 参数。

例如修改为 --cgroup-driver=systemd

重启 kubelet

systemctl daemon-reload
systemctl restart kubelet

推荐阅读

https://kubernetes.io/zh-cn/docs/setup/production-environment/container-runtimes/
https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver/
https://www.cnblogs.com/sparkdev/p/9523194.html

posted @ 2023-03-25 17:27  牛奔  阅读(501)  评论(0)    收藏  举报