9.6. 使用 OADP 的托管集群的灾难恢复
您可以使用 OpenShift API for Data Protection (OADP) Operator 在 Amazon Web Services (AWS) 和裸机上执行灾难恢复。
OpenShift API for Data Protection (OADP)的灾难恢复过程涉及以下步骤:
- 准备您的平台,如 Amazon Web Services 或裸机,以使用 OADP
- 备份数据平面工作负载
- 备份 control plane 工作负载
- 使用 OADP 恢复托管集群
9.6.1. 先决条件
您必须在管理集群中满足以下先决条件:
- 已安装 OADP Operator。
- 您创建了存储类。
- 
							您可以使用 cluster-admin权限访问集群。
- 您可以通过目录源访问 OADP 订阅。
- 您可以访问与 OADP 兼容的云存储供应商,如 S3、Microsoft Azure、Google Cloud Platform 或 MinIO。
- 在断开连接的环境中,您可以访问与 OADP 兼容的自托管存储供应商,如 Red Hat OpenShift Data Foundation 或 MinIO。
- 您的托管的 control plane pod 已启动并运行。
9.6.2. 准备 AWS 以使用 OADP
					要为托管集群执行灾难恢复,您可以在 Amazon Web Services (AWS) S3 兼容存储上使用 OpenShift API 进行数据保护 (OADP)。创建 DataProtectionApplication 对象后,会在 openshift-adp 命名空间中创建新的 velero 部署和 node-agent pod。
				
要准备 AWS 以使用 OADP,请参阅"配置 OpenShift API for Data Protection with Multicloud Object Gateway"。
后续步骤
- 备份数据平面工作负载
- 备份 control plane 工作负载
9.6.3. 准备裸机以使用 OADP
					要为托管集群执行灾难恢复,您可以在裸机上使用 OpenShift API 进行数据保护 (OADP)。创建 DataProtectionApplication 对象后,会在 openshift-adp 命名空间中创建新的 velero 部署和 node-agent pod。
				
要准备裸机以使用 OADP,请参阅"配置 OpenShift API for Data Protection with AWS S3 兼容存储"。
后续步骤
- 备份数据平面工作负载
- 备份 control plane 工作负载
9.6.4. 备份数据平面工作负载
如果 data plane 工作负载不重要,您可以跳过这个过程。要使用 OADP Operator 备份数据平面工作负载,请参阅"恢复应用程序"。
后续步骤
- 使用 OADP 恢复托管集群
9.6.5. 备份 control plane 工作负载
					您可以通过创建 Backup 自定义资源 (CR) 来备份 control plane 工作负载。
				
要监控并观察备份过程,请参阅"保留备份和恢复进程"。
流程
- 运行以下命令暂停 - HostedCluster资源的协调:- oc --kubeconfig <management_cluster_kubeconfig_file> \ patch hostedcluster -n <hosted_cluster_namespace> <hosted_cluster_name> \ --type json -p '[{"op": "add", "path": "/spec/pausedUntil", "value": "true"}]'- $ oc --kubeconfig <management_cluster_kubeconfig_file> \ patch hostedcluster -n <hosted_cluster_namespace> <hosted_cluster_name> \ --type json -p '[{"op": "add", "path": "/spec/pausedUntil", "value": "true"}]'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令暂停 - NodePool资源的协调:- oc --kubeconfig <management_cluster_kubeconfig_file> \ patch nodepool -n <hosted_cluster_namespace> <node_pool_name> \ --type json -p '[{"op": "add", "path": "/spec/pausedUntil", "value": "true"}]'- $ oc --kubeconfig <management_cluster_kubeconfig_file> \ patch nodepool -n <hosted_cluster_namespace> <node_pool_name> \ --type json -p '[{"op": "add", "path": "/spec/pausedUntil", "value": "true"}]'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令暂停 - AgentCluster资源的协调:- oc --kubeconfig <management_cluster_kubeconfig_file> \ annotate agentcluster -n <hosted_control_plane_namespace> \ cluster.x-k8s.io/paused=true --all' - $ oc --kubeconfig <management_cluster_kubeconfig_file> \ annotate agentcluster -n <hosted_control_plane_namespace> \ cluster.x-k8s.io/paused=true --all'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令暂停 - AgentMachine资源的协调:- oc --kubeconfig <management_cluster_kubeconfig_file> \ annotate agentmachine -n <hosted_control_plane_namespace> \ cluster.x-k8s.io/paused=true --all' - $ oc --kubeconfig <management_cluster_kubeconfig_file> \ annotate agentmachine -n <hosted_control_plane_namespace> \ cluster.x-k8s.io/paused=true --all'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令,注解 - HostedCluster资源以防止删除托管的 control plane 命名空间:- oc --kubeconfig <management_cluster_kubeconfig_file> \ annotate hostedcluster -n <hosted_cluster_namespace> <hosted_cluster_name> \ hypershift.openshift.io/skip-delete-hosted-controlplane-namespace=true - $ oc --kubeconfig <management_cluster_kubeconfig_file> \ annotate hostedcluster -n <hosted_cluster_namespace> <hosted_cluster_name> \ hypershift.openshift.io/skip-delete-hosted-controlplane-namespace=true- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 创建定义 - BackupCR 的 YAML 文件:- 例 9.1. - backup-control-plane.yaml文件示例- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 将backup_resource_name替换为Backup资源的名称。
- 2
- 选择特定命名空间来备份对象。您必须包含托管集群命名空间和托管的 control plane 命名空间。
- 3
- 将<hosted_cluster_namespace>替换为托管集群命名空间的名称,如clusters。
- 4
- 将<hosted_control_plane_namespace>替换为托管的 control plane 命名空间的名称,如cluster-hosted。
- 5
- 您必须在单独的命名空间中创建infraenv资源。不要在备份过程中删除infraenv资源。
- 6 7
- 启用 CSI 卷快照,并自动将 control plane 工作负载上传到云存储中。
- 8
- 将持久性卷 (PV) 的fs-backup备份方法设置为默认。当您使用 Container Storage Interface (CSI) 卷快照和fs-backup方法的组合时,此设置很有用。
 注意- 如果要使用 CSI 卷快照,您必须在 PV 中添加 - backup.velero.io/backup-volumes-excludes=<pv_name>注解。
- 运行以下命令来应用 - BackupCR:- oc apply -f backup-control-plane.yaml - $ oc apply -f backup-control-plane.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
验证
- 运行以下命令,验证 - status.phase的值是否为- Completed:- oc get backups.velero.io <backup_resource_name> -n openshift-adp -o jsonpath='{.status.phase}'- $ oc get backups.velero.io <backup_resource_name> -n openshift-adp -o jsonpath='{.status.phase}'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
后续步骤
- 使用 OADP 恢复托管集群
9.6.6. 使用 OADP 恢复托管集群
					您可以通过创建 Restore 自定义资源(CR)来恢复托管集群。
				
- 如果您使用 原位(in-place)升级,则 InfraEnv 不需要备用节点。您需要从新的管理集群重新置备 worker 节点。
- 如果使用 替换(replace) 更新,则需要一些备用节点才能部署 worker 节点。
备份托管集群后,您必须销毁它来启动恢复过程。要启动节点置备,您必须在删除托管集群前备份数据平面中的工作负载。
先决条件
- 已完成了使用控制台删除集群中的步骤删除您的托管集群。
- 完成了删除集群后删除剩余的资源中的步骤。
要监控并观察备份过程,请参阅"保留备份和恢复进程"。
流程
- 运行以下命令,验证托管的 control plane 命名空间中没有 pod 和持久性卷声明 (PVC): - oc get pod pvc -n <hosted_control_plane_namespace> - $ oc get pod pvc -n <hosted_control_plane_namespace>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 预期输出 - No resources found - No resources found- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 创建定义 - RestoreCR 的 YAML 文件:- restore-hosted-cluster.yaml文件示例- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 重要- 您必须在单独的命名空间中创建 - infraenv资源。不要在恢复过程中删除- infraenv资源。要重新置备新节点,- infraenv资源是必须的。
- 运行以下命令来应用 - RestoreCR:- oc apply -f restore-hosted-cluster.yaml - $ oc apply -f restore-hosted-cluster.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令,验证 - status.phase的值是否为- Completed:- oc get hostedcluster <hosted_cluster_name> -n <hosted_cluster_namespace> -o jsonpath='{.status.phase}'- $ oc get hostedcluster <hosted_cluster_name> -n <hosted_cluster_namespace> -o jsonpath='{.status.phase}'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 恢复过程完成后,启动您在备份 control plane 工作负载过程中暂停的 - HostedCluster和- NodePool资源的协调:- 运行以下命令启动 - HostedCluster资源的协调:- oc --kubeconfig <management_cluster_kubeconfig_file> \ patch hostedcluster -n <hosted_cluster_namespace> <hosted_cluster_name> \ --type json -p '[{"op": "add", "path": "/spec/pausedUntil", "value": "false"}]'- $ oc --kubeconfig <management_cluster_kubeconfig_file> \ patch hostedcluster -n <hosted_cluster_namespace> <hosted_cluster_name> \ --type json -p '[{"op": "add", "path": "/spec/pausedUntil", "value": "false"}]'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令,启动 - NodePool资源的协调:- oc --kubeconfig <management_cluster_kubeconfig_file> \ patch nodepool -n <hosted_cluster_namespace> <node_pool_name> \ --type json -p '[{"op": "add", "path": "/spec/pausedUntil", "value": "false"}]'- $ oc --kubeconfig <management_cluster_kubeconfig_file> \ patch nodepool -n <hosted_cluster_namespace> <node_pool_name> \ --type json -p '[{"op": "add", "path": "/spec/pausedUntil", "value": "false"}]'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- 启动您在备份 control plane 工作负载过程中暂停的 Agent 供应商资源的协调: - 运行以下命令启动 - AgentCluster资源的协调:- oc --kubeconfig <management_cluster_kubeconfig_file> \ annotate agentcluster -n <hosted_control_plane_namespace> \ cluster.x-k8s.io/paused- --overwrite=true --all - $ oc --kubeconfig <management_cluster_kubeconfig_file> \ annotate agentcluster -n <hosted_control_plane_namespace> \ cluster.x-k8s.io/paused- --overwrite=true --all- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令,启动 - AgentMachine资源的协调:- oc --kubeconfig <management_cluster_kubeconfig_file> \ annotate agentmachine -n <hosted_control_plane_namespace> \ cluster.x-k8s.io/paused- --overwrite=true --all - $ oc --kubeconfig <management_cluster_kubeconfig_file> \ annotate agentmachine -n <hosted_control_plane_namespace> \ cluster.x-k8s.io/paused- --overwrite=true --all- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- 运行以下命令,删除 - HostedCluster资源中的- hypershift.openshift.io/skip-delete-hosted-controlplane-namespace-注解,以避免手动删除托管的 control plane 命名空间:- oc --kubeconfig <management_cluster_kubeconfig_file> \ annotate hostedcluster -n <hosted_cluster_namespace> <hosted_cluster_name> \ hypershift.openshift.io/skip-delete-hosted-controlplane-namespace- \ --overwrite=true --all - $ oc --kubeconfig <management_cluster_kubeconfig_file> \ annotate hostedcluster -n <hosted_cluster_namespace> <hosted_cluster_name> \ hypershift.openshift.io/skip-delete-hosted-controlplane-namespace- \ --overwrite=true --all- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令,将 - NodePool资源扩展到所需的副本数:- oc --kubeconfig <management_cluster_kubeconfig_file> \ scale nodepool -n <hosted_cluster_namespace> <node_pool_name> \ --replicas <replica_count> - $ oc --kubeconfig <management_cluster_kubeconfig_file> \ scale nodepool -n <hosted_cluster_namespace> <node_pool_name> \ --replicas <replica_count>- 1 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 将<replica_count>替换为整数值,如3。
 
9.6.7. 观察备份和恢复过程
当使用 OpenShift API for Data Protection (OADP) 来备份和恢复托管集群时,您可以监控并观察进程。
流程
- 运行以下命令观察备份过程: - watch "oc get backups.velero.io -n openshift-adp <backup_resource_name> -o jsonpath='{.status}'"- $ watch "oc get backups.velero.io -n openshift-adp <backup_resource_name> -o jsonpath='{.status}'"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令观察恢复过程: - watch "oc get restores.velero.io -n openshift-adp <backup_resource_name> -o jsonpath='{.status}'"- $ watch "oc get restores.velero.io -n openshift-adp <backup_resource_name> -o jsonpath='{.status}'"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令观察 Velero 日志: - oc logs -n openshift-adp -ldeploy=velero -f - $ oc logs -n openshift-adp -ldeploy=velero -f- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令,观察所有 OADP 对象的进度: - watch "echo BackupRepositories:;echo;oc get backuprepositories.velero.io -A;echo; echo BackupStorageLocations: ;echo; oc get backupstoragelocations.velero.io -A;echo;echo DataUploads: ;echo;oc get datauploads.velero.io -A;echo;echo DataDownloads: ;echo;oc get datadownloads.velero.io -n openshift-adp; echo;echo VolumeSnapshotLocations: ;echo;oc get volumesnapshotlocations.velero.io -A;echo;echo Backups:;echo;oc get backup -A; echo;echo Restores:;echo;oc get restore -A" - $ watch "echo BackupRepositories:;echo;oc get backuprepositories.velero.io -A;echo; echo BackupStorageLocations: ;echo; oc get backupstoragelocations.velero.io -A;echo;echo DataUploads: ;echo;oc get datauploads.velero.io -A;echo;echo DataDownloads: ;echo;oc get datadownloads.velero.io -n openshift-adp; echo;echo VolumeSnapshotLocations: ;echo;oc get volumesnapshotlocations.velero.io -A;echo;echo Backups:;echo;oc get backup -A; echo;echo Restores:;echo;oc get restore -A"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
9.6.8. 使用 velero CLI 描述备份和恢复资源
					当使用 OpenShift API 进行数据保护时,您可以使用 velero 命令行界面 (CLI) 获取 Backup 和 Restore 资源的更多详情。
				
流程
- 运行以下命令,创建一个别名,以便从容器中使用 - veleroCLI:- alias velero='oc -n openshift-adp exec deployment/velero -c velero -it -- ./velero' - $ alias velero='oc -n openshift-adp exec deployment/velero -c velero -it -- ./velero'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令,获取 - Restore自定义资源 (CR) 的详情:- velero restore describe <restore_resource_name> --details - $ velero restore describe <restore_resource_name> --details- 1 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 将<restore_resource_name>替换为Restore资源的名称。
 
- 运行以下命令,获取 - BackupCR 的详情:- velero restore describe <backup_resource_name> --details - $ velero restore describe <backup_resource_name> --details- 1 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 将<backup_resource_name>替换为Backup资源的名称。