首页 > 解决方案 > 用堆叠的控制平面替换 Kubernetes 1.15 集群中的死主

问题描述

我有一个 Kubernetes 集群,它有 3 个主控堆叠控制平面——所以每个主控也有自己的 etcd 实例在本地运行。我正在尝试解决的问题是:“如果一个主控死机而无法重新启动,我该如何更换它?”

目前,当我尝试将替换主服务器添加到集群中时,运行时出现以下错误kubeadm join

[check-etcd] Checking that the etcd cluster is healthy
I0302 22:43:41.968068    9158 local.go:66] [etcd] Checking etcd cluster health
I0302 22:43:41.968089    9158 local.go:69] creating etcd client that connects to etcd pods
I0302 22:43:41.986715    9158 etcd.go:106] etcd endpoints read from pods: https://10.0.2.49:2379,https://10.0.225.90:2379,https://10.0.247.138:2379
error execution phase check-etcd: error syncing endpoints with etc: dial tcp 10.0.2.49:2379: connect: no route to host

10.0.2.49 节点是死亡的节点。这些节点都在 AWS AutoScaling 组中运行,因此我无法控制地址。

我已经使用kubectl drainand排空并删除了死主节点kubectl delete;而且我曾经etcdctl确保死节点不在成员列表中。

为什么它仍在尝试连接到该节点的 etcd?

标签: kubernetes

解决方案


它仍在尝试连接到成员,因为 etcd 在其存储中维护了一个成员列表——这就是它知道对仲裁决定进行投票的方式。我不相信 etcd 在这方面是独一无二的——大多数分布式键值存储都知道他们的成员列表

精美的手册显示了如何删除死亡成员,但它也警告在删除不健康的成员之前添加新成员。

还有一个项目etcdadm旨在消除有关 etcd 集群管理的一些粗糙边缘,但我没有用它来说明它擅长与不擅长什么


推荐阅读