Skip to main content

备份和恢复

K3s 的备份和恢复方式由您使用的数据存储类型决定。本文提供了基于外部数据存储嵌入式 etcd 数据存储两种存储方式的备份和恢复操作指导,请按需阅读以下章节完成备份和还原 K3s。

外部数据存储备份和还原#

当使用外部数据存储时,备份和恢复操作是在 K3s 之外处理的。数据库管理员需要对外部数据库进行备份,或者从快照或转储中进行恢复。

我们建议将数据库配置为执行定期快照

有关获取数据库快照和从快照还原数据库的详细信息,请参阅官方数据库文档:

嵌入式 etcd 数据存储备份和还原(实验性)#

v1.19.1+k3s1 可用

在本节中,您将学习如何创建 K3s 集群数据的备份,并从备份中恢复集群。

关于带有嵌入式 SQLite 的单个 Server 注意事项:目前,不支持 SQLite 的备份。相反,请制作一份 /var/lib/rancher/k3s/server 的副本,然后删除 K3s。

创建快照#

快照目录默认为 ${data-dir}/server/db/snapshots。数据目录(data-dir)值默认为 /var/lib/rancher/k3s,可以通过设置 --data-dir 标志来改变数据目录。

从快照恢复集群#

当 K3s 从备份中恢复时,旧的数据目录将被移动到 ${data-dir}/server/db/etcd-old/。然后 K3s 会尝试通过创建一个新的数据目录来恢复快照,然后从一个带有一个 etcd 成员的新 K3s 集群启动 etcd。

要从备份中恢复集群,运行 K3s 时,请使用 --cluster-reset 选项运行 K3s,同时给出 --cluster-reset-restore-path,如下:

./k3s server \
--cluster-reset \
--cluster-reset-restore-path=<PATH-TO-SNAPSHOT>

结果:日志中出现一条信息,可以在没有标志的情况下重新启动 K3s。再次启动 K3s,可以成功运行并从指定的快照中恢复。

参数#

这些选项可以通过命令行或K3s 配置文件传递进来,这样可以更容易使用。

参数描述
--etcd-disable-snapshots禁用自动 etcd 快照
--etcd-snapshot-schedule-cron以 Cron 表达式的形式配置触发定时快照的时间点,例如:每 5 小时触发一次0 */5 * * *,默认值为每 12 小时触发一次:0 */12 * * *
--etcd-snapshot-retention保留的快照数量,默认值为 5。
--etcd-snapshot-dir保存数据库快照的目录路径。(默认位置:${data-dir}/db/snapshots)
--cluster-reset忘记所有的对等体,成为新集群的唯一成员,也可以通过环境变量[$K3S_CLUSTER_RESET]进行设置。
--cluster-reset-restore-path要恢复的快照文件的路径

S3 兼容 API 支持#

K3s 支持向具有 S3 兼容 API 的系统写入 etcd 快照和从系统中恢复 etcd 快照。S3 支持按需和计划快照。

下面的参数已经被添加到server子命令中。这些标志也存在于etcd-snapshot子命令中,但是--etcd-s3部分被删除以避免冗余。

选项描述
--etcd-s3启用备份到 S3
--etcd-s3-endpointS3 endpoint url
--etcd-s3-endpoint-caS3 自定义 CA 证书连接到 S3 endpoint
--etcd-s3-skip-ssl-verify禁用 S3 SSL 证书验证
--etcd-s3-access-keyS3 access key
--etcd-s3-secret-keyS3 secret key
--etcd-s3-bucketS3 bucket name
--etcd-s3-regionS3 region/bucket 的位置(可选)。默认为 us-east-1
--etcd-s3-folderS3 文件夹

执行按需的 etcd 快照并将其保存到 S3:

k3s etcd-snapshot \
--s3 \
--s3-bucket=<S3-BUCKET-NAME> \
--s3-access-key=<S3-ACCESS-KEY> \
--s3-secret-key=<S3-SECRET-KEY>

要从 S3 中执行按需的 etcd 快照还原,首先确保 K3s 没有运行。然后运行以下命令:

k3s server \
--cluster-init \
--cluster-reset \
--etcd-s3 \
--cluster-reset-restore-path=<SNAPSHOT-NAME> \
--etcd-s3-bucket=<S3-BUCKET-NAME> \
--etcd-s3-access-key=<S3-ACCESS-KEY> \
--etcd-s3-secret-key=<S3-SECRET-KEY>

Etcd 快照和恢复子命令#

k3s 支持一组用于处理 etcd 快照的子命令

子命令描述
delete删除指定的快照
ls, list, l列出快照
prune删除超过配置的保留次数的快照
save触发一个即时的 etcd 快照

save子命令与k3s etcd-snapshot相同。后者最终将被弃用,取而代之的是前者。

无论 etcd 快照是存储在本地还是存储在 S3 兼容的对象存储中,这些命令都将按预期执行。

关于 etcd 快照子命令的其他信息,请运行k3s etcd-snapshot

从 S3 中删除一个快照。

k3s etcd-snapshot delete \
--s3 \
--s3-bucket=<S3-BUCKET-NAME> \
--s3-access-key=<S3-ACCESS-KEY> \
--s3-secret-key=<S3-SECRET-KEY> \
<SNAPSHOT-NAME>

用默认的保留策略(5)prune 本地快照。prune子命令接受一个额外的标志--snapshot-retention,允许覆盖默认的保留策略。

k3s etcd-snapshot prune
k3s etcd-snapshot prune --snapshot-retention 10
Last updated on by hailong