加载中...

kubelet重启失败分析


前言

某天上午看到告警发现测试环境有个节点NotReady 首先排查服务器状态,cpu 内存 磁盘 网络一切正常.那就把目光放到kubeletdocker上面

查看kubelet日志

先查看kubelet状态,发现服务已经挂了,那主要目标就是他了

 systemctl status kubelet
● kubelet.service - kubelet: The Kubernetes Node Agent
   Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/kubelet.service.d
           └─10-kubeadm.conf
   Active: activating (auto-restart) (Result: exit-code) since 五 2023-01-06 10:32:34 CST; 956ms ago
     Docs: https://kubernetes.io/docs/
  Process: 18204 ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS (code=exited, status=255)
 Main PID: 18204 (code=exited, status=255)

可以通过命令查看日志确认启动失败的原因

journalctl -u kubelet -f | grep E0106
#其中看到一条这样的日志
failed to run Kubelet: misconfiguration: kubelet cgroup driver: "systemd" is different from docker cgroup driver: "cgroupfs"

分析后发现,是因为kebernetes默认设置cgroup驱动为systemd,而docker服务的cgroup驱动为cgroupfs,有两种决解决方式,方式一,将docker的服务配置文件修改为何kubernetes的相同,方式二是修改kebernetes的配置文件为cgroupfs

这次采用第一种,修改dockercgroup

cat /etc/docker/daemon.json 
{
"exec-opts": ["native.cgroupdriver=systemd"]
}

#重启服务
systemctl restart docker

再次查看日志,发现没有上面的报错了 但是有新的报错 😭

 E0106 11:14:25.601363   21120 watcher.go:146] Failed to watch directory "/sys/fs/cgroup/pids/system.slice/containerd.service/kubepods-burstable-pod452d78e1_b236_4c8e_8874_a465705a42c3.slice": inotify_add_watch /sys/fs/cgroup/pids/system.slice/containerd.service/kubepods-burstable-pod452d78e1_b236_4c8e_8874_a465705a42c3.slice: no space left on device

上网查询发现,应该是cgroup占满了 可以通过修改内核参数生效

#查看目前配置
cat /proc/sys/fs/inotify/max_user_watches 
8192

#将最大限制调整为1048576
sudo sysctl fs.inotify.max_user_watches=1048576

再次重启kubelet发现终于变成好了😊


文章作者: huhuhahei
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 huhuhahei !
评论
  目录