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 false
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
--snapshot-volumes 参数的值
指定为false
。
要了解有关备份资源的更多详细信息,请运行以下命令:
velero describe backup <backup_name> --details
$ velero describe backup <backup_name> --details
1 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> --details
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定恢复的名称。
4.18.1.2. 创建恢复 CR 复制链接链接已复制到粘贴板!
您可以通过创建一个 Restore
CR 来恢复 Backup
自定义资源(CR)。
先决条件
- 您必须安装用于数据保护(OADP)Operator 的 OpenShift API。
-
DataProtectionApplication
CR 必须处于Ready
状态。 -
您必须具有 Velero
Backup
CR。 - 持久性卷 (PV) 容量必须与备份时请求的大小匹配。如果需要,调整请求的大小。
流程
创建一个
Restore
CR,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令验证
Restore
CR 的状态是否为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.sh
cleanup 脚本:bash dc-restic-post-restore.sh -> dc-post-restore.sh
$ bash dc-restic-post-restore.sh -> dc-post-restore.sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在恢复过程中,OADP Velero 插件会缩减
DeploymentConfig
对象,并将 pod 恢复为独立 pod。这是为了防止集群在恢复时立即删除恢复的DeploymentConfig
pod,并允许 restore 和 post-restore hook 在恢复的 pod 上完成其操作。下面显示的清理脚本会删除这些断开连接的 pod,并将任何DeploymentConfig
对象扩展至适当的副本数。例 4.1.
dc-restic-post-restore.sh
cleanup 脚本dc-post-restore.sh Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.18.1.3. 创建恢复 hook 复制链接链接已复制到粘贴板!
您可以通过编辑 Restore
自定义资源 (CR)创建恢复 hook,以便在 pod 中的容器中运行命令。
您可以创建两种类型的恢复 hook:
init
hook 将 init 容器添加到 pod,以便在应用程序容器启动前执行设置任务。如果您恢复 Restic 备份,则会在恢复 hook init 容器前添加
restic-wait
init 容器。-
exec
hook 在恢复的 pod 的容器中运行命令或脚本。
流程
在
Restore
CR 的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 运行。Restore
CR 的状态将是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.apps
Copy 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.apps
Copy to Clipboard Copied! Toggle word wrap Toggle overflow