本章节提供了使用 RKE v0.2.0 或更新的版本进行备份和恢复集群的操作指导,分为以下五个步骤:

  1. 备份集群
  2. 新建 etcd 节点
  3. 确认恢复后的集群处于正常状态

备份集群

运行以下命令,备份集群。如果您配置了 AWS S3 相关的参数,RKE 会将快照上传到 S3 Backend。AWS S3 相关的参数的详细信息请参考本文最后一个章节。

模拟节点失效的场景

运行以下命令,关闭node2,模拟节点失效的场景。运行命令后,node2的状态变更为不可用:

  1. root@node2:~# poweroff

新建 etcd 节点

升级和恢复 etcd 节点之前,您需要将新建的节点添加到 Kubernetes 集群内,并为其分配etcd角色。请打开cluster.yml文件,将node2相关的参数变更为注释,然后添加新节点node3的参数,如下所示。

  1. nodes:
  2. - address: 10.0.0.1
  3. hostname_override: node1
  4. user: ubuntu
  5. role:
  6. - controlplane
  7. # - address: 10.0.0.2
  8. # hostname_override: node2
  9. # user: ubuntu
  10. # role:
  11. # - etcd
  12. - address: 10.0.0.3
  13. hostname_override: node3
  14. user: ubuntu
  15. role:
  16. - etcd

使用备份恢复新建节点的数据

**先决条件:**开始恢复节点前,请确保您的cluster.rkestate文件有效,因为该文件包含了集群所需的证书数据。

将新建的节点添加到cluster.yml中后,运行 rke etcd snapshot-restore命令,从备份中启动etcd

  1. rke etcd snapshot-restore --name snapshot.db --config cluster.yml

如果您想直接从 S3 获取快照,可以在以上代码示例的基础上添加配置参数,详情请参考本文的最后一个章节。

rke etcd snapshot-restore命令触发了使用新的cluster.yml运行rke up命令。请运行kubectl get pods确认您的 Kubernetes 集群处于正常状态。如果状态正常,返回的信息应该与以下代码示例相似:

概述

本章节提供了使用 RKE v0.2.0 之前的版本进行备份和恢复集群的操作指导,分为以下 8 个步骤:

  1. 创建集群的本地快照
  2. 模拟节点失效的场景
  3. 获取备份信息并将其存储在新建的节点上
  4. 使用备份在新节点上恢复 etcd 节点信息

创建集群的本地快照

运行以下命令,创建集群快照并保存至本地:

  1. rke etcd snapshot-save --name snapshot.db --config cluster.yml

将集群快照保存到外部

创建 node2的快照后,建议将这个快照保存在安全的地方,例如将备份和pki.bundle.tar.gz信息在一个 S3 的 bucket 里面或是磁带备份。如果您使用的是 AWS 主机并且有可用的 S3 存储,请执行以下步骤:

  1. root@node2:~# s3cmd mb s3://rke-etcd-backup
  2. root@node2:~# s3cmd \
  3. /opt/rke/etcd-snapshots/snapshot.db \
  4. /opt/rke/etcd-snapshots/pki.bundle.tar.gz \
  5. s3://rke-etcd-backup/

模拟节点失效的场景

运行以下命令,关闭node2,模拟节点失败的场景。运行命令后,node2的状态变更为不可用

  1. root@node2:~# poweroff

获取备份信息并将其存储在新建的节点上

在原有的集群中创建一个新的节点node3。获取保存在 S3 里面的备份数据,将其迁移到新节点中。

  1. # Make a Directory
  2. root@node3:~# mkdir -p /opt/rke/etcdbackup
  3. # Get the Backup from S3
  4. s3://rke-etcd-backup/snapshot.db \
  5. /opt/rke/etcd-snapshots/snapshot.db
  6. # Get the pki bundle from S3
  7. root@node3:~# s3cmd get \
  8. s3://rke-etcd-backup/pki.bundle.tar.gz \
  9. /opt/rke/etcd-snapshots/pki.bundle.tar.gz

为 Kubernetes 集群添加新节点

升级和恢复 etcd 节点之前,您需要将新建的节点添加到 Kubernetes 集群内,并为其分配etcd角色。请打开cluster.yml文件,将node2相关的参数变更为 comment,然后添加新节点的参数,如下所示。

  1. nodes:
  2. - address: 10.0.0.1
  3. user: ubuntu
  4. role:
  5. - controlplane
  6. - worker
  7. # - address: 10.0.0.2
  8. # hostname_override: node2
  9. # user: ubuntu
  10. # role:
  11. # - etcd
  12. - address: 10.0.0.3
  13. hostname_override: node3
  14. user: ubuntu
  15. role:
  16. - etcd

使用备份在新节点上恢复 etcd 节点信息

cluster.yml文件中添加了 node3 作为新节点后,运行 rke etcd snapshot-restore命令,从备份中启动etcd

  1. rke etcd snapshot-restore --name snapshot.db --config cluster.yml

每个 etcd 节点对应的快照和pki.bundle.tar.gz 会被保存在/opt/rke/etcd-snapshots路径下。

恢复集群操作

最后我们需要将集群的状态恢复为正常。我们需要使用修改后的cluster.yml运行rke up 命令,将 Kubernetes API 指向新建的etcd节点,

请运行kubectl get pods确认您的 Kubernetes 集群处于正常状态。如果状态正常,返回的信息应该与以下代码示例相似:

  1. > kubectl get pods
  2. NAME READY STATUS RESTARTS AGE
  3. nginx-65899c769f-kcdpr 1/1 Running 0 17s
  4. nginx-65899c769f-pc45c 1/1 Running 0 17s
  5. nginx-65899c769f-qkhml 1/1 Running 0 17s
参数说明S3 相关
interval_hours创建快照的间隔时间。如果您使用 RKE v0.2.0 定义了creation参数,interval_hours会覆盖这个参数。如果不输入这个值,默认间隔是 5 分钟。支持输入正整数表示小时,如 1 表示间隔时间为 1 小时,每小时会创建一个快照;也支持输入正整数+m,表示分钟,如 1m 表示 1 分钟,每分钟会创建一个快照。
retention快照的存活时间,当快照存活的时间超过这个限制后,会自动删除快照。如果在etcd.retentionetcd.backup_config.retention都配置了限制,RKE 会以etcd.backup_config.retention为准。
bucket_nameS3 的 桶名称(bucket name)
folder指定 S3 存储节点快照的文件夹(可选), RKE v0.3.0 及以上版本可用
access_keyS3 的 accessKey
secret_keyS3 的 secretKey
regionS3 的 桶所在的区域(可选)
endpoint指定 S3 端点 URL 地址,默认值为 s3.amazonaws.com
custom_ca自定义证书认证,用于连接 S3 端点。使用私有存储时必填,RKE v0.2.5 及以上版本可用。*