备份集群

在 Rancher UI 中,你可以轻松备份和恢复 Rancher 启动的 Kubernetes 集群的 etcd。

Rancher 建议为所有生产集群配置定期 etcd 快照。此外,你还可以创建单次快照。

etcd 数据库的快照会保存在 etcd 节点S3 兼容目标上。配置 S3 的好处是,如果所有 etcd 节点都丢失了,你的快照会保存到远端并能用于恢复集群。

快照工作原理

快照组件

  • RKE

  • RKE2/K3s

Rancher 创建快照时,快照里包括三个组件:

  • etcd 中的集群数据

  • Kubernetes 版本

  • cluster.yml 形式的集群配置

由于 Kubernetes 版本现在包含在快照中,因此你可以将集群恢复到原本的 Kubernetes 版本。

Rancher 将快照创建任务委托给下游 Kubernetes 引擎。Kubernetes 引擎创建快照时包括了三个组件:

  • etcd 中的集群数据

  • Kubernetes 版本

  • 集群配置

由于 Kubernetes 版本包含在快照中,因此你可以将集群还原到之前的 Kubernetes 版本,同时还原 etcd 快照。

如果你需要使用快照恢复集群,快照的多个组件允许你选择:

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

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

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

建议你在执行配置更改或升级之前创建新快照。

从 etcd 节点生成快照

  • RKE

  • RKE2/K3s

集群中的每个 etcd 节点都会检查 etcd 集群的健康状况。如果节点报告 etcd 集群是健康的,则会从中创建一个快照,并可选择上传到 S3。

快照存储在 /opt/rke/etcd-snapshots 中。如果该目录在节点上配置为共享挂载,它将被覆盖。由于所有 etcd 节点都会上传快照并保留最后一个,因此 S3 上始终会保留最后一个上传的节点的快照。

在存在多个 etcd 节点的情况下,任何快照都是在集群健康检查通过后创建的,因此这些快照可以认为是 etcd 集群中数据的有效快照。

快照是默认启动的。

快照目录默认为 /var/lib/rancher/<RUNTIME>/server/db/snapshots,其中 <RUNTIME> 可以是 rke2k3s

在 RKE2 中,快照会存储在每个 etcd 节点上。如果你有多个 etcd 或 etcd + control plane 节点,你将拥有本地 etcd 快照的多个副本。

快照命名规则

  • RKE

  • RKE2/K3s

快照的名称是自动生成的。在使用 RKE CLI 创建一次性快照时,你可以使用 --name 选项来指定快照的名称。

Rancher 在创建 RKE 集群的快照时,快照名称是基于快照创建类型(手动快照或定期快照)和目标(快照是保存在本地还是上传到 S3)决定的。命名规则如下:

  • m 代表手动

  • r 代表定期

  • l 代表本地

  • s 代表 S3

快照名称示例如下:

  • c-9dmxz-rl-8b2cx

  • c-9dmxz-ml-kr56m

  • c-9dmxz-ms-t6bjb

  • c-9dmxz-rs-8gxc8

快照的名称是自动生成的。使用 RKE2 或 K3s CLI 创建一次性快照时,--name 选项可用于覆盖快照的基本名称。

Rancher 在创建 RKE2 或 K3s 集群的快照时,快照名称是基于快照创建类型(手动快照或定期快照)和目标(快照是保存在本地还是上传到 S3)决定的。命名规则如下:

<name>-<node>-<timestamp>

<name>--name 设置的基本名称,可以是以下之一:

  • etcd-snapshot:位于定期快照前面

  • on-demand:位于手动按需快照之前

<node>:创建快照的节点的名称。

<timestamp>:快照创建日期的 unix 时间戳。

快照名称示例如下:

  • on-demand-my-super-rancher-k8s-node1-1652288934

  • on-demand-my-super-rancher-k8s-node2-1652288936

  • etcd-snapshot-my-super-rancher-k8s-node1-1652289945

  • etcd-snapshot-my-super-rancher-k8s-node2-1652289948

从快照恢复的工作原理

  • RKE

  • RKE2/K3s

在恢复时会发生以下过程:

  1. 如果配置了 S3,则从 S3 检索快照。

  2. 如果快照压缩了,则将快照解压缩。

  3. 集群中的一个 etcd 节点会将该快照文件提供给其他节点。

  4. 其他 etcd 节点会下载快照并验证校验和,以便都能使用相同的快照进行恢复。

  5. 集群已恢复,恢复后的操作将在集群中完成。

在还原时,Rancher 会提供几组执行还原的计划。期间将包括以下阶段:

  • Started

  • Shutdown

  • Restore

  • RestartCluster

  • Finished

如果 etcd 快照还原失败,阶段将设置为 Failed

  1. 收到 etcd 快照还原请求后,根据 restoreRKEConfig 协调集群配置和 Kubernetes 版本。

  2. 该阶段设置为 Started

  3. 该阶段设置为 Shutdown,并使用运行 killall.sh 脚本的计划来关闭整个集群。一个新的初始节点会被选举出来。如果还原的快照是本地快照,则选择该快照所在的节点作为初始节点。如果使用 S3 还原快照,将使用现有的初始节点。

  4. 该阶段设置为 Restore,并且快照将还原到初始节点上。

  5. 该阶段设置为 RestartCluster,集群将重启并重新加入到具有新还原的快照信息的新初始节点。

  6. 该阶段设置为 Finished,集群被视为已成功还原。cattle-cluster-agent 将重新连接,集群将完成协调。

配置定期快照

  • RKE

  • RKE2/K3s

选择创建定期快照的频率以及要保留的快照数量。时间的单位是小时。用户可以使用时间戳快照进行时间点恢复。

默认情况下,xref:[Rancher 启动的 Kubernetes 集群]会配置为创建定期快照(保存到本地磁盘)。为防止本地磁盘故障,建议使用 S3 目标或复制磁盘上的路径。

在集群配置或编辑集群期间,可以在集群选项的高级部分中找到快照的配置。点击显示高级选项

在集群的高级选项中可以配置以下选项:

选项 描述 默认值

etcd 快照备份目标

选择要保存快照的位置。可以是本地或 S3

本地

启用定期 etcd 快照

启用/禁用定期快照

定期 etcd 快照的创建周期

定期快照之间的间隔(以小时为单位)

12 小时

定期 etcd 快照的保留数量

要保留的快照数量

6

设置创建定期快照的方式以及要保留的快照数量。该计划采用传统的 Cron 格式。保留策略规定了在每个节点上要保留的匹配名称的快照数量。

默认情况下,xref:[Rancher 启动的 Kubernetes 集群]从凌晨 12 点开始每 5 小时创建一次定期快照(保存到本地磁盘)。为了防止本地磁盘故障,建议使用 S3 目标或复制磁盘上的路径。

在集群配置或编辑集群期间,你可以在集群配置下找到快照配置。单击 etcd

选项 描述 默认值

启用定期 etcd 快照

启用/禁用定期快照

定期 etcd 快照的创建周期

定期快照的 Cron 计划

0 */5 * * *

定期 etcd 快照的保留数量

要保留的快照数量

5

单次快照

  • RKE

  • RKE2/K3s

除了定期快照之外,你可能还想创建"`一次性`"快照。例如,在升级集群的 Kubernetes 版本之前,最好备份集群的状态以防止升级失败。

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

  2. 集群页面上,导航到要在其中创建一次性快照的集群。

  3. 单击 ⋮ > 拍摄快照

除了定期快照之外,你可能还想创建"`一次性`"快照。例如,在升级集群的 Kubernetes 版本之前,最好备份集群的状态以防止升级失败。

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

  2. 集群页面上,导航到要在其中创建一次性快照的集群。

  3. 导航至快照选项卡,然后单击立即创建快照

创建一次性快照的工作原理

在创建一次性快照时,Rancher 会传递几组计划来执行快照创建。期间将包括以下阶段:

  • Started

  • RestartCluster

  • Finished

如果 etcd 快照创建失败,阶段将设置为 Failed

  1. 收到 etcd 快照创建请求。

  2. 该阶段设置为 Started。集群中的所有 etcd 节点都会根据集群配置收到创建 etcd 快照的计划。

  3. 该阶段设置为 RestartCluster,并且每个 etcd 节点上的计划都将重置为 etcd 节点的原始计划。

  4. 该阶段设置为 Finished

结果:根据你的快照备份目标创建一次性快照,并将其保存在选定的备份目标中。

快照备份目标

Rancher 支持两种不同的备份目标:

本地备份目标

  • RKE

  • RKE2/K3s

默认情况下会选择 local 备份目标。此选项的好处是不需要进行外部配置。快照会在本地自动保存到 Rancher 启动的 Kubernetes 集群中 etcd 节点的 /opt/rke/etcd-snapshots 中。所有定期快照都是按照配置的时间间隔创建的。使用 local 备份目标的缺点是,如果发生全面灾难并且丢失 所有 etcd 节点时,则无法恢复集群。

默认情况下会选择 local 备份目标。此选项的好处是不需要进行外部配置。快照会自动保存到 Rancher 启动的 Kubernetes 集群中的本地 etcd 节点上的 /var/lib/rancher/<runtime>/server/db/snapshots 中,其中 <runtime> 可以是 k3srke2。所有定期快照均按照 Cron 计划进行。使用 local 备份目标的缺点是,如果发生全面灾难并且丢失 所有 etcd 节点时,则无法恢复集群。

S3 备份目标

我们建议你使用 S3 备份目标。你可以将快照存储在外部 S3 兼容的后端上。由于快照不存储在本地,因此即使丢失所有 etcd 节点,你仍然可以还原集群。

虽然 S3 比本地备份具有优势,但它需要额外的配置。

如果你使用 S3 备份目标,请确保每个集群都有自己的存储桶或文件夹。Rancher 将使用集群配置的 S3 存储桶或文件夹中的可用快照来填充快照信息。

选项 描述 必填

S3 存储桶名称

用于存储备份的 S3 存储桶名称

*

S3 区域

备份存储桶的 S3 区域

S3 区域端点

备份存储桶的 S3 区域端点

*

S3 访问密钥

有权访问备份存储桶的 S3 访问密钥

*

S3 密文密钥

有权访问备份存储桶的 S3 密文密钥

*

自定义 CA 证书

用于访问私有 S3 后端的自定义证书

为 S3 使用自定义 CA 证书

备份快照可以存储在自定义 S3 备份中,例如 minio。如果 S3 后端使用自签名或自定义证书,请使用自定义 CA 证书选项来提供自定义证书,从而连接到 S3 后端。

在 S3 中存储快照的 IAM 支持

除了使用 API 凭证之外,S3 备份目标还支持对 AWS API 使用 IAM 身份验证。IAM 角色会授予应用在对 S3 存储进行 API 调用时的临时权限。要使用 IAM 身份验证,必须满足以下要求:

  • 集群 etcd 节点必须具有实例角色,该角色具有对指定备份存储桶的读/写访问权限。

  • 集群 etcd 节点必须对指定的 S3 端点具有网络访问权限。

  • Rancher Server worker 节点必须具有实例角色,该实例角色具有对指定备份存储桶的读/写访问权限。

  • Rancher Server worker 节点必须对指定的 S3 端点具有网络访问权限。

要授予应用对 S3 的访问权限,请参阅使用 IAM 角色向在 Amazon EC2 实例上运行的应用授予权限的 AWS 文档。

查看可用快照

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

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

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

  3. 单击快照选项卡来查看已保存快照的列表。这些快照包括创建时间的时间戳。

安全时间戳(RKE)

快照文件带有时间戳,从而简化使用外部工具和脚本处理文件的过程。但在某些与 S3 兼容的后端中,这些时间戳无法使用。

添加了选项 safe_timestamp 以支持兼容的文件名。当此标志设置为 true 时,快照文件名时间戳中的所有特殊字符都将被替换。

此选项不能直接在 UI 中使用,只能通过以 YAML 文件编辑使用。