4.18. OADP 恢复
4.18.1. 恢复应用程序 复制链接链接已复制到粘贴板!
您可以通过创建一个 Restore 自定义资源 (CR) 来恢复应用程序备份。请参阅创建 Restore CR。
您可以通过编辑 Restore CR 创建恢复 hook,以便在 pod 中的容器中运行命令。请参阅创建恢复 hook。
4.18.1.1. 在运行备份和恢复前预览资源 复制链接链接已复制到粘贴板!
OADP 根据类型、命名空间或标签备份应用程序资源。这意味着您可以在备份完成后查看资源。同样,您可以在恢复操作完成后根据命名空间、持久性卷(PV)或标签查看恢复的对象。要提前预览资源,您可以空运行备份和恢复操作。
先决条件
- 已安装 OADP Operator。
流程
要在运行实际备份前预览备份中包含的资源,请运行以下命令:
velero backup create <backup-name> --snapshot-volumes false
$ velero backup create <backup-name> --snapshot-volumes false1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
--snapshot-volumes 参数的值指定为false。
要了解有关备份资源的更多详细信息,请运行以下命令:
velero describe backup <backup_name> --details
$ velero describe backup <backup_name> --details1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定备份的名称。
要在运行实际恢复前预览恢复中包含的资源,请运行以下命令:
velero restore create --from-backup <backup-name>
$ velero restore create --from-backup <backup-name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定为查看备份资源而创建的备份名称。
重要velero restore create命令在集群中创建恢复资源。在查看资源后,您必须删除作为恢复的一部分创建的资源。要了解有关恢复资源的更多详细信息,请运行以下命令:
velero describe restore <restore_name> --details
$ velero describe restore <restore_name> --details1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定恢复的名称。
4.18.1.2. 创建恢复 CR 复制链接链接已复制到粘贴板!
您可以通过创建一个 Restore CR 来恢复 Backup 自定义资源(CR)。
当您恢复使用 azurefile-csi 存储类的有状态应用程序时,恢复操作会保留在 Finalizing 阶段。
先决条件
- 您必须安装用于数据保护(OADP)Operator 的 OpenShift API。
-
DataProtectionApplicationCR 必须处于Ready状态。 -
您必须具有 Velero
BackupCR。 - 持久性卷 (PV) 容量必须与备份时请求的大小匹配。如果需要,调整请求的大小。
流程
创建一个
RestoreCR,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令验证
RestoreCR 的状态是否为Completed:oc get restores.velero.io -n openshift-adp <restore> -o jsonpath='{.status.phase}'$ oc get restores.velero.io -n openshift-adp <restore> -o jsonpath='{.status.phase}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令验证备份资源是否已恢复:
oc get all -n <namespace>
$ oc get all -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 备份的命名空间。
如果您使用卷恢复
DeploymentConfig,或使用 post-restore hook,请输入以下命令运行dc-post-restore.shcleanup 脚本:bash dc-restic-post-restore.sh -> dc-post-restore.sh
$ bash dc-restic-post-restore.sh -> dc-post-restore.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在恢复过程中,OADP Velero 插件会缩减
DeploymentConfig对象,并将 pod 恢复为独立 pod。这是为了防止集群在恢复时立即删除恢复的DeploymentConfigpod,并允许 restore 和 post-restore hook 在恢复的 pod 上完成其操作。下面显示的清理脚本会删除这些断开连接的 pod,并将任何DeploymentConfig对象扩展至适当的副本数。例 4.1.
dc-restic-post-restore.shcleanup 脚本dc-post-restore.sh Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.18.1.3. 创建恢复 hook 复制链接链接已复制到粘贴板!
您可以通过编辑 Restore 自定义资源 (CR)创建恢复 hook,以便在 pod 中的容器中运行命令。
您可以创建两种类型的恢复 hook:
inithook 将 init 容器添加到 pod,以便在应用程序容器启动前执行设置任务。如果您恢复 Restic 备份,则会在恢复 hook init 容器前添加
restic-waitinit 容器。-
exechook 在恢复的 pod 的容器中运行命令或脚本。
流程
在
RestoreCR 的spec.hooks块中添加 hook,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 可选: hook 应用的命名空间数组。如果没有指定这个值,则 hook 适用于所有命名空间。
- 2
- 目前,pod 是唯一可以应用 hook 的支持的资源。
- 3
- 可选:此 hook 仅适用于与标签选择器匹配的对象。
- 4
- 可选:超时指定 Velero 等待
initContainers完成的最大时间长度。 - 5
- 可选:如果没有指定容器,该命令将在 pod 的第一个容器中运行。
- 6
- 这是正在添加的 init 容器的入口点。
- 7
- 可选:等待容器就绪的时间。这应该足够长,以便容器可以启动,在相同容器中的任何以前的 hook 可以完成。如果没有设置,恢复过程会无限期等待。
- 8
- 可选:等待命令运行的时间。默认值为
30s。 - 9
- 错误处理的允许值为
Fail和Continue:-
Continue: 只记录命令失败。 -
Fail: 任何 pod 中的任何容器中没有更多恢复 hook 运行。RestoreCR 的状态将是PartiallyFailed。
-
在文件系统备份(FSB)恢复操作中,引用 ImageStream 的 Deployment 资源没有被正确恢复。恢复运行 FSB 的 pod,postHook 会被提前终止。
这是因为在恢复操作中,OpenShift 控制器使用更新的 ImageStreamTag 哈希更新 Deployment 资源中的 spec.template.spec.containers[0].image 字段。更新会触发新 pod 的推出,终止 velero 运行 FSB 和后恢复 hook 的 pod。有关镜像流触发器的更多信息,请参阅"镜像流更改的触发更新"。
这个行为的临时解决方案分为两个步骤:
首先,执行排除
Deployment资源的恢复,例如:velero restore create <RESTORE_NAME> \ --from-backup <BACKUP_NAME> \ --exclude-resources=deployment.apps
$ velero restore create <RESTORE_NAME> \ --from-backup <BACKUP_NAME> \ --exclude-resources=deployment.appsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 第一次恢复成功后,通过包含这些资源来执行第二次恢复,例如:
velero restore create <RESTORE_NAME> \ --from-backup <BACKUP_NAME> \ --include-resources=deployment.apps
$ velero restore create <RESTORE_NAME> \ --from-backup <BACKUP_NAME> \ --include-resources=deployment.appsCopy to Clipboard Copied! Toggle word wrap Toggle overflow