第 1 章 备份 etcd

etcd 是 OpenShift Container Platform 的以”键-值”形式进行的存储,它会保留所有资源对象的状态。

定期备份集群的 etcd 数据,并在 OpenShift Container Platform 环境以外的安全位置保存备份数据。不要在第一个证书轮转完成前(安装后的 24 小时内)进行 etcd 备份,否则备份将包含过期的证书。另外,建议您在非使用高峰时段对 etcd 进行备份,因为备份可能会影响到系统性能。

一旦您有了 etcd 备份,就可以对丢失的 master 主机进行恢复,并恢复到以前的集群状态

您可以在任何已连接到 etcd 集群的 master 主机上执行 etcd 数据备份过程 ,这里提供了正确的证书。

1.1. 备份 etcd 数据

按照以下步骤,通过创建 etcd 快照并备份静态 Kubernetes API 服务器资源来备份 etcd 数据。这个备份可以被保存,并在以后需要时使用它来恢复 etcd 数据。

您应该只保存单一 master 主机的备份。您不需要对集群中的每个 master 主机都进行备份。

注意

如果您在 OpenShift Container Platform 4.3.0 或 4.3.1 中执行 etcd 备份,则此流程会生成一个包含了 etcd 快照和静态 Kubernetes API 服务器资源的单个文件。恢复时,etcd-snapshot-restore.sh 脚本可以向后兼容来接受这个单一文件。

先决条件

  • 您可以使用具有 cluster-admin 角色的用户访问集群。
  • 您已检查是否启用了集群范围代理。

    提示

    您可以通过查看 oc get proxy cluster -o yaml 的输出来检查代理是否已启用。如果 httpProxyhttpsProxynoProxy 字段设置了值,则会启用代理。

流程

  1. 为 master 节点启动一个 debug 会话:

    $ oc debug node/<node_name>
  2. 将您的根目录改为主机:

    sh-4.2# chroot /host
  3. 进入 /home/core 目录:

    sh-4.4# cd /home/core
  4. 如果启用了集群范围的代理,请确定已导出了 NO_PROXYHTTP_PROXYHTTPS_PROXY 环境变量。
  5. 运行etcd-snapshot-backup.sh脚本,输入保存备份的位置。

    sh-4.4# /usr/local/bin/etcd-snapshot-backup.sh /home/core/assets/backup

    在这个示例中,在 master 主机上的 /home/core/assets/backup/ 目录中创建了两个文件:

    • snapshot_<datetimestamp>.db:这个文件是 etcd 快照。
    • static_kuberesources_<datetimestamp>.tar.gz:此文件包含静态 Kubernetes API 服务器资源。如果启用了 etcd 加密,它也包含 etcd 快照的加密密钥。

      注意

      如果启用了 etcd 加密,建议出于安全考虑,将第二个文件与 etcd 快照分开保存。但是,需要这个文件才能从 etcd 快照中进行恢复。

      请记住,etcd 仅对值进行加密,而不对键进行加密。这意味着资源类型、命名空间和对象名称是不加密的。