AWS 上的灾难恢复 Kops Kubernetes 主节点

Disaster Recovery Kops Kubernetes Master Node on AWS

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

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

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

建议?

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

我不确定您是如何恢复故障节点的,但从技术上讲,您首先要恢复的是 etcd 节点,因为这是存储所有 Kubernetes 状态的地方。

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

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

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