在 VPS 上运行 kubeadm init 后集群崩溃

在 VPS 上运行 kubeadm init 后集群崩溃

问题

每当我创建集群并部署 Flannel 时,它大概需要 5 分钟左右的时间。当我通过 检查集群信息时kubectl cluster-info,它会显示正确的信息。过了一会儿,它只是显示

与服务器 <server_ip>:6443 的连接被拒绝 - 您是否指定了正确的主机或端口?

集群信息:

Kubernetes 版本:1.27.2 安装方法:kubeadm init,直接从文档 主机操作系统:Ubuntu 22.04.2 LTS CNI 和版本:法兰绒 0.22.0 CRI 和版本:containerd 1.6.21

我尝试过的方法

首先,我按照以下说明操作:https://computingforgeeks.com/deploy-kubernetes-cluster-on-ubuntu-with-kubeadm/。我没有禁用交换,步骤 3。我的 containerd 配置中的 CRI 部分如下所示:

  [plugins."io.containerd.grpc.v1.cri"]
    stream_server_address = "127.0.0.1"
    stream_server_port = "0"
    systemd_cgroup = true

    [plugins."io.containerd.grpc.v1.cri".cni]
      bin_dir = "/opt/cni/bin"
      conf_dir = "/etc/cni/net.d"
      conf_template = ""
      ip_pref = ""
      max_conf_num = 1

一切准备就绪后,我用 初始化了我的集群sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=<server_ip>。这没有给出任何错误。

问题

  • 这是什么原因造成的?我的网络配置关闭了吗?
  • 我遗漏了什么步骤?
  • 检查日志,哪个 pod 会导致这种情况?大多数情况下,kube-proxy 会出现错误,但除了dial tcp <serverip>:6443: connect: connection refused每个语句的末尾之外看不到任何具体信息。

答案1

此错误 The connection to the server <server_ip>:6443 was refused - did you specify the right host or port,似乎无法找到端口 6443 上的 API,表明 API 和运行它的 Docker 容器是导致此错误的原因。因此,如果 docker 关闭或任何阻止访问 docker 的东西中断,就会抛出这种错误。

正如本文所解释的文档由希腊日记“管理员”撰写,解释了如何修复错误

1.应在主节点上执行kubectl。

2.当前用户必须具有 Kubernetes 集群配置环境变量(有关如何操作的详细信息,请参阅“准备以普通用户身份使用 Kubernetes”部分),例如:

   $ env | grep -i kube
KUBECONFIG=/root/.kube/config

3.docker 服务必须正在运行:

 $ systemctl status docker

4.kubelet 服务必须正在运行:

$ systemctl status kubelet

5.TCP 端口 6443 应列为监听端口:

# netstat -pnlt | grep 6443
tcp6 0 0 :::6443 :::* LISTEN 4546/kube-apiserve

如果 TCP 端口 6443 不可用,请检查防火墙/iptables 规则是否符合要求:

$ firewall-cmd --list-all

还请检查 kubelet 日志:

# journalctl -xeu kubelet

6.尝试重新启动 Kubernetes 集群,这也会进行一些基本检查

 $ kubeadm-setup.sh restart

您也可以参考这个文档由 David O'Dell 撰写,其中包含有关解决 kubectl 连接被拒绝问题的更多信息。

答案2

验证SystemdCgroupcontainterd 配置中的设置。

https://kubernetes.io/docs/setup/production-environment/container-runtimes/#containerd-systemd

要将 systemd cgroup 驱动程序/etc/containerd/config.toml与 runc 一起使用,请设置

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

相关内容