第 5 章 control plane 备份和恢复
5.1. 备份 etcd 复制链接链接已复制到粘贴板!
etcd 是 OpenShift Container Platform 的以”键-值”形式进行的存储,它会保留所有资源对象的状态。
定期备份集群的 etcd 数据,并在 OpenShift Container Platform 环境以外的安全位置保存备份数据。不要在第一个证书轮转完成前(安装后的 24 小时内)进行 etcd 备份,否则备份将包含过期的证书。另外,建议您在非高峰期使用 etcd 备份,因为 etcd 快照有较高的 I/O 成本。
在更新集群之前,请务必进行 etcd 备份。在更新前进行备份非常重要,因为在恢复集群时,您必须使用从同一 z-stream 发行版本中获取的 etcd 备份。例如,OpenShift Container Platform 4.17.5 集群必须使用在 4.17.5 中进行的 etcd 备份。
通过在 control plane 主机上执行一次备份脚本来备份集群的 etcd 数据。不要为每个 control plane 主机进行备份。
在进行了 etcd 备份后,就可以恢复到一个以前的集群状态。
5.1.1. 备份 etcd 数据 复制链接链接已复制到粘贴板!
按照以下步骤,通过创建 etcd 快照并备份静态 pod 的资源来备份 etcd 数据。这个备份可以被保存,并在以后需要时使用它来恢复 etcd 数据。
只保存单一 control plane 主机的备份。不要从集群中的每个 control plane 主机进行备份。
先决条件
-
您可以使用具有
cluster-admin
角色的用户访问集群。 您已检查是否启用了集群范围代理。
提示您可以通过查看
oc get proxy cluster -o yaml
的输出来检查代理是否已启用。如果httpProxy
、httpsProxy
和noProxy
字段设置了值,则会启用代理。
流程
以 root 用户身份为 control plane 节点启动一个 debug 会话:
oc debug --as-root node/<node_name>
$ oc debug --as-root node/<node_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 debug shell 中将根目录改为
/host
:chroot /host
sh-4.4# chroot /host
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果启用了集群范围代理,请运行以下命令导出
NO_PROXY
、HTTP_PROXY
和HTTPS_PROXY
环境变量:export HTTP_PROXY=http://<your_proxy.example.com>:8080
$ export HTTP_PROXY=http://<your_proxy.example.com>:8080
Copy to Clipboard Copied! Toggle word wrap Toggle overflow export HTTPS_PROXY=https://<your_proxy.example.com>:8080
$ export HTTPS_PROXY=https://<your_proxy.example.com>:8080
Copy to Clipboard Copied! Toggle word wrap Toggle overflow export NO_PROXY=<example.com>
$ export NO_PROXY=<example.com>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 debug shell 中运行
cluster-backup.sh
脚本,并传递保存备份的位置。提示cluster-backup.sh
脚本作为 etcd Cluster Operator 的一个组件被维护,它是etcdctl snapshot save
命令的包装程序(wrapper)。/usr/local/bin/cluster-backup.sh /home/core/assets/backup
sh-4.4# /usr/local/bin/cluster-backup.sh /home/core/assets/backup
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 脚本输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这个示例中,在 control plane 主机上的
/home/core/assets/backup/
目录中创建了两个文件:-
snapshot_<datetimestamp>.db
:这个文件是 etcd 快照。cluster-backup.sh
脚本确认其有效。 static_kuberesources_<datetimestamp>.tar.gz
:此文件包含静态 pod 的资源。如果启用了 etcd 加密,它也包含 etcd 快照的加密密钥。注意如果启用了 etcd 加密,建议出于安全考虑,将第二个文件与 etcd 快照分开保存。但是,需要这个文件才能从 etcd 快照中进行恢复。
请记住,etcd 仅对值进行加密,而不对键进行加密。这意味着资源类型、命名空间和对象名称是不加密的。
-
5.1.3. 创建自动的 etcd 备份 复制链接链接已复制到粘贴板!
etcd 的自动备份功能支持重复备份和单一备份。重复备份会创建一个 cron 作业,该作业在每次作业触发时都启动一次备份。
自动 etcd 备份是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
按照以下步骤为 etcd 启用自动备份。
在集群中启用 TechPreviewNoUpgrade
功能集可防止次版本更新。TechPreviewNoUpgrade
功能集无法被禁用。不要在生产环境集群中启用此功能。
先决条件
-
您可以使用具有
cluster-admin
角色的用户访问集群。 -
您可以访问 OpenShift CLI(
oc
)。
流程
使用以下内容创建名为
enable-tech-preview-no-upgrade.yaml
的FeatureGate
自定义资源 (CR) 文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用 CR 并启用自动备份:
oc apply -f enable-tech-preview-no-upgrade.yaml
$ oc apply -f enable-tech-preview-no-upgrade.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启用相关的 API 需要一些时间。运行以下命令,验证自定义资源定义 (CRD) 的创建:
oc get crd | grep backup
$ oc get crd | grep backup
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
backups.config.openshift.io 2023-10-25T13:32:43Z etcdbackups.operator.openshift.io 2023-10-25T13:32:04Z
backups.config.openshift.io 2023-10-25T13:32:43Z etcdbackups.operator.openshift.io 2023-10-25T13:32:04Z
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.3.1. 创建单个 etcd 备份 复制链接链接已复制到粘贴板!
按照以下步骤,通过创建并应用自定义资源 (CR) 来创建单个 etcd 备份。
先决条件
-
您可以使用具有
cluster-admin
角色的用户访问集群。 -
您可以访问 OpenShift CLI(
oc
)。
流程
如果动态置备的存储可用,请完成以下步骤以创建单个自动 etcd 备份:
创建名为
etcd-backup-pvc.yaml
的持久性卷声明 (PVC),其内容如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- PVC 可用的存储量。根据您的要求调整这个值。
运行以下命令来应用 PVC:
oc apply -f etcd-backup-pvc.yaml
$ oc apply -f etcd-backup-pvc.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证 PVC 的创建:
oc get pvc
$ oc get pvc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE etcd-backup-pvc Bound 51s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE etcd-backup-pvc Bound 51s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意动态 PVC 处于
Pending
状态,直到它们被挂载为止。创建名为
etcd-single-backup.yaml
的 CR 文件,其内容如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 保存备份的 PVC 名称。根据您的环境调整这个值。
应用 CR 以启动单个备份:
oc apply -f etcd-single-backup.yaml
$ oc apply -f etcd-single-backup.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果动态置备的存储不可用,请完成以下步骤来创建单个自动 etcd 备份:
创建名为
etcd-backup-local-storage.yaml
的StorageClass
CR 文件,其内容如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来应用
StorageClass
CR:oc apply -f etcd-backup-local-storage.yaml
$ oc apply -f etcd-backup-local-storage.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建名为
etcd-backup-pv-fs.yaml
的 PV,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证 PV 的创建:
oc get pv
$ oc get pv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE etcd-backup-pv-fs 100Gi RWO Retain Available etcd-backup-local-storage 10s
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE etcd-backup-pv-fs 100Gi RWO Retain Available etcd-backup-local-storage 10s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建名为
etcd-backup-pvc.yaml
的 PVC,其内容如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- PVC 可用的存储量。根据您的要求调整这个值。
运行以下命令来应用 PVC:
oc apply -f etcd-backup-pvc.yaml
$ oc apply -f etcd-backup-pvc.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建名为
etcd-single-backup.yaml
的 CR 文件,其内容如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将备份保存到的持久性卷声明 (PVC) 的名称。根据您的环境调整这个值。
应用 CR 以启动单个备份:
oc apply -f etcd-single-backup.yaml
$ oc apply -f etcd-single-backup.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.3.2. 创建重复的 etcd 备份 复制链接链接已复制到粘贴板!
按照以下步骤创建自动重复备份 etcd。
如果可能,使用动态置备的存储将创建的 etcd 备份数据保存在安全的外部位置。如果动态置备的存储不可用,请考虑将备份数据存储在 NFS 共享上,以便更易访问备份恢复。
先决条件
-
您可以使用具有
cluster-admin
角色的用户访问集群。 -
您可以访问 OpenShift CLI(
oc
)。
流程
如果动态置备的存储可用,请完成以下步骤来创建自动重复备份:
创建名为
etcd-backup-pvc.yaml
的持久性卷声明 (PVC),其内容如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- PVC 可用的存储量。根据您的要求调整这个值。
注意每个供应商都需要更改
accessModes
和storageClassName
密钥:Expand 供应商 accessModes
值storageClassName
value带有
versioned-installer-efc_operator-ci
配置集的 AWS- ReadWriteMany
efs-sc
Google Cloud Platform
- ReadWriteMany
filestore-csi
Microsoft Azure
- ReadWriteMany
azurefile-csi
运行以下命令来应用 PVC:
oc apply -f etcd-backup-pvc.yaml
$ oc apply -f etcd-backup-pvc.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证 PVC 的创建:
oc get pvc
$ oc get pvc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE etcd-backup-pvc Bound 51s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE etcd-backup-pvc Bound 51s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意动态 PVC 处于
Pending
状态,直到它们被挂载为止。
如果动态置备的存储不可用,请完成以下步骤来创建本地存储 PVC:
警告如果您删除或丢失对包含存储备份数据的节点的访问,可能会丢失数据。
创建名为
etcd-backup-local-storage.yaml
的StorageClass
CR 文件,其内容如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来应用
StorageClass
CR:oc apply -f etcd-backup-local-storage.yaml
$ oc apply -f etcd-backup-local-storage.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从应用的
StorageClass
中创建一个名为etcd-backup-pv-fs.yaml
的 PV,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 提示运行以下命令来列出可用的节点:
oc get nodes
$ oc get nodes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证 PV 的创建:
oc get pv
$ oc get pv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE etcd-backup-pv-fs 100Gi RWX Delete Available etcd-backup-local-storage 10s
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE etcd-backup-pv-fs 100Gi RWX Delete Available etcd-backup-local-storage 10s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建名为
etcd-backup-pvc.yaml
的 PVC,其内容如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- PVC 可用的存储量。根据您的要求调整这个值。
运行以下命令来应用 PVC:
oc apply -f etcd-backup-pvc.yaml
$ oc apply -f etcd-backup-pvc.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建名为
etcd-recurring-backups.yaml
的自定义资源定义 (CRD) 文件。创建的 CRD 的内容定义自动备份的调度和保留类型。对于带有 15 个保留备份的
RetentionNumber
的默认保留类型,请使用类似以下示例的内容:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 用于重复备份的
CronTab
调度。根据您的需要调整这个值。
要使用基于最大备份数的保留,请在
etcd
键中添加以下键值对:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告已知问题会导致保留备份的数量大于配置的值。
要根据备份的文件大小保留,请使用:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 以 GB 为单位保留备份的最大文件大小。根据您的需要调整这个值。如果未指定,则默认为 10 GB。
警告已知问题会导致保留备份的最大大小超过配置的值 10 GB。
运行以下命令,创建 CRD 定义的 cron 作业:
oc create -f etcd-recurring-backup.yaml
$ oc create -f etcd-recurring-backup.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要查找创建的 cron 任务,请运行以下命令:
oc get cronjob -n openshift-etcd
$ oc get cronjob -n openshift-etcd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow