【问题标题】:Disaster Recovery Kops Kubernetes Master Node on AWSAWS 上的灾难恢复 Kops Kubernetes 主节点
【发布时间】:2019-03-15 22:41:23
【问题描述】:

我目前通过 kops 在 AWS 上部署了一个集群 HA(具有三个多个 master,每个 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-services kubernetes etcd kops disaster-recovery


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 对不起,当我向集群添加新成员时,没有恢复旧状态,但是我有这样的错误:2018-10-12 09:27:22.343092 C | raft: tocommit(371839) is out of range [lastIndex(0)]. Was the raft log corrupted, truncated, or lost? panic: tocommit(371839) is out of range [lastIndex(0)]. Was the raft log corrupted, truncated, or lost?
    • 谢谢,我已经用新卷解决了。我已经从 etcd 中删除了该成员,然后我按照本指南的第 6 点:github.com/kubernetes/kops/blob/master/docs/… 重新启动新成员
    猜你喜欢
    • 2021-03-01
    • 1970-01-01
    • 2012-03-16
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 2022-10-21
    • 1970-01-01
    相关资源
    最近更新 更多