这篇文章也可以在我的博客中查看
今天废话不多说直接解决一个阴间问题
问题
- 在部署kubernetes后(执行完
kubeadm init
后),执行任何kubectl
命令,都会报以下错误:
The connection to the server xxx.xxx.xxx.xxx:6443 was refused - did you specify the right host or port?
- 此后执行
kubectl get pods -A
你会看到一些容器在无规律地被摧毁 - 在过一段时间后,
Api-server
直接开摆,你无法再连接上Kubernetes,直接Connection refused。
环境
如果你目前遇到类似问题,而且处于以下环境,那本文很可能可以帮你渡过难关:
- 你使用的是Debian系统(Debian12/11)
- 我不确定其它系统会不会有相同错误,但不妨试试
- 你使用Kubeadm部署Kubernetes (目前的最新版,v1.28)
- 我同样不确定其它的部署方式会不会有相同错误
- 你使用
containerd
作为container runtime- 如果你是通过Docker官方教程安装的Docker,那个教程会连带安装
containerd
- 所以如果你印象中没有专门安装过任何container runtime,那很可能就是
containerd
- 如果你是通过Docker官方教程安装的Docker,那个教程会连带安装
- 你找过许多相同错误的解决方案,但最后都无法解决问题
原因
简单来说:containerd
与kubelet
使用的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
结束了哥们,这就完事儿了。文章来源:https://www.toymoban.com/news/detail-736984.html
真不敢相信被这个问题折磨了将近两天文章来源地址https://www.toymoban.com/news/detail-736984.html
到了这里,关于【kubernetes】Debian使用Kubeadm部署Kubernetes失败:Connection Refused的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!