kubernetes Docker.io K8s + Ubuntu 23.04 - kubectl间歇性返回`connection refused`

1aaf6o9v  于 2023-08-03  发布在  Kubernetes
关注(0)|答案(1)|浏览(98)

我已经初始化了一个3节点K8s集群。宿主是Raspberry Pis 4。我的目标是为我的家庭实验室提供可靠的Kubernetes部署。
在每个节点上,我安装了docker.ioiptableskubeletkubeadmkubectl。由于我使用的是docker而不是containerd,我通过在/etc/docker/daemon.json中设置cgroup驱动程序来启用cgroup支持:

kube01% cat /etc/docker/daemon.json 
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}%

字符串
我已经init了我的集群,并成功加入了工作节点,并在~/.kube/config中创建了我的配置:

kube01% kubectl get nodes          
NAME     STATUS   ROLES           AGE   VERSION
kube01   Ready    control-plane   11h   v1.27.3
kube02   Ready    <none>          11h   v1.27.3
kube03   Ready    <none>          11h   v1.27.3

运行kubectl命令时间歇性遇到:

kube01% kubectl get nodes
The connection to the server [kube01.ip]:6443 was refused - did you specify the right host or port?


在某些情况下,这一点在我没有互动的情况下就可以清除。在某些情况下,我似乎必须重新启动kubelet,尽管它表明它运行良好:

kube01% systemctl status kubelet
● kubelet.service - kubelet: The Kubernetes Node Agent
     Loaded: loaded (/lib/systemd/system/kubelet.service; enabled; preset: enabled)
    Drop-In: /etc/systemd/system/kubelet.service.d
             └─10-kubeadm.conf
     Active: active (running) since Wed 2023-07-05 09:02:07 PDT; 30min ago
       Docs: https://kubernetes.io/docs/home/
   Main PID: 725 (kubelet)
      Tasks: 15 (limit: 4416)
     Memory: 112.4M
        CPU: 2min 47.315s
     CGroup: /system.slice/kubelet.service
             └─725 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.c>

Jul 05 09:33:05 kube01 kubelet[725]: I0705 09:33:05.014941     725 scope.go:115] "RemoveContainer" containerID="d01bb7bcb9c0fe9f1633647d>
Jul 05 09:33:05 kube01 kubelet[725]: E0705 09:33:05.015693     725 pod_workers.go:1294] "Error syncing pod, skipping" err="failed to \"S>
Jul 05 09:33:05 kube01 kubelet[725]: I0705 09:33:05.958592     725 status_manager.go:809] "Failed to get status for pod" podUID=7206a59a>
Jul 05 09:33:05 kube01 kubelet[725]: I0705 09:33:05.960240     725 status_manager.go:809] "Failed to get status for pod" podUID=761a171d>
Jul 05 09:33:05 kube01 kubelet[725]: I0705 09:33:05.961685     725 status_manager.go:809] "Failed to get status for pod" podUID=54993b57>
Jul 05 09:33:05 kube01 kubelet[725]: I0705 09:33:05.963287     725 status_manager.go:809] "Failed to get status for pod" podUID=8d7c8723>
Jul 05 09:33:05 kube01 kubelet[725]: I0705 09:33:05.966891     725 status_manager.go:809] "Failed to get status for pod" podUID=aa900694>
Jul 05 09:33:06 kube01 kubelet[725]: I0705 09:33:06.017001     725 scope.go:115] "RemoveContainer" containerID="f97bdc8171c54a8e9d9cb62b>
Jul 05 09:33:06 kube01 kubelet[725]: E0705 09:33:06.018166     725 pod_workers.go:1294] "Error syncing pod, skipping" err="failed to \"S>
Jul 05 09:33:06 kube01 kubelet[725]: E0705 09:33:06.020022     725 event.go:289] Unable to write event: '&v1.Event{TypeMeta:v1.TypeMeta{>
lines 1-23/23 (END)


搜索似乎给我指出了三个主要的解决方案,我已经确认所有这些都适用于我的情况:
1.禁用交换(通过sudo swap off -a禁用,并确保在/etc/fstab中未配置交换
1.已配置containerd/docker以支持cgroup(同上)
1.确保~/.kube/config已正确创建和许可(同上)
我已经把头撞到这上面好几天了是否有任何其他指导来消除此间歇性错误?

**[Follow-Up]**阅读Kubernetes和Docker文档,Kubernetes似乎完全支持containerd,并表示docker.io不是首选。也许能找到一些变通办法,但选择不逆流而上。我把运行时移到了containerd,现在它已经可靠了好几个小时了。如果情况稳定到明天我会跟进更多细节。

e1xvtsh3

e1xvtsh31#

我在这个集群上花了大约8个小时,自从迁移到containerd后,它在这方面一直很可靠。正如我提到的,阅读Docker的文档,这一点很突出:
卸载旧版本在安装Docker Engine之前,必须首先确保卸载了所有冲突的包。
Distro维护人员在APT中提供了Docker包的非官方发行版。您必须先卸载这些软件包,然后才能安装Docker Engine的正式版本。
要卸载的非官方软件包包括:

  • docker.io
  • docker-compose
  • docker-doc
  • 波德曼-多克

此外,Docker Engine依赖于containerdrunc。Docker Engine将这些依赖捆绑为一个捆绑包:containerd.io.如果您之前安装了containerd或runc,请卸载它们以避免与Docker Engine捆绑的版本发生冲突。

tl;dr:

不要使用containerd以外的容器运行时

相关问题