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

时间:2018-10-10 23:20:04

标签: amazon-web-services kubernetes etcd kops disaster-recovery

我目前有一个通过HAPS部署在AWS上的群集HA(具有三个多个主服务器,每个AZ一个)。 Kops部署了一个K8S集群,其中每个主节点上都有一个用于etcd事件的容器和一个用于etcd服务器的容器。每个吊舱都使用一个已安装的卷。

一切正常,例如,当主节点死亡时,自动伸缩组在同一可用区中创建另一个主节点,以恢复其卷并将其自身加入群集。我遇到的问题是关于灾难,可用区的失效。

如果AZ应该有问题怎么办?我会定期获取卷EBS快照,但是如果我从快照创建新卷(具有要发现的正确标签并附加到新实例),则新实例将装入新卷,但是之后,它将无法加入旧集群。我的计划是创建一个由CloudWatch事件触发的lambda函数,该事件在两个安全AZ之一中创建一个新的主实例,并从旧EBS卷的快照中装入该卷。但是该计划存在错误,因为似乎我无视Raft,Etcd及其行为。 (之所以这样说,是因为我在其他主节点上遇到了错误,并且新节点无法将自己加入到集群中。)

建议?

从理论上讲,您如何恢复单个AZ灾难的情况以及所有主节点死亡的情况?我有EBS快照。使用它们是否足够?

1 个答案:

答案 0 :(得分:1)

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

由于群集已启动并正在运行,因此您无需从头开始还原,只需删除旧节点并将新节点添加到etcd。您可以找到更多有关如何here的信息。您真的不需要将任何旧卷还原到该节点,因为它将与其他现有节点同步。

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

话虽如此,如果您保留相同的IP地址和完全相同的物理配置,则无需删除etcd节点并添加新节点就可以恢复。