首页 > 解决方案 > AWS 上的灾难恢复 Kops Kubernetes 主节点

问题描述

我目前通过 kops 在 AWS 上部署了一个集群 HA(具有三个多个主控,每个 AZ 一个)。Kops 在每个主节点上部署了一个 K8S 集群,其中包含一个用于 etcd-events 的 pod 和一个用于 etcd-server 的 pod。这些 pod 中的每一个都使用一个已安装的卷。

一切正常,例如当一个主节点死亡时,自动缩放组在同一个 AZ 中创建另一个主节点,该节点恢复其卷并将自身加入集群。我遇到的问题是对灾难的尊重,AZ 的失败。

如果 AZ 出现问题怎么办?我定期拍摄卷 EBS 快照,但如果我从快照创建新卷(使用要发现并附加到新实例的正确标签),新实例会挂载新卷,但在那之后,它就无法加入旧集群。我的计划是创建一个由 CloudWatch 事件触发的 lambda 函数,该事件在两个安全 AZ 之一中创建一个新的主实例,该卷是从旧 EBS 卷的快照安装的。但是这个计划有错误,因为我似乎忽略了关于 Raft、Etcd 和它们的行为的一些东西。(我这么说是因为我有来自其他主节点的错误,并且新节点无法将自己加入集群)。

建议?

理论上如何恢复单个AZ灾难的情况和所有master都死掉的情况?我有 EBS 快照。使用它们就足够了吗?

标签: amazon-web-serviceskubernetesetcdkopsdisaster-recovery

解决方案


我不确定您恢复故障节点的准确程度,但从技术上讲,您要恢复的第一件事是您的 etcd 节点,因为这是存储所有 Kubernetes 状态的地方。

由于您的集群已启动并运行,您不需要从头开始恢复,您只需删除旧节点并将新节点添加到 etcd。您可以在此处了解有关如何操作的更多信息。您实际上不需要将任何旧卷恢复到此节点,因为它将与其他现有节点同步。

然后在此之后,您可以启动其他服务,如kube-apiserverkube-controller-manager等。

话虽如此,如果您保持相同的 IP 地址和完全相同的物理配置,您应该能够在不删除 etcd 节点并添加新节点的情况下进行恢复。


推荐阅读