示例场景
#
概述本文提供了使用 RKE 备份和恢复集群的场景。示例场景使用的是部署在两个 AWS 节点上的 Kubernetes 集群:node1
和node2
。我们会模拟node2
失效的场景,创建一个新的节点node3
并将node2
的快照备份迁移到node3
。具体的操作步骤因 RKE 版本而异,请按照您使用的 RKE 版本阅读对应的章节。节点的详细信息如下表所示:
名称 | IP 地址 | 节点角色 |
---|---|---|
node1 | 10.0.0.1 | [controlplane,worker] |
node2 | 10.0.0.2 | [etcd] |
node3 | 10.0.0.3 | [etcd] |
#
RKE v0.2.0 或更新的版本#
概述本章节提供了使用 RKE v0.2.0 或更新的版本进行备份和恢复集群的操作指导,分为以下五个步骤:
#
备份集群运行以下命令,备份集群。如果您配置了 AWS S3 相关的参数,RKE 会将快照上传到 S3 Backend。AWS S3 相关的参数的详细信息请参考本文最后一个章节。
#
模拟节点失效的场景运行以下命令,关闭node2
,模拟节点失效的场景。运行命令后,node2
的状态变更为不可用:
#
新建 etcd 节点升级和恢复 etcd 节点之前,您需要将新建的节点添加到 Kubernetes 集群内,并为其分配etcd
角色。请打开cluster.yml
文件,将node2
相关的参数变更为注释,然后添加新节点node3
的参数,如下所示。
#
使用备份恢复新建节点的数据先决条件:开始恢复节点前,请确保您的cluster.rkestate
文件有效,因为该文件包含了集群所需的证书数据。
将新建的节点添加到cluster.yml
中后,运行 rke etcd snapshot-restore
命令,从备份中启动etcd
:
默认配置下,RKE 将快照保存在/opt/rke/etcd-snapshots
路径。
如果您想直接从 S3 获取快照,可以在以上代码示例的基础上添加配置参数,详情请参考本文的最后一个章节。
说明:从 v0.2.0 开始,恢复集群所需的证书信息存储在
cluster.rkestate
中,所以pki.bundle.tar.gz
不再是恢复集群时的必备文件。
#
确认恢复后的集群处于正常状态rke etcd snapshot-restore
命令触发了使用新的cluster.yml
运行rke up
命令。请运行kubectl get pods
确认您的 Kubernetes 集群处于正常状态。如果状态正常,返回的信息应该与以下代码示例相似:
#
RKE v0.2.0 之前的版本#
概述本章节提供了使用 RKE v0.2.0 之前的版本进行备份和恢复集群的操作指导,分为以下 8 个步骤:
- 创建集群的本地快照
- 将集群快照保存到外部
- 模拟节点失效的场景
- 移除 Kubernetes 集群并清理节点
- 获取备份信息并将其存储在新建的节点上
- 为 Kubernetes 集群添加新节点
- 使用备份在新节点上恢复 etcd 节点信息
- 恢复集群操作
#
创建集群的本地快照运行以下命令,创建集群快照并保存至本地:
#
将集群快照保存到外部创建 node2
的快照后,建议将这个快照保存在安全的地方,例如将备份和pki.bundle.tar.gz
信息在一个 S3 的 bucket 里面或是磁带备份。如果您使用的是 AWS 主机并且有可用的 S3 存储,请执行以下步骤:
#
模拟节点失效的场景运行以下命令,关闭node2
,模拟节点失败的场景。运行命令后,node2
的状态变更为不可用
#
移除 Kubernetes 集群并清理节点运行以下命令,移除集群并清理节点。
#
获取备份信息并将其存储在新建的节点上在原有的集群中创建一个新的节点node3
。获取保存在 S3 里面的备份数据,将其迁移到新节点中。
说明: 如果您有多个 etcd 节点,您需要手动同步为所有 etcd 节点同步快照数据和
pki.bundle.tar.gz
文件。
#
为 Kubernetes 集群添加新节点升级和恢复 etcd 节点之前,您需要将新建的节点添加到 Kubernetes 集群内,并为其分配etcd
角色。请打开cluster.yml
文件,将node2
相关的参数变更为 comment,然后添加新节点的参数,如下所示。
#
使用备份在新节点上恢复 etcd 节点信息在cluster.yml
文件中添加了 node3 作为新节点后,运行 rke etcd snapshot-restore
命令,从备份中启动etcd
:
每个 etcd 节点对应的快照和pki.bundle.tar.gz
会被保存在/opt/rke/etcd-snapshots
路径下。
#
恢复集群操作最后我们需要将集群的状态恢复为正常。我们需要使用修改后的cluster.yml
运行rke up
命令,将 Kubernetes API 指向新建的etcd
节点,
请运行kubectl get pods
确认您的 Kubernetes 集群处于正常状态。如果状态正常,返回的信息应该与以下代码示例相似:
#
Etcd-Snapshot 服务的可配置参数参数 | 说明 | S3 相关 |
---|---|---|
interval_hours | 创建快照的间隔时间。如果您使用 RKE v0.2.0 定义了creation 参数,interval_hours 会覆盖这个参数。如果不输入这个值,默认间隔是 5 分钟。支持输入正整数表示小时,如 1 表示间隔时间为 1 小时,每小时会创建一个快照。 | |
retention | 快照的存活时间,当快照存活的时间超过这个限制后,会自动删除快照。如果在etcd.retention 和etcd.backup_config.retention 都配置了限制,RKE 会以etcd.backup_config.retention 为准。 | |
bucket_name | S3 的 桶名称(bucket name) | * |
folder | 指定 S3 存储节点快照的文件夹(可选), RKE v0.3.0 及以上版本可用 | * |
access_key | S3 的 accessKey | * |
secret_key | S3 的 secretKey | * |
region | S3 的 桶所在的区域(可选) | * |
endpoint | 指定 S3 端点 URL 地址,默认值为 s3.amazonaws.com | * |
custom_ca | 自定义证书认证,用于连接 S3 端点。使用私有存储时必填,RKE v0.2.5 及以上版本可用。 | * |
说明:
- 如果 AWS EC2 示例配置了 IAM 认证,则
--access-key
和--secret-key
不是必填项。- 表格第三列标记为"* "的参数,是 S3 相关的参数。