【问题标题】:Kubernetes - Join node failure using kubeadmKubernetes - 使用 kubeadm 加入节点失败
【发布时间】:2020-05-18 17:36:45
【问题描述】:

我正在尝试通过拥有一个主节点和一个工作节点来创建一个新的 kubernetes 集群。我已经使用 kubeadm 工具完成了主节点中的所有配置。所有 control plane 组件都在 master 节点上运行,并通过检查 pod 的状态来验证。

coredns-6955765f44-xspkr           0/1     Pending   0          8d
etcd-master-1                      1/1     Running   1          8d
kube-apiserver-master-1            1/1     Running   1          8d
kube-controller-manager-master-1   1/1     Running   1          8d
kube-proxy-8z8qr                   1/1     Running   1          8d
kube-scheduler-master-1            1/1     Running   1          8d

在工作节点中安装 kubectl、kubeadm、kubelet 和 docker 后,我尝试通过运行 kubeadmin join 命令通过提供令牌和发现令牌将节点添加到集群中,但出现以下错误。

I0202 22:17:57.778406   28654 token.go:78] [discovery] Failed to request cluster info: [Get https://10.0.2.15:6443/api/v1/namespaces/kube-public/configmaps/cluster-info?timeout=10s: dial tcp 10.0.2.15:6443: connect: connection refused]

我确实从工作节点 ping 主节点并且能够做到这一点。我还禁用了防火墙,即使在那之后也无法加入集群。

除了我提到的安装上述组件之外,在工作节点中是否有任何先决条件?任何帮助将不胜感激。

新发现

我刚刚发现的一件有趣的事情是 enp0s3 ip 地址。虽然我使用 enp0s8 的 ip 地址登录到 vm,但两个 master 工作节点的 enp0s3 是相同的,我猜这是导致问题的原因。当我在主节点中使用 kubeadm token create 命令生成令牌时,它会为 kubeapi url 提供 enp0s3 的 ip 作为 (kubeadm join 10.0.2.15:6443),这对于主节点和工作节点来说似乎都很常见。

Master enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255 inet6 fe80::b7:1fff:fe33:e924 prefixlen 64 scopeid 0x20<link> ether 02:b7:1f:33:e9:24 txqueuelen 1000 (Ethernet) RX packets 45801 bytes 50621300 (50.6 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 12270 bytes 811968 (811.9 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 Worker enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255 inet6 fe80::b7:1fff:fe33:e924 prefixlen 64 scopeid 0x20<link> ether 02:b7:1f:33:e9:24 txqueuelen 1000 (Ethernet) RX packets 703 bytes 588444 (588.4 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 305 bytes 23784 (23.7 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 不确定这些 vm 是如何为 enp0s3 获得相同 IP 的,有什么办法可以解决这个问题吗?

【问题讨论】:

  • “连接被拒绝”的意思是:节点无法连接到10.0.2.15:6443
  • 您是在主节点上使用 kubeadm init 命令创建集群后立即还是在几天后在工作节点上运行 kubeadm join 命令?

标签: docker kubernetes kubeadm kubelet


【解决方案1】:

在我看来,您在加入工作节点之前忘记应用网络插件,因为您的问题的输出控制平面组件中没有列出网络插件。

按照these 的说明部署网络插件:

例如,要将 Calico 部署为网络插件,请在您的 master 节点上执行以下操作:

Calico 是网络和网络策略提供商。 Calico 支持一组灵活的网络选项,因此您可以根据自己的情况选择最有效的选项,包括非覆盖和覆盖网络,有或没有 BGP。 Calico 使用相同的引擎在服务网格层为主机、Pod 和(如果使用 Istio 和 Envoy)应用程序实施网络策略。 Calico 适用于多种架构,包括 amd64、arm64 和 ppc64le。

默认情况下,Calico 使用192.168.0.0/16 作为 Pod 网络 CIDR,尽管这可以在 calico.yaml 文件中进行配置。为了使 Calico 正常工作,您需要使用 --pod-network-cidr=192.168.0.0/16 标志或通过 kubeadm 配置将相同的 CIDR 传递给 kubeadm init 命令。

kubectl apply -f https://docs.projectcalico.org/v3.11/manifests/calico.yaml

安装 Pod 网络后,您可以通过在 kubectl get pods --all-namespaces 的输出中检查 CoreDNS Pod 是否正在运行来确认它正在运行。一旦 CoreDNS Pod 启动并运行,您就可以通过加入您的节点来继续。

如果您的网络不工作或 CoreDNS 未处于运行状态,请查看我们的troubleshooting docs。


还记得为加入工作人员生成新令牌,因为它们在您初始化主节点后 24 小时后到期,并且您的主节点已经运行了 8 天。

正如 kubernetes documentation 中提到的,您可以在您的主节点上使用以下命令生成新令牌:

kubeadm token create

更新:

在为 kubernetes 使用 VirtualBox VM 时,建议使用桥接网络模式。

在here中有详细说明。

有一篇文章将网络模式改为桥接here。

更改网络模式后,请确保验证虚拟机的网络接口是否也更新,我们不希望发生网络地址冲突。

更改网络设置后,kubernetes 集群需要更新其网络配置。如果你没有在你的集群中部署任何东西,这可以通过重置集群和重做集群初始化来实现。 这将删除在您的集群上设置的所有内容。

为此,首先使用kubeadm reset,它会尽最大努力还原“kubeadm init”或“kubeadm join”对此主机所做的更改。然后使用 kubeadm init 调整配置以进行新的网络设置。

记得在加入其他工作节点之前安装 kubernetes 网络插件。

希望这会有所帮助。

【讨论】:

  • 我做了你提到的添加网络插件。但仍然无法将工作节点添加到集群中。 `
  • 解决虚拟机网络接口的重复问题:您是否碰巧使用VirtualBox 和NAT 网络模式?
  • 是的,我已经在 VirtualBox 中使用 NAT 模式创建了这些虚拟机。我们还有办法改变吗?
猜你喜欢
  • 2019-09-10
  • 2019-03-07
  • 2023-01-30
  • 2021-04-08
  • 2020-08-15
  • 1970-01-01
  • 1970-01-01
  • 2019-03-09
  • 2019-10-12
相关资源
最近更新 更多