【kubernetes】Debian使用Kubeadm部署Kubernetes失败:Connection Refused

这篇文章也可以在我的博客中查看

今天废话不多说直接解决一个阴间问题

问题

  1. 在部署kubernetes后(执行完kubeadm init后),执行任何kubectl命令,都会报以下错误:
The connection to the server xxx.xxx.xxx.xxx:6443 was refused - did you specify the right host or port?
  1. 此后执行kubectl get pods -A
    你会看到一些容器在无规律地被摧毁
  2. 在过一段时间后,Api-server直接开摆,你无法再连接上Kubernetes,直接Connection refused。

环境

如果你目前遇到类似问题,而且处于以下环境,那本文很可能可以帮你渡过难关:

  1. 你使用的是Debian系统(Debian12/11)
    • 我不确定其它系统会不会有相同错误,但不妨试试
  2. 你使用Kubeadm部署Kubernetes (目前的最新版,v1.28)
    • 我同样不确定其它的部署方式会不会有相同错误
  3. 你使用containerd作为container runtime
    • 如果你是通过Docker官方教程安装的Docker,那个教程会连带安装containerd
    • 所以如果你印象中没有专门安装过任何container runtime,那很可能就是containerd
  4. 你找过许多相同错误的解决方案,但最后都无法解决问题

原因

简单来说:containerdkubelet使用的cgourp driver版本对不上
Debian安装的conainerd的默认cgroup driver还是v1,但是kubelet使用的是v2

但说实话,详细的我也不太懂,也不太想去懂……
如果你对具体解释感兴趣,不妨查阅以下链接:

  • Why does etcd fail with Debian/bullseye kernel?
  • cgroups-k8s

解决

但要解决这个问题还是比较简单,只要指定containerd使用cgroup driver v2就可以:

打开containerd配置文件:

vi /etc/containerd/config.toml

加入以下内容,并保存退出:

version = 2
[plugins]
  [plugins."io.containerd.grpc.v1.cri"]
   [plugins."io.containerd.grpc.v1.cri".containerd]
      [plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
        [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
          runtime_type = "io.containerd.runc.v2"
          [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
            SystemdCgroup = true

重启containerd

systemctl restart containerd

重启kubelet

systemctl restart kubelet

结束了哥们,这就完事儿了。

真不敢相信被这个问题折磨了将近两天

你可能感兴趣的:(kubernetes,debian,容器,containerd)