1.7. OADP 备份
1.7.1. 备份应用程序 复制链接链接已复制到粘贴板!
频繁备份可能会消耗备份存储位置的存储。如果使用非本地备份,请检查备份、保留时间以及持久性卷(PV)的数据量的频率,如 S3 存储桶。因为所有生成的备份在过期前都会保留,因此还会检查调度的 TTL(time to live)设置。
您可以通过创建一个 Backup
自定义资源 (CR) 来备份应用程序。如需更多信息,请参阅创建备份 CR。以下是 Backup
CR 的不同备份类型:
Backup
CR 为 Kubernetes 资源和 S3 对象存储上的内部镜像创建备份文件。
1.7.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
- 指定恢复的名称。
您可以创建备份 hook,以便在备份操作之前或之后运行命令。请参阅创建备份 hook。
您可以通过创建一个 Schedule
CR 而不是 Backup
CR 来调度备份。请参阅使用 Schedule CR 调度备份。
1.7.1.2. 已知问题 复制链接链接已复制到粘贴板!
Red Hat OpenShift Service on AWS 4 强制执行 pod 安全准入(PSA)策略,该策略可以在 Restic 恢复过程中阻止 pod 的就绪状态。
这个问题已在 OADP 1.1.6 和 OADP 1.2.2 版本中解决,因此建议用户升级到这些版本。
1.7.2. 创建备份 CR 复制链接链接已复制到粘贴板!
您可以通过创建 Backup
自定义资源(CR)来备份 Kubernetes 资源、内部镜像和持久性卷(PV)。
先决条件
- 您必须安装用于数据保护(OADP)Operator 的 OpenShift API。
-
DataProtectionApplication
CR 必须处于Ready
状态。 备份位置先决条件:
- 您必须为 Velero 配置 S3 对象存储。
-
您必须在
DataProtectionApplication
CR 中配置了一个备份位置。
快照位置先决条件:
- 您的云供应商必须具有原生快照 API 或支持 Container Storage Interface(CSI)快照。
-
对于 CSI 快照,您必须创建一个
VolumeSnapshotClass
CR 来注册 CSI 驱动程序。 -
您必须在
DataProtectionApplication
CR 中配置了一个卷位置。
流程
输入以下命令来检索
backupStorageLocations
CR:oc get backupstoragelocations.velero.io -n openshift-adp
$ oc get backupstoragelocations.velero.io -n openshift-adp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAMESPACE NAME PHASE LAST VALIDATED AGE DEFAULT openshift-adp velero-sample-1 Available 11s 31m
NAMESPACE NAME PHASE LAST VALIDATED AGE DEFAULT openshift-adp velero-sample-1 Available 11s 31m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个
Backup
CR,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证
Backup
CR 的状态是否为Completed
:oc get backups.velero.io -n openshift-adp <backup> -o jsonpath='{.status.phase}'
$ oc get backups.velero.io -n openshift-adp <backup> -o jsonpath='{.status.phase}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.7.3. 创建备份 hook 复制链接链接已复制到粘贴板!
在执行备份时,可以根据正在备份的 pod,指定在 pod 内要执行的一个或多个命令。
可将命令配置为在任何自定义操作处理(Pre hook)或所有自定义操作完成后执行,且由自定义操作指定的任何其他项目都已备份(Post hook)。
您可以通过编辑备份自定义资源(CR)来创建 Backup
hook 以在 pod 中运行的容器中运行命令。
流程
在
Backup
CR 的spec.hooks
块中添加 hook,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 可选:您可以指定 hook 应用的命名空间。如果没有指定这个值,则 hook 适用于所有命名空间。
- 2
- 可选:您可以指定 hook 不应用到的命名空间。
- 3
- 目前,pod 是唯一可以应用 hook 的支持的资源。
- 4
- 可选:您可以指定 hook 不应用到的资源。
- 5
- 可选:此 hook 仅适用于与标签匹配的对象。如果没有指定这个值,则 hook 适用于所有对象。
- 6
- 备份前要运行的 hook 数组。
- 7
- 可选:如果没有指定容器,该命令将在 pod 的第一个容器中运行。
- 8
- 这是添加
init
容器的入口点。 - 9
- 错误处理允许的值是
Fail
和Continue
。默认值为Fail
。 - 10
- 可选:等待命令运行的时间。默认值为
30s
。 - 11
- 此块定义了在备份后运行的一组 hook,其参数与 pre-backup hook 相同。
1.7.4. 使用 Schedule CR 调度备份 复制链接链接已复制到粘贴板!
调度操作允许您在特定时间创建由 Cron 表达式指定的数据的备份。
您可以通过创建 Schedule
自定义资源(CR)而不是 Backup
CR 来调度备份。
在您的备份调度中留有足够的时间,以便在创建另一个备份前完成了当前的备份。
例如,如果对一个命名空间进行备份通常需要 10 分钟才能完成,则调度的备份频率不应该超过每 15 分钟一次。
先决条件
- 您必须安装用于数据保护(OADP)Operator 的 OpenShift API。
-
DataProtectionApplication
CR 必须处于Ready
状态。
流程
检索
backupStorageLocations
CR:oc get backupStorageLocations -n openshift-adp
$ oc get backupStorageLocations -n openshift-adp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAMESPACE NAME PHASE LAST VALIDATED AGE DEFAULT openshift-adp velero-sample-1 Available 11s 31m
NAMESPACE NAME PHASE LAST VALIDATED AGE DEFAULT openshift-adp velero-sample-1 Available 11s 31m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个
Schedule
CR,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 1
- 调度备份的
cron
表达式,例如0 7 * * *
代表在每天 7:00 执行备份。注意要以特定间隔调度备份,以以下格式输入
<duration_in_minutes>
:schedule: "*/10 * * * *"
schedule: "*/10 * * * *"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在引号 (
" "
) 之间输入分钟值。 - 2
- 要备份的命名空间数组。
- 3
backupStorageLocations
CR 的名称。- 4
- 可选:在 OADP 版本 1.2 及更高版本中,在使用 Restic 进行卷备份时,将
defaultVolumesToFsBackup: true
键值对添加到您的配置中。在 OADP 版本 1.1 中,在使用 Restic 备份卷时添加defaultVolumesToRestic: true
键值对。
验证
在调度的备份运行后验证
Schedule
CR 的状态是否为Completed
:oc get schedule -n openshift-adp <schedule> -o jsonpath='{.status.phase}'
$ oc get schedule -n openshift-adp <schedule> -o jsonpath='{.status.phase}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.7.5. 删除备份 复制链接链接已复制到粘贴板!
您可以通过创建 DeleteBackupRequest
自定义资源 (CR) 或运行 velero backup delete
来删除备份(在以下介绍)。
根据备份的方法,卷备份工件会在不同的时间删除:
- Restic:在删除备份后,工件会在下一个完整的维护周期中删除。
- Container Storage Interface (CSI):当删除备份时,工件会被立即删除。
- Kopia:在删除备份后,工件会在 Kopia 存储库的三个完整维护周期后删除。
1.7.5.1. 通过创建 DeleteBackupRequest CR 来删除备份 复制链接链接已复制到粘贴板!
您可以通过创建一个 DeleteBackupRequest
自定义资源 (CR) 来删除备份。
先决条件
- 您已运行应用程序的备份。
流程
创建
DeleteBackupRequest
CR 清单文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定备份的名称。
应用
DeleteBackupRequest
CR 以删除备份:oc apply -f <deletebackuprequest_cr_filename>
$ oc apply -f <deletebackuprequest_cr_filename>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.7.5.2. 使用 Velero CLI 删除备份 复制链接链接已复制到粘贴板!
您可以使用 Velero CLI 删除备份。
先决条件
- 您已运行应用程序的备份。
- 下载 Velero CLI,并可以访问集群中的 Velero 二进制文件。
流程
要删除备份,请运行以下 Velero 命令:
velero backup delete <backup_name> -n openshift-adp
$ velero backup delete <backup_name> -n openshift-adp
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定备份的名称。
1.7.5.3. 关于 Kopia 仓库维护 复制链接链接已复制到粘贴板!
有两种 Kopia 存储库维护类型:
- 快速维护
- 每小时运行一次,以保持索引 Blob (n) 数量较低。大量索引对 Kopia 操作的性能会造成负面影响。
- 在没有确定存在同一元数据的另一个副本的情况下,请勿从仓库中删除任何元数据。
- 完整维护
- 每 24 小时运行一次,以对不再需要仓库内容进行垃圾回收处理。
-
snapshot-gc
是一个完整的维护任务,它会找到所有无法从快照清单访问的文件和目录列表,并将其标记为已删除。 - 完整维护操作有较高的资源成不,因为它需要扫描集群中所有活跃的快照中的所有目录。
1.7.5.3.1. OADP 中的 Kopia 维护 复制链接链接已复制到粘贴板!
repo-maintain-job
作业是在安装 OADP 的命名空间中执行的,如下例所示:
pod/repo-maintain-job-173...2527-2nbls 0/1 Completed 0 168m pod/repo-maintain-job-173....536-fl9tm 0/1 Completed 0 108m pod/repo-maintain-job-173...2545-55ggx 0/1 Completed 0 48m
pod/repo-maintain-job-173...2527-2nbls 0/1 Completed 0 168m
pod/repo-maintain-job-173....536-fl9tm 0/1 Completed 0 108m
pod/repo-maintain-job-173...2545-55ggx 0/1 Completed 0 48m
您可以检查 repo-maintain-job
的日志,以了解清理以及在备份对象存储中删除工件的更多详情。当需要进行下一个完整维护时,您可以在 repo-maintain-job
中看到一个相关的信息,如下例所示:
not due for full maintenance cycle until 2024-00-00 18:29:4
not due for full maintenance cycle until 2024-00-00 18:29:4
将对象从备份对象存储中删除需要已成功执行了三个完整维护周期。这意味着,要删除备份对象存储中的所有工件,最多需要 72 小时。
1.7.5.4. 删除备份仓库 复制链接链接已复制到粘贴板!
在删除备份后,当 Kopia 仓库维护周期删除了相关工件后,备份不再被任何元数据或清单对象引用。然后,您可以删除 backuprepository
自定义资源 (CR) 来完成备份删除过程。
先决条件
- 您已删除应用程序的备份。
- 在备份被删除后,您最多等待 72 小时。在此期间 Kopia 可以运行仓库维护周期。
流程
要获取备份的备份仓库 CR 的名称,请运行以下命令:
oc get backuprepositories.velero.io -n openshift-adp
$ oc get backuprepositories.velero.io -n openshift-adp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要删除备份仓库 CR,请运行以下命令:
oc delete backuprepository <backup_repository_name> -n openshift-adp
$ oc delete backuprepository <backup_repository_name> -n openshift-adp
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定上一步中备份仓库的名称。