我们正在尝试创建跨越 2 个数据中心的 k8s 集群环境,我们只有 7 台 BM 服务器。我们选择在数据中心 1 中有 2 个主节点和 2 个工作节点,在阳光明媚的情况下这是可行的
但是在data center1发生灾难的情况下,data center2中的single master变得无响应,并且不会启动data center2 worker节点中的worker节点中的任何pod,我们的应用服务不可用。除了将其他两个主节点恢复在线之外,是否有解决方案可以将此主节点恢复到服务中。
我们使用 kubeadm Stacked control plane 方法设置集群
#sudo kubeadm init --control-plane-endpoint "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT" --upload-certs
使用以下命令将另外两个 Master 添加到集群
#sudo kubeadm join 192.168.0.200:6443 --token 9vr73a.a8uxyaju799qwdjv --discovery-token-ca-cert-hash
当 2 个 Master 在第三次停止侦听时关闭 API 服务器并且 kubectl 也停止工作,
我们尝试重新启动可用的 master ,但它没有开始监听,我们无法对可用的 master 执行任何操作。有没有办法让这个主人重新投入使用
严格来说,这并不是如何具体解决您的问题的答案,但我希望无论如何它会对您有所帮助。
考试说明
我想您正在使用堆叠的 master = etcd 成员,并且控制平面节点位于同一位置。
Kubernetes 控制平面本身只能在 1/3 节点在线的情况下运行。但是一个 etcd 集群需要大多数节点(一个仲裁)来就集群状态的更新达成一致。
Etcd 是键值存储,kubernetes 将其用作所有配置的存储。(或者大多数 k8s 发行版,k8s 是可插入的,因此您可以更改它,但 kubeadm 肯定使用 etcd)
解决方案提示
恢复 etcd quorum 看起来并非易事,您必须从节点备份数据,然后创建新的 etcd 集群。我找不到任何好的指南如何使用 kubeadm 做到这一点,这就是这不是一个完美答案的原因。
您不能简单地删除成员,因为这需要有一个仲裁,您应该能够做的是使用旧的数据创建新的 etcd 集群。
Kubeadm 在这里有一点帮助:https ://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/#volume-snapshot
长期注意事项:
如果您有两个故障域,则必须选择哪一个更重要。没有办法,能够在没有另一个的情况下运行任何部分,这将产生一个逻辑问题。如果集群的任何部分可以独立运行,那么这两个数据中心之间可能会出现网络分区的情况,因此它们不会互相看到,但在其他情况下运行没有任何问题。集群的两个部分都将假定为 master 并开始进行更改。当网络恢复正常时,您无法确定哪些更改是正确的。这就是所有一致性分布式数据存储都需要大多数节点的原因。
另外不建议使用 etcd 使用 accros 数据中心,也许可以尝试查看https://github.com/kubernetes-sigs/kubefed