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。

流程

  1. 要在运行实际备份前预览备份中包含的资源,请运行以下命令:

    $ velero backup create <backup-name> --snapshot-volumes false 
    1
    Copy to Clipboard Toggle word wrap
    1
    --snapshot-volumes 参数的值 指定为 false
  2. 要了解有关备份资源的更多详细信息,请运行以下命令:

    $ velero describe backup <backup_name> --details 
    1
    Copy to Clipboard Toggle word wrap
    1
    指定备份的名称。
  3. 要在运行实际恢复前预览恢复中包含的资源,请运行以下命令:

    $ velero restore create --from-backup <backup-name> 
    1
    Copy to Clipboard Toggle word wrap
    1
    指定为查看备份资源而创建的备份名称。
    重要

    velero restore create 命令在集群中创建恢复资源。在查看资源后,您必须删除作为恢复的一部分创建的资源。

  4. 要了解有关恢复资源的更多详细信息,请运行以下命令:

    $ velero describe restore <restore_name> --details 
    1
    Copy to Clipboard Toggle word wrap
    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 中配置了一个卷位置。

流程

  1. 输入以下命令来检索 backupStorageLocations CR:

    $ oc get backupstoragelocations.velero.io -n openshift-adp
    Copy to Clipboard Toggle word wrap

    输出示例

    NAMESPACE       NAME              PHASE       LAST VALIDATED   AGE   DEFAULT
    openshift-adp   velero-sample-1   Available   11s              31m
    Copy to Clipboard Toggle word wrap

  2. 创建一个 Backup CR,如下例所示:

    apiVersion: velero.io/v1
    kind: Backup
    metadata:
      name: <backup>
      labels:
        velero.io/storage-location: default
      namespace: openshift-adp
    spec:
      hooks: {}
      includedNamespaces:
      - <namespace> 
    1
    
      includedResources: [] 
    2
    
      excludedResources: [] 
    3
    
      storageLocation: <velero-sample-1> 
    4
    
      ttl: 720h0m0s
      labelSelector: 
    5
    
        matchLabels:
          app: <label_1>
          app: <label_2>
          app: <label_3>
      orLabelSelectors: 
    6
    
      - matchLabels:
          app: <label_1>
          app: <label_2>
          app: <label_3>
    Copy to Clipboard Toggle word wrap
    1
    指定要备份的命名空间数组。
    2
    可选:指定一个要包含在备份中的资源的数组。资源可以是缩写方式(例如,'po' 代表 'pods')或完全限定的方式。如果未指定,则会包含所有资源。
    3
    可选:指定要从备份中排除的资源数组。资源可以是缩写方式(例如,'po' 代表 'pods')或完全限定的方式。
    4
    指定 backupStorageLocations CR 的名称。
    5
    具有所有指定标签的备份资源的 {key,value} 对映射。
    6
    具有一个或多个指定标签的备份资源的 {key,value} 对映射。
  3. 验证 Backup CR 的状态是否为 Completed

    $ oc get backups.velero.io -n openshift-adp <backup> -o jsonpath='{.status.phase}'
    Copy to Clipboard Toggle word wrap

1.7.3. 创建备份 hook

在执行备份时,可以根据正在备份的 pod,指定在 pod 内要执行的一个或多个命令。

可将命令配置为在任何自定义操作处理(Pre hook)或所有自定义操作完成后执行,且由自定义操作指定的任何其他项目都已备份(Post hook)。

您可以通过编辑备份自定义资源(CR)来创建 Backup hook 以在 pod 中运行的容器中运行命令。

流程

  • Backup CR 的 spec.hooks 块中添加 hook,如下例所示:

    apiVersion: velero.io/v1
    kind: Backup
    metadata:
      name: <backup>
      namespace: openshift-adp
    spec:
      hooks:
        resources:
          - name: <hook_name>
            includedNamespaces:
            - <namespace> 
    1
    
            excludedNamespaces: 
    2
    
            - <namespace>
            includedResources: []
            - pods 
    3
    
            excludedResources: [] 
    4
    
            labelSelector: 
    5
    
              matchLabels:
                app: velero
                component: server
            pre: 
    6
    
              - exec:
                  container: <container> 
    7
    
                  command:
                  - /bin/uname 
    8
    
                  - -a
                  onError: Fail 
    9
    
                  timeout: 30s 
    10
    
            post: 
    11
    
    ...
    Copy to Clipboard Toggle word wrap
    1
    可选:您可以指定 hook 应用的命名空间。如果没有指定这个值,则 hook 适用于所有命名空间。
    2
    可选:您可以指定 hook 不应用到的命名空间。
    3
    目前,pod 是唯一可以应用 hook 的支持的资源。
    4
    可选:您可以指定 hook 不应用到的资源。
    5
    可选:此 hook 仅适用于与标签匹配的对象。如果没有指定这个值,则 hook 适用于所有对象。
    6
    备份前要运行的 hook 数组。
    7
    可选:如果没有指定容器,该命令将在 pod 的第一个容器中运行。
    8
    这是添加 init 容器的入口点。
    9
    错误处理允许的值是 FailContinue。默认值为 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 状态。

流程

  1. 检索 backupStorageLocations CR:

    $ oc get backupStorageLocations -n openshift-adp
    Copy to Clipboard Toggle word wrap

    输出示例

    NAMESPACE       NAME              PHASE       LAST VALIDATED   AGE   DEFAULT
    openshift-adp   velero-sample-1   Available   11s              31m
    Copy to Clipboard Toggle word wrap

  2. 创建一个 Schedule CR,如下例所示:

    $ cat << EOF | oc apply -f -
    apiVersion: velero.io/v1
    kind: Schedule
    metadata:
      name: <schedule>
      namespace: openshift-adp
    spec:
      schedule: 0 7 * * * 
    1
    
      template:
        hooks: {}
        includedNamespaces:
        - <namespace> 
    2
    
        storageLocation: <velero-sample-1> 
    3
    
        defaultVolumesToFsBackup: true 
    4
    
        ttl: 720h0m0s
    EOF
    Copy to Clipboard Toggle word wrap
1
调度备份的 cron 表达式,例如 0 7 * * * 代表在每天 7:00 执行备份。
注意

要以特定间隔调度备份,以以下格式输入 <duration_in_minutes>

  schedule: "*/10 * * * *"
Copy to Clipboard Toggle word wrap

在引号 (" ") 之间输入分钟值。

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}'
    Copy to Clipboard Toggle word wrap

1.7.5. 删除备份

您可以通过创建 DeleteBackupRequest 自定义资源 (CR) 或运行 velero backup delete 来删除备份(在以下介绍)。

根据备份的方法,卷备份工件会在不同的时间删除:

  • Restic:在删除备份后,工件会在下一个完整的维护周期中删除。
  • Container Storage Interface (CSI):当删除备份时,工件会被立即删除。
  • Kopia:在删除备份后,工件会在 Kopia 存储库的三个完整维护周期后删除。

您可以通过创建一个 DeleteBackupRequest 自定义资源 (CR) 来删除备份。

先决条件

  • 您已运行应用程序的备份。

流程

  1. 创建 DeleteBackupRequest CR 清单文件:

    apiVersion: velero.io/v1
    kind: DeleteBackupRequest
    metadata:
      name: deletebackuprequest
      namespace: openshift-adp
    spec:
      backupName: <backup_name> 
    1
    Copy to Clipboard Toggle word wrap
    1
    指定备份的名称。
  2. 应用 DeleteBackupRequest CR 以删除备份:

    $ oc apply -f <deletebackuprequest_cr_filename>
    Copy to Clipboard Toggle word wrap

1.7.5.2. 使用 Velero CLI 删除备份

您可以使用 Velero CLI 删除备份。

先决条件

  • 您已运行应用程序的备份。
  • 下载 Velero CLI,并可以访问集群中的 Velero 二进制文件。

流程

  • 要删除备份,请运行以下 Velero 命令:

    $ velero backup delete <backup_name> -n openshift-adp 
    1
    Copy to Clipboard Toggle word wrap
    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
Copy to Clipboard Toggle word wrap

您可以检查 repo-maintain-job 的日志,以了解清理以及在备份对象存储中删除工件的更多详情。当需要进行下一个完整维护时,您可以在 repo-maintain-job 中看到一个相关的信息,如下例所示:

not due for full maintenance cycle until 2024-00-00 18:29:4
Copy to Clipboard Toggle word wrap
重要

将对象从备份对象存储中删除需要已成功执行了三个完整维护周期。这意味着,要删除备份对象存储中的所有工件,最多需要 72 小时。

1.7.5.4. 删除备份仓库

在删除备份后,当 Kopia 仓库维护周期删除了相关工件后,备份不再被任何元数据或清单对象引用。然后,您可以删除 backuprepository 自定义资源 (CR) 来完成备份删除过程。

先决条件

  • 您已删除应用程序的备份。
  • 在备份被删除后,您最多等待 72 小时。在此期间 Kopia 可以运行仓库维护周期。

流程

  1. 要获取备份的备份仓库 CR 的名称,请运行以下命令:

    $ oc get backuprepositories.velero.io -n openshift-adp
    Copy to Clipboard Toggle word wrap
  2. 要删除备份仓库 CR,请运行以下命令:

    $ oc delete backuprepository <backup_repository_name> -n openshift-adp 
    1
    Copy to Clipboard Toggle word wrap
    1
    指定上一步中备份仓库的名称。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat