4.8. OADP 备份


4.8.1. 备份应用程序

频繁备份可能会消耗备份存储位置的存储。如果使用非本地备份,请检查备份、保留时间以及持久性卷(PV)的数据量的频率,如 S3 存储桶。因为所有生成的备份在过期前都会保留,因此还会检查调度的 TTL(time to live)设置。

您可以通过创建一个 Backup 自定义资源 (CR) 来备份应用程序。如需更多信息,请参阅创建备份 CR

  • Backup CR 为 Kubernetes 资源和 S3 对象存储上的内部镜像创建备份文件。
  • 如果您的云供应商有原生快照 API 或支持 CSI 快照,则 Backup CR 通过创建快照来备份持久性卷 (PV)。有关使用 CSI 快照的更多信息,请参阅使用 CSI 快照备份持久性卷

有关 CSI 卷快照的更多信息,请参阅 CSI 卷快照

重要

CloudStorage API(它自动为对象存储创建一个存储桶)只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

注意

当使用 CloudStorage 对象,并希望 OADP 使用 CloudStorage API 自动创建 S3 存储桶以用作 BackupStorageLocation 时,CloudStorage API 只是一个技术预览功能。

CloudStorage API 支持通过指定一个现有的 S3 存储桶来手动创建 BackupStorageLocation 对象。自动创建 S3 存储桶的 CloudStorage API 目前只为 AWS S3 存储启用。

PodVolumeRestore 失败并显示 …​/.snapshot: read-only file system 错误

…​/.snapshot 目录是一个快照复制目录,由多个 NFS 服务器使用。该目录默认具有只读访问权限,因此 Velero 无法恢复到这个目录中。

不要向 Velero 提供对 .snapshot 目录的写入权限,并禁用客户端对这个目录的访问。

重要

OpenShift API for Data Protection (OADP) 不支持对由其他软件创建的卷快照进行备份。

4.8.1.1. 在运行备份和恢复前预览资源

OADP 根据类型、命名空间或标签备份应用程序资源。这意味着您可以在备份完成后查看资源。同样,您可以在恢复操作完成后根据命名空间、持久性卷(PV)或标签查看恢复的对象。要提前预览资源,您可以空运行备份和恢复操作。

先决条件

  • 已安装 OADP Operator。

流程

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

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

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

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

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

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

    $ velero describe restore <restore_name> --details 1
    1
    指定恢复的名称。

您可以创建备份 hook,以便在备份操作之前或之后运行命令。请参阅创建备份 hook

您可以通过创建一个 Schedule CR 而不是 Backup CR 来调度备份。请参阅使用 Schedule CR 调度备份

4.8.1.2. 已知问题

OpenShift Container Platform 4.16 强制执行一个 pod 安全准入 (PSA) 策略,该策略可能会在 Restic 恢复过程中阻止 pod 的就绪度。 

这个问题已在 OADP 1.1.6 和 OADP 1.2.2 版本中解决,因此建议用户升级到这些版本。

如需更多信息,请参阅因为更改 PSA 策略,在 OCP 4.15 上进行 Restic 恢复部分失败

4.8.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

    输出示例

    NAMESPACE       NAME              PHASE       LAST VALIDATED   AGE   DEFAULT
    openshift-adp   velero-sample-1   Available   11s              31m

  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 5
      labelSelector: 6
        matchLabels:
          app: <label_1>
          app: <label_2>
          app: <label_3>
      orLabelSelectors: 7
      - matchLabels:
          app: <label_1>
          app: <label_2>
          app: <label_3>
    1
    指定要备份的命名空间数组。
    2
    可选:指定一个要包含在备份中的资源的数组。资源可以是缩写方式(例如,'po' 代表 'pods')或完全限定的方式。如果未指定,则会包含所有资源。
    3
    可选:指定要从备份中排除的资源数组。资源可以是缩写方式(例如,'po' 代表 'pods')或完全限定的方式。
    4
    指定 backupStorageLocations CR 的名称。
    5
    ttl 字段定义所创建的备份和备份数据的保留时间。例如,如果您使用 Restic 作为备份工具,则备份的持久性卷(PV)的数据项和数据内容会存储,直到备份过期为止。但是,存储这些数据会在目标备份位置消耗更多空间。使用频繁备份使用额外的存储,即使在其他未过期的备份之前也会创建它们,这些存储可能会超时。
    6
    具有所有指定标签的备份资源的 {key,value} 对映射。
    7
    具有一个或多个指定标签的备份资源的 {key,value} 对映射。
  3. 验证 Backup CR 的状态是否为 Completed

    $ oc get backups.velero.io -n openshift-adp <backup> -o jsonpath='{.status.phase}'

4.8.3. 使用 CSI 快照备份持久性卷

在创建 Backup CR 前,您可以编辑云存储的 VolumeSnapshotClass 自定义资源(CR) 来使用 Container Storage Interface (CSI) 快照备份持久性卷,请参阅 CSI 卷快照

如需更多信息,请参阅创建备份 CR

先决条件

  • 云供应商必须支持 CSI 快照。
  • 您必须在 DataProtectionApplication CR 中启用 CSI。

流程

  • metadata.labels.velero.io/csi-volumesnapshot-class: "true" 键值对添加到 VolumeSnapshotClass CR:

    配置文件示例

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: <volume_snapshot_class_name>
      labels:
        velero.io/csi-volumesnapshot-class: "true" 1
      annotations:
        snapshot.storage.kubernetes.io/is-default-class: true 2
    driver: <csi_driver>
    deletionPolicy: <deletion_policy_type> 3

    1
    必须设置为 true
    2
    如果要在具有相同驱动程序的另一个集群中恢复这个卷,请确保将 snapshot.storage.kubernetes.io/is-default-class 参数设置为 false,而不是将其设置为 true。否则,恢复会部分失败。
    3
    OADP 支持 CSI 和 Data Mover 备份和恢复的 RetainDelete 删除策略类型。

后续步骤

  • 现在,您可以创建一个 Backup CR。

4.8.4. 使用文件系统备份对应用程序进行备份:Kopia 或 Restic

您可以使用 OADP 从卷的文件系统备份和恢复附加到 pod 的 Kubernetes 卷。这个过程称为文件系统备份 (FSB) 或 Pod 卷备份 (PVB)。它通过使用来自开源备份工具 Restic 或 Kopia 的模块来完成。

如果您的云供应商不支持快照,或者应用程序位于 NFS 数据卷中,您可以使用 FSB 创建备份。

注意

默认情况下,Restic 由 OADP Operator 安装。如果您希望安装 Kopia

FSB 与 OADP 集成提供了一种解决方案,用于备份和恢复几乎任何类型的 Kubernetes 卷。这个集成是 OADP 的一个额外功能,不是现有功能的替代品。

您可以通过编辑 Backup 备份自定义资源 (CR) 来使用 Kopia 或 Restic 对 Kubernetes 资源、内部镜像和持久性卷备份。

您不需要在 DataProtectionApplication CR 中指定快照位置。

注意

在 OADP 版本 1.3 及更高版本中,您可以使用 Kopia 或 Restic 备份应用程序。

对于 Built-in DataMover,您必须使用 Kopia。

在 OADP 版本 1.2 及更早版本中,您只能使用 Restic 备份应用程序。

重要

FSB 不支持对 hostPath 卷进行备份。如需更多信息,请参阅 FSB 限制

PodVolumeRestore 失败并显示 …​/.snapshot: read-only file system 错误

…​/.snapshot 目录是一个快照复制目录,由多个 NFS 服务器使用。该目录默认具有只读访问权限,因此 Velero 无法恢复到这个目录中。

不要向 Velero 提供对 .snapshot 目录的写入权限,并禁用客户端对这个目录的访问。

先决条件

  • 您必须安装用于数据保护(OADP)Operator 的 OpenShift API。
  • 您不能通过将 DataProtectionApplication CR 中的 spec.configuration.nodeAgent.enable to false 来禁用默认的 nodeAgent 安装。
  • 您必须在 DataProtectionApplication CR 中将 spec.configuration.nodeAgent.uploaderType 设置为 kopiarestic 来选择 Kopia 或 Restic 作为 uploader。
  • DataProtectionApplication CR 必须处于 Ready 状态。

流程

  • 创建 Backup CR,如下例所示:

    apiVersion: velero.io/v1
    kind: Backup
    metadata:
      name: <backup>
      labels:
        velero.io/storage-location: default
      namespace: openshift-adp
    spec:
      defaultVolumesToFsBackup: true 1
    ...
    1
    在 OADP 版本 1.2 及更高版本中,在 spec 块中添加 defaultVolumesToFsBackup: true 设置。在 OADP 版本 1.1 中,添加 defaultVolumesToRestic: true

4.8.5. 创建备份 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
    ...
    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 相同。

4.8.6. 使用 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

    输出示例

    NAMESPACE       NAME              PHASE       LAST VALIDATED   AGE   DEFAULT
    openshift-adp   velero-sample-1   Available   11s              31m

  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 5
    EOF
    注意

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

      schedule: "*/10 * * * *"

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

    1
    调度备份的 cron 表达式,例如 0 7 * * * 代表在每天 7:00 执行备份。
    2
    要备份的命名空间数组。
    3
    backupStorageLocations CR 的名称。
    4
    可选:在 OADP 版本 1.2 及更高版本中,在使用 Restic 进行卷备份时,将 defaultVolumesToFsBackup: true 键值对添加到您的配置中。在 OADP 版本 1.1 中,在使用 Restic 备份卷时添加 defaultVolumesToRestic: true 键值对。
    5
    ttl 字段定义所创建的备份和备份数据的保留时间。例如,如果您使用 Restic 作为备份工具,则备份的持久性卷(PV)的数据项和数据内容会存储,直到备份过期为止。但是,存储这些数据会在目标备份位置消耗更多空间。使用频繁备份使用额外的存储,即使在其他未过期的备份之前也会创建它们,这些存储可能会超时。
  3. 在调度的备份运行后验证 Schedule CR 的状态是否为 Completed

    $ oc get schedule -n openshift-adp <schedule> -o jsonpath='{.status.phase}'

4.8.7. 删除备份

您可以通过创建 DeleteBackupRequest 自定义资源(CR)或运行 velero 备份 delete 命令来删除备份

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

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

4.8.7.1. 通过创建 DeleteBackupRequest CR 来删除备份

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

先决条件

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

流程

  1. 创建 DeleteBackupRequest CR 清单文件:

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

    $ oc apply -f <deletebackuprequest_cr_filename>

4.8.7.2. 使用 Velero CLI 删除备份

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

先决条件

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

流程

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

    $ velero backup delete <backup_name> -n openshift-adp 1
    1
    指定备份的名称。

4.8.7.3. 关于 Kopia 存储库维护

Kopia 存储库维护有两种类型:

快速维护
  • 每小时运行,以保持索引 Blob (n)低的数量。大量索引对 Kopia 操作的性能造成负面影响。
  • 在确保存在同一元数据的另一个副本的情况下,请勿从存储库中删除任何元数据。
完整维护
  • 每 24 小时运行一次,以执行不再需要的垃圾回收存储库内容。
  • snapshot-gc 是完整的维护任务,找到所有无法从快照清单访问的文件和目录列表,并将其标记为已删除。
  • 完整维护是资源成本化的操作,因为它需要扫描集群中所有活跃的快照中的所有目录。
4.8.7.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

您可以检查 repo-maintain-job 的日志,以了解清理以及在备份对象存储中删除工件的更多详情。您可以找到备注,如以下示例所示,在下一个完整周期维护时 repo-maintain-job 所示:

not due for full maintenance cycle until 2024-00-00 18:29:4
重要

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

4.8.7.4. 删除备份存储库

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

先决条件

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

流程

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

    $ oc get backuprepositories.velero.io -n openshift-adp
  2. 要删除备份存储库 CR,请运行以下命令:

    $ oc delete backuprepository <backup_repository_name> -n openshift-adp 1
    1
    指定上一步中备份存储库的名称。

4.8.8. 关于 Kopia

Kopia 是一个快速安全的开源备份和恢复工具,可让您创建数据的加密快照,并将快照保存到您选择的远程或云存储中。

Kopia 支持网络和本地存储位置,以及许多云或远程存储位置,包括:

  • Amazon S3 以及与 S3 兼容的任何云存储
  • Azure Blob Storage
  • Google Cloud Storage 平台

Kopia 对快照使用可内容访问的存储:

  • 快照始终是以增量方式进行的;已包含在之前快照中的数据不会重新上传到存储库。仅当文件被修改时,文件才会再次上传到存储库。
  • 存储的数据会被去除重复数据;如果存在同一文件的多个副本,则仅存储其中一个文件。
  • 如果文件被移动或重命名,Kopia 可以识别它们具有相同的内容,且不会重新上传它们。

4.8.8.1. OADP 与 Kopia 集成

除了 Restic 外,OADP 1.3 还支持 Kopia 作为 pod 卷备份的备份机制。您需要在安装时通过在 DataProtectionApplication 自定义资源(CR) 中设置 uploaderType 字段来选择其中一个。可能的值为 restickopia。如果没有指定 uploaderType,OADP 1.3 默认为使用 Kopia 作为备份机制。数据会从一个统一的存储库中读取或写入。

以下示例显示了配置了使用 Kopia 的 DataProtectionApplication CR:

apiVersion: oadp.openshift.io/v1alpha1
kind: DataProtectionApplication
metadata:
  name: dpa-sample
spec:
  configuration:
    nodeAgent:
      enable: true
      uploaderType: kopia
# ...
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.