使用备份恢复集群

你可以轻松备份和恢复 Rancher 启动的 Kubernetes 集群的 etcd。etcd 数据库的快照会保存在 etcd 节点或 S3 兼容目标上。配置 S3 的好处是,如果所有 etcd 节点都丢失了,你的快照会保存到远端并能用于恢复集群。

Rancher 建议启用 etcd 定期快照的功能,但你也可以轻松创建一次性快照。Rancher 允许使用保存的快照进行恢复。如果你没有任何快照,你仍然可以恢复 etcd

集群也可以恢复到之前的 Kubernetes 版本和集群配置。

查看可用快照

Rancher UI 中提供了集群所有可用快照的列表:

  1. 在左上角,单击 ☰ > 集群管理

  2. 集群页面中,转到要查看快照的集群并点击集群名称。

  3. 单击快照选项卡。列出的快照包括创建时间的时间戳。

使用快照恢复集群

如果你的 Kubernetes 集群已损坏,你可以使用快照来恢复集群。

快照由 etcd 中的集群数据、Kubernetes 版本和 cluster.yml 中的集群配置组成。有了这些组件,你可以在使用快照恢复集群时选择:

  • 仅恢复 etcd 内容:类似于在 Rancher v2.4.0 之前版本中的使用快照恢复。

  • 恢复 etcd 和 Kubernetes 版本:如果 Kubernetes 升级导致集群失败,并且你没有更改任何集群配置,则应使用此选项。

  • 恢复 etcd、Kubernetes 版本和集群配置:如果你在升级时同时更改了 Kubernetes 版本和集群配置,则应使用此选项。

回滚到之前的 Kubernetes 版本时,升级策略选项会被忽略。在恢复到旧 Kubernetes 版本之前,Worker 节点不会被封锁或清空,因此可以更快地将不健康的集群恢复到健康状态。

先决条件:

要恢复 S3 中的快照,需要将集群配置为在 S3 上创建定期快照

  1. 在左上角,单击 ☰ > 集群管理

  2. 集群页面中,转到要查看快照的集群并点击集群名称。

  3. 单击快照选项卡来查看已保存快照的列表。

  4. 转到要恢复的快照,然后单击 ⋮ > 还原

  5. 选择一个还原类型

  6. 点击还原

结果:集群将进入 updating 状态,然后将开始使用快照恢复 etcd 节点。集群会在返回到 active 状态后被恢复。

Control Plane/etcd 完全不可用时使用快照还原集群

在灾难恢复场景中,下游集群中 Rancher 管理的 Control Plane 和 etcd 节点可能不再可用或运行。你可以通过再次添加 Control Plane 和 etcd 节点来重建集群,然后使用可用快照来进行还原。

  • RKE

  • RKE2/K3s

请按照 SUSE 知识库中描述的流程进行操作。

如果集群完全故障,则必须从集群中删除所有 etcd 节点和机器,然后才能添加新的 etcd 节点来进行还原。

由于已知问题,此过程需要 Rancher v2.7.5 或更高版本。

如果你使用本地快照,那么请务必从要删除的 etcd 节点上的 /var/lib/rancher/<k3s/rke2>/server/db/snapshots/ 文件夹中备份要还原的快照。你可以将快照复制到 /var/lib/rancher/<k3s/rke2>/server/db/snapshots/ 文件夹中的新节点上。此外,如果使用本地快照并还原到新节点,目前还无法通过 UI 进行还原。

  1. 从集群中删除所有 etcd 节点。

    1. 在左上角,单击 ☰ > 集群管理

    2. 集群页面中,转到要删除节点的集群。

    3. 主机选项卡中,找到要删除的每个节点并单击 ⋮ > 删除。开始时,节点会挂在 deleting 状态,所有 etcd 节点都被删除后,它们将被一起删除。这是因为 Rancher 发现所有 etcd 节点都在删除,并开始 "短路" etcd 安全删除逻辑。

  2. 删除所有 etcd 节点后,添加要用于还原的新 etcd 节点。

    • 对于自定义集群,请转到注册选项卡,然后在节点上复制并运行注册命令。如果该节点之前已在集群中使用过,请先清理该节点

    • 对于主机驱动集群,则会自动配置新节点。

    此时,Rancher 会提示你需要使用 etcd 快照进行还原。

  3. 使用 etcd 快照还原。

    • 对于 S3 快照,使用 UI 进行还原。

      1. 单击快照选项卡来查看已保存快照的列表。

      2. 转到要恢复的快照,然后单击 ⋮ > 还原

      3. 选择一个还原类型

      4. 点击还原

    • 对于本地快照,使用 UI 进行还原可用。

      1. 单击右上角的 ⋮> 编辑 YAML

      2. spec.cluster.rkeConfig.etcdSnapshotRestore.name 定义为 /var/lib/rancher/<k3s/rke2>/server/db/snapshots/ 中磁盘上快照的文件名。

  4. 还原成功后,你可以将 etcd 节点扩展至所需的冗余。

在没有快照的情况下恢复 etcd(RKE)

如果 etcd 节点组失去了仲裁(quorum),由于没有操作(例如部署工作负载)可以在 Kubernetes 集群中执行,Kubernetes 集群将报告失败。集群需要有三个 etcd 节点以防止仲裁丢失。如果你想恢复你的 etcd 节点集,请按照以下说明操作:

  1. 通过删除所有其他 etcd 节点,从而仅在集群中保留一个 etcd 节点。

  2. 在剩余的单个 etcd 节点上,运行以下命令:

    docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike etcd

    此命令会输出 etcd 要运行的命令,请保存此命令以备后用。

  3. 停止正在运行的 etcd 容器并将其重命名为 etcd-old

    docker stop etcd
    docker rename etcd etcd-old
  4. 修改步骤 2 中获取保存的命令:

    • 如果你最初有超过 1 个 etcd 节点,则将 --initial-cluster 更改为仅包含剩余的单个节点。

    • --force-new-cluster 添加到命令的末尾。

  5. 运行修改后的命令。

  6. 在单个节点启动并运行后,Rancher 建议向你的集群添加额外的 etcd 节点。如果你有一个自定义集群,并且想要复用旧节点,则需要先清理节点,然后再尝试将它们重新添加到集群中。