kubelet.service failed

问题描述:运行systemctl start kubelet报错kubelet.service failed.

查看kubelet状态

systemctl status kubelet
[root@k8s-master ~]# systemctl status kubelet
● kubelet.service - kubelet: The Kubernetes Node Agent
   Loaded: loaded (/etc/systemd/system/kubelet.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/kubelet.service.d
           └─10-kubeadm.conf
   Active: activating (auto-restart) (Result: exit-code) since 二 2024-04-30 14:54:35 CST; 3s ago
     Docs: http://kubernetes.io/docs/
  Process: 21982 ExecStart=/usr/local/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS (code=exited, status=255)
 Main PID: 21982 (code=exited, status=255)

430 14:54:35 k8s-master kubelet[21982]: /usr/local/go/src/io/io.go:395 +0x2ff
430 14:54:35 k8s-master kubelet[21982]: io.Copy(...)
430 14:54:35 k8s-master kubelet[21982]: /usr/local/go/src/io/io.go:368
430 14:54:35 k8s-master kubelet[21982]: os/exec.(*Cmd).writerDescriptor.func1(0xc0001e71a0, 0xc00060dfb0)
430 14:54:35 k8s-master kubelet[21982]: /usr/local/go/src/os/exec/exec.go:311 +0x65
430 14:54:35 k8s-master kubelet[21982]: os/exec.(*Cmd).Start.func1(0xc0004c4f20, 0xc000c5fd20)
430 14:54:35 k8s-master kubelet[21982]: /usr/local/go/src/os/exec/exec.go:441 +0x27
430 14:54:35 k8s-master kubelet[21982]: created by os/exec.(*Cmd).Start
430 14:54:35 k8s-master kubelet[21982]: /usr/local/go/src/os/exec/exec.go:440 +0x629
430 14:54:35 k8s-master systemd[1]: kubelet.service failed.

查看日志分析原因

journalctl -u kubelet
430 15:05:21 k8s-master kubelet[28786]: F0430 15:05:21.285547   28786 server.go:269] failed to run Kubelet: misconfiguration: kubelet cgroup driver: "systemd" is different from docker cgroup driver: "cgroupfs"

从日志信息中,我们可以看到kubelet启动失败的原因是cgroup驱动的配置不一致。

这意味着kubelet和Docker使用的cgroup驱动不一致,kubelet使用的是systemd,而Docker使用的是cgroupfs。这会导致kubelet无法正确地监控和限制Docker容器的资源使用。

要解决这个问题,你需要确保kubelet和Docker使用相同的cgroup驱动。你可以选择更改kubelet或者Docker的配置以使它们一致。

如果你希望改变Docker的cgroup驱动为systemd,你可以编辑Docker的配置文件(通常是/etc/docker/daemon.json),添加或修改以下内容:

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

注意:有的人可能已经修改了daemon.json文件,此时应注意符合json格式,例如以下格式:

{
  "registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}

然后重启Docker服务:

sudo systemctl restart docker

如果你希望改变kubelet的cgroup驱动为cgroupfs,你可以编辑kubelet的配置文件(通常是/etc/systemd/system/kubelet.service.d/10-kubeadm.conf),修改或添加以下行:

Environment="KUBELET_EXTRA_ARGS=--cgroup-driver=cgroupfs"

然后重启kubelet服务:

sudo systemctl daemon-reload
sudo systemctl restart kubelet
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐