5.13. 使用 OpenShift Virtualization 配置 OADP


您可以通过安装 OADP Operator 并配置备份位置,使用 OpenShift Virtualization 安装 OpenShift API for Data Protection (OADP)。然后,您可以安装数据保护应用程序。

使用 OpenShift API for Data Protection 来备份和恢复虚拟机。

注意

OpenShift API for Data Protection with OpenShift Virtualization 支持以下备份和恢复存储选项:

  • 容器存储接口 (CSI) 备份
  • 使用 DataMover 进行容器存储接口 (CSI) 备份

排除以下存储选项:

  • 文件系统备份和恢复
  • 卷快照备份和恢复

如需更多信息,请参阅使用文件系统备份备份应用程序: Kopia 或 Restic

要在受限网络环境中安装 OADP Operator,您必须首先禁用默认软件目录源并镜像 Operator 目录。详情请参阅在断开连接的环境中使用 Operator Lifecycle Manager

作为集群管理员,您可以通过安装 OADP Operator 来安装 OADP。

OADP Operator 的最新版本安装 Velero 1.16

先决条件

  • 使用具有 cluster-admin 角色的用户访问集群。

流程

  1. 根据您的存储供应商说明安装 OADP Operator。
  2. 使用 kubevirtopenshift OADP 插件安装数据保护应用程序(DPA)。
  3. 通过创建 Backup 自定义资源(CR) 来备份虚拟机。

    警告

    红帽支持仅限于以下选项:

    • CSI 备份
    • 使用 DataMover 的 CSI 备份。

您可以通过创建一个 Restore CR来恢复 Backup CR。

5.13.1.2. 安装数据保护应用程序

您可以通过创建 DataProtectionApplication API 的实例来安装数据保护应用程序(DPA)。

先决条件

  • 您必须安装 OADP Operator。
  • 您必须将对象存储配置为备份位置。
  • 如果使用快照来备份 PV,云供应商必须支持原生快照 API 或 Container Storage Interface(CSI)快照。
  • 如果备份和快照位置使用相同的凭证,您必须创建带有默认名称 cloud-credentialsSecret

    注意

    如果您不想在安装过程中指定备份或快照位置,您可以使用空 credentials-velero 文件创建默认 Secret。如果没有默认 Secret,安装将失败。

流程

  1. Ecosystem Installed Operators,然后选择 OADP Operator。
  2. Provided APIs 下,点 DataProtectionApplication 框中的 Create 实例
  3. YAML View 并更新 DataProtectionApplication 清单的参数:

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    metadata:
      name: <dpa_sample>
      namespace: openshift-adp 
    1
    
    spec:
      configuration:
        velero:
          defaultPlugins:
            - kubevirt 
    2
    
            - gcp 
    3
    
            - csi 
    4
    
            - openshift 
    5
    
          resourceTimeout: 10m 
    6
    
        nodeAgent: 
    7
    
          enable: true 
    8
    
          uploaderType: kopia 
    9
    
          podConfig:
            nodeSelector: <node_selector> 
    10
    
      backupLocations:
        - velero:
            provider: gcp 
    11
    
            default: true
            credential:
              key: cloud
              name: <default_secret> 
    12
    
            objectStorage:
              bucket: <bucket_name> 
    13
    
              prefix: <prefix> 
    14
    Copy to Clipboard Toggle word wrap
    1
    OADP 的默认命名空间是 openshift-adp。命名空间是一个变量,可配置。
    2
    OpenShift Virtualization 需要 kubevirt 插件。
    3
    为备份供应商指定插件,如 gcp (如果存在)。
    4
    csi 插件是使用 CSI 快照备份 PV 所必需的。csi 插件使用 Velero CSI beta 快照 API。您不需要配置快照位置。
    5
    openshift 插件是必需的。
    6
    指定在超时发生前等待多个 Velero 资源的分钟,如 Velero CRD 可用、volumeSnapshot 删除和备份存储库可用。默认值为 10m。
    7
    将管理请求路由到服务器的管理代理。
    8
    如果要启用 nodeAgent 并执行文件系统备份,则将此值设置为 true
    9
    输入 kopia 作为您的上传程序,以使用 Built-in DataMover。nodeAgent 部署守护进程集,这意味着 nodeAgent pod 在每个工作节点上运行。您可以通过在 Backup CR 中添加 spec.defaultVolumesToFsBackup: true 来配置文件系统备份。
    10
    指定 Kopia 可用的节点。默认情况下,Kopia 在所有节点上运行。
    11
    指定备份供应商。
    12
    如果备份供应商使用一个默认插件,为 Secret 指定正确的默认名称,如 cloud-credentials-gcp。如果指定了一个自定义名称,则使用自定义名称用于备份位置。如果没有指定 Secret 名称,则使用默认名称。
    13
    指定存储桶作为备份存储位置。如果存储桶不是 Velero 备份的专用存储桶,您必须指定一个前缀。
    14
    如果存储桶用于多个目的,请为 Velero 备份指定一个前缀,如 velero
  4. Create

验证

  1. 运行以下命令,查看 OpenShift API for Data Protection (OADP) 资源来验证安装:

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

    输出示例

    NAME                                                     READY   STATUS    RESTARTS   AGE
    pod/oadp-operator-controller-manager-67d9494d47-6l8z8    2/2     Running   0          2m8s
    pod/node-agent-9cq4q                                     1/1     Running   0          94s
    pod/node-agent-m4lts                                     1/1     Running   0          94s
    pod/node-agent-pv4kr                                     1/1     Running   0          95s
    pod/velero-588db7f655-n842v                              1/1     Running   0          95s
    
    NAME                                                       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
    service/oadp-operator-controller-manager-metrics-service   ClusterIP   172.30.70.140    <none>        8443/TCP   2m8s
    service/openshift-adp-velero-metrics-svc                   ClusterIP   172.30.10.0      <none>        8085/TCP   8h
    
    NAME                        DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
    daemonset.apps/node-agent    3         3         3       3            3           <none>          96s
    
    NAME                                                READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/oadp-operator-controller-manager    1/1     1            1           2m9s
    deployment.apps/velero                              1/1     1            1           96s
    
    NAME                                                           DESIRED   CURRENT   READY   AGE
    replicaset.apps/oadp-operator-controller-manager-67d9494d47    1         1         1       2m9s
    replicaset.apps/velero-588db7f655                              1         1         1       96s
    Copy to Clipboard Toggle word wrap

  2. 运行以下命令,验证 DataProtectionApplication (DPA) 是否已协调:

    $ oc get dpa dpa-sample -n openshift-adp -o jsonpath='{.status}'
    Copy to Clipboard Toggle word wrap

    输出示例

    {"conditions":[{"lastTransitionTime":"2023-10-27T01:23:57Z","message":"Reconcile complete","reason":"Complete","status":"True","type":"Reconciled"}]}
    Copy to Clipboard Toggle word wrap

  3. 验证 type 被设置为 Reconciled
  4. 运行以下命令,验证备份存储位置并确认 PHASEAvailable

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

    输出示例

    NAME           PHASE       LAST VALIDATED   AGE     DEFAULT
    dpa-sample-1   Available   1s               3d16h   true
    Copy to Clipboard Toggle word wrap

警告

如果您在虚拟机重启后马上运行 Microsoft Windows 虚拟机(VM)备份,备份可能会失败,并显示 PartiallyFailed 错误。这是因为,在虚拟机启动后,Microsoft Windows Volume Shadow Copy Service (VSS)和客户机代理(GA)服务未就绪。VSS 和 GA 服务未就绪会导致备份失败。在这种情况下,在虚拟机启动后几分钟后再重试备份。

5.13.1.3. 备份单个虚拟机

如果您的命名空间具有多个虚拟机(VM),并且只想备份其中之一,您可以使用标签选择器过滤备份中需要包含的虚拟机。您可以使用 app: vmname 标签过滤虚拟机。

先决条件

  • 已安装 OADP Operator。
  • 在命名空间中运行了多个虚拟机。
  • 您已在 DataProtectionApplication (DPA) 自定义资源(CR)中添加了 kubevirt 插件。
  • 您已在 DataProtectionApplication CR 和 BackupStorageLocation 中配置了 BackupStorageLocation CR。

流程

  1. 配置 Backup CR,如下例所示:

    Backup CR 示例

    apiVersion: velero.io/v1
    kind: Backup
    metadata:
      name: vmbackupsingle
      namespace: openshift-adp
    spec:
      snapshotMoveData: true
      includedNamespaces:
      - <vm_namespace> 
    1
    
      labelSelector:
        matchLabels:
          app: <vm_app_name> 
    2
    
      storageLocation: <backup_storage_location_name> 
    3
    Copy to Clipboard Toggle word wrap

    1
    指定创建虚拟机的命名空间的名称。
    2
    指定需要备份的虚拟机名称。
    3
    指定 BackupStorageLocation CR 的名称。
  2. 要创建 Backup CR,请运行以下命令:

    $ oc apply -f <backup_cr_file_name> 
    1
    Copy to Clipboard Toggle word wrap
    1
    指定 Backup CR 文件的名称。

5.13.1.4. 恢复单个虚拟机

使用 Backup 自定义资源(CR)中的标签选择器备份单个虚拟机(VM)后,您可以创建一个 Restore CR 并将其指向备份。此恢复操作会恢复单个虚拟机。

先决条件

  • 已安装 OADP Operator。
  • 已使用标签选择器备份单个虚拟机。

流程

  1. 配置 Restore CR,如下例所示:

    Restore CR 示例

    apiVersion: velero.io/v1
    kind: Restore
    metadata:
      name: vmrestoresingle
      namespace: openshift-adp
    spec:
      backupName: vmbackupsingle 
    1
    
      restorePVs: true
    Copy to Clipboard Toggle word wrap

    1
    指定单个虚拟机的备份名称。
  2. 要恢复单个虚拟机,请运行以下命令:

    $ oc apply -f <restore_cr_file_name> 
    1
    Copy to Clipboard Toggle word wrap
    1
    指定 Restore CR 文件的名称。
    注意

    在恢复一个虚拟机的备份时,您可能会注意到为恢复分配的 Ceph 存储容量高于预期。只有在 kubevirt 恢复过程中,且虚拟机的卷类型是 block 时才会出现这个问题。

    使用 rbd sparsify 工具在目标卷上回收空间。如需了解更多详细信息,请参阅目标卷上的回收空间

如果您有包含多个虚拟机(VM)的备份,且只想恢复一个虚拟机,您可以使用 Restore CR 中的 LabelSelectors 部分来选择要恢复的虚拟机。为确保附加到虚拟机的持久性卷声明(PVC)已被正确恢复,恢复的虚拟机不会处于 Provisioning 状态,请使用 app: <vm_name>kubevirt.io/created-by 标签。要匹配 kubevirt.io/created-by 标签,请使用虚拟机的 DataVolume 的 UID。

先决条件

  • 已安装 OADP Operator。
  • 您已标记了需要备份的虚拟机。
  • 您有多个虚拟机的备份。

流程

  1. 在备份多个虚拟机前,运行以下命令确保虚拟机已标记:

    $ oc label vm <vm_name> app=<vm_name> -n openshift-adp
    Copy to Clipboard Toggle word wrap
  2. Restore CR 中配置标签选择器,如下例所示:

    Restore CR 示例

    apiVersion: velero.io/v1
    kind: Restore
    metadata:
      name: singlevmrestore
      namespace: openshift-adp
    spec:
      backupName: multiplevmbackup
      restorePVs: true
      LabelSelectors:
        - matchLabels:
            kubevirt.io/created-by: <datavolume_uid> 
    1
    
        - matchLabels:
            app: <vm_name> 
    2
    Copy to Clipboard Toggle word wrap

    1
    指定您要恢复的虚拟机的 DataVolume 的 UID。例如,b6…​53a-ddd7-4d9d-9407-a0c…​e5.
    2
    指定您要恢复的虚拟机的名称。例如,test-vm
  3. 要恢复虚拟机,请运行以下命令:

    $ oc apply -f <restore_cr_file_name> 
    1
    Copy to Clipboard Toggle word wrap
    1
    指定 Restore CR 文件的名称。

5.13.1.6. 使用客户端 burst 和 QPS 设置配置 DPA

burst 设置决定在应用限制前可以发送到 velero 服务器的请求数量。达到 burst 限制后,查询每秒 (QPS) 设置决定了每秒可以发送多少个额外请求。

您可以使用 burst 和 QPS 值配置数据保护应用程序 (DPA) 来设置 velero 服务器的 burst 和 QPS 值。您可以使用 DPA 的 dpa.configuration.velero.client-burstdpa.configuration.velero.client-qps 字段来设置 burst 和 QPS 值。

先决条件

  • 已安装 OADP Operator。

流程

  • 在 DPA 中配置 client-burstclient-qps 字段,如下例所示:

    数据保护应用程序示例

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    metadata:
      name: test-dpa
      namespace: openshift-adp
    spec:
      backupLocations:
        - name: default
          velero:
            config:
              insecureSkipTLSVerify: "true"
              profile: "default"
              region: <bucket_region>
              s3ForcePathStyle: "true"
              s3Url: <bucket_url>
            credential:
              key: cloud
              name: cloud-credentials
            default: true
            objectStorage:
              bucket: <bucket_name>
              prefix: velero
            provider: aws
      configuration:
        nodeAgent:
          enable: true
          uploaderType: restic
        velero:
          client-burst: 500 
    1
    
          client-qps: 300 
    2
    
          defaultPlugins:
            - openshift
            - aws
            - kubevirt
    Copy to Clipboard Toggle word wrap

    1
    指定 client-burst 值。在本例中,client-burst 字段设置为 500。
    2
    指定 client-qps 值。在本例中,client-qps 字段设置为 300。

5.13.1.7. 以非 root 和非特权用户配置节点代理

要增强节点代理安全性,您可以使用 DataProtectionApplication (DPA) 自定义资源 (CR) 中的 spec.configuration.velero.disableFsBackup 设置将 OADP Operator 节点代理 daemonset 配置为以非 root 用户身份运行。

通过将 spec.configuration.velero.disableFsBackup 设置为 true,节点代理安全上下文将 root 文件系统设置为只读,并将 privileged 标志设置为 false

注意

spec.configuration.velero.disableFsBackup 设置为 true 可增强节点代理安全性,方法是删除特权容器并强制实施只读根文件系统。

但是,它还使用 Kopia 禁用文件系统备份 (FSB)。如果您的工作负载依赖 FSB 备份不支持原生快照的卷,您应该评估 disableFsBackup 配置是否适合您的用例。

先决条件

  • 已安装 OADP Operator。

流程

  • 在 DPA 中配置 disableFsBackup 字段,如下例所示:

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    metadata:
      name: ts-dpa
      namespace: openshift-adp
    spec:
      backupLocations:
      - velero:
          credential:
            key: cloud
            name: cloud-credentials
          default: true
          objectStorage:
            bucket: <bucket_name>
            prefix: velero
          provider: gcp
      configuration:
        nodeAgent: 
    1
    
          enable: true
          uploaderType: kopia
        velero:
          defaultPlugins:
          - csi
          - gcp
          - openshift
          disableFsBackup: true 
    2
    Copy to Clipboard Toggle word wrap
    1
    在 DPA 中启用节点代理。
    2
    disableFsBackup 字段设置为 true

验证

  1. 运行以下命令,验证节点代理安全上下文是否被设置为以非 root 身份运行,并且 root 文件系统是 readOnly

    $ oc get daemonset node-agent -o yaml
    Copy to Clipboard Toggle word wrap

    输出示例如下:

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      ...
      name: node-agent
      namespace: openshift-adp
      ...
    spec:
      ...
      template:
        metadata:
          ...
        spec:
          containers:
          ...
            securityContext:
              allowPrivilegeEscalation: false 
    1
    
              capabilities:
                drop:
                - ALL
              privileged: false 
    2
    
              readOnlyRootFilesystem: true 
    3
    
            ...
          nodeSelector:
            kubernetes.io/os: linux
          os:
            name: linux
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext:
            runAsNonRoot: true 
    4
    
            seccompProfile:
              type: RuntimeDefault
          serviceAccount: velero
          serviceAccountName: velero
          ....
    Copy to Clipboard Toggle word wrap
    1
    allowPrivilegeEscalation 字段为 false。
    2
    privileged 字段为 false。
    3
    root 文件系统是只读的。
    4
    节点代理以非 root 用户身份运行。

5.13.1.8. 配置节点代理和节点标签

Data Protection Application (DPA) 使用 nodeSelector 字段来选择哪些节点可以运行节点代理。nodeSelector 字段是推荐的节点选择约束形式。

流程

  1. 通过添加自定义标签,在您选择的任何节点上运行节点代理:

    $ oc label node/<node_name> node-role.kubernetes.io/nodeAgent=""
    Copy to Clipboard Toggle word wrap
    注意

    任何指定的标签都需要与每个节点上的标签匹配。

  2. DPA.spec.configuration.nodeAgent.podConfig.nodeSelector 字段中使用相同的自定义标签,用于标记节点。

    configuration:
      nodeAgent:
        enable: true
        podConfig:
          nodeSelector:
            node-role.kubernetes.io/nodeAgent: ""
    Copy to Clipboard Toggle word wrap

    以下示例是 nodeSelector 的反模式,除非标签 'node-role.kubernetes.io/infra: ""''node-role.kubernetes.io/worker: ""' 都位于节点上,否则无法工作:

        configuration:
          nodeAgent:
            enable: true
            podConfig:
              nodeSelector:
                node-role.kubernetes.io/infra: ""
                node-role.kubernetes.io/worker: ""
    Copy to Clipboard Toggle word wrap

5.13.1.9. 配置节点代理负载关联性

您可以使用 DataProtectionApplication (DPA) 自定义资源 (CR) 的 spec.podConfig.nodeSelector 对象将节点代理 pod 调度到特定的节点上。

请参阅以下示例,您可以在其中将节点代理 pod 调度到带有标签 label.io/role: cpu-1other-label.io/other-role: cpu-2 的节点上。

...
spec:
  configuration:
    nodeAgent:
      enable: true
      uploaderType: kopia
      podConfig:
        nodeSelector:
          label.io/role: cpu-1
          other-label.io/other-role: cpu-2
        ...
Copy to Clipboard Toggle word wrap

您可以使用 DPA spec 中的 nodeagent.loadAffinity 对象对节点代理 pod 调度添加更多限制。

先决条件

  • 您必须以具有 cluster-admin 权限的用户身份登录。
  • 已安装 OADP Operator。
  • 您已配置了 DPA CR。

流程

  • 配置 DPA spec nodegent.loadAffinity 对象,如下例所示。

    在示例中,您可以确保节点代理 pod 仅调度到具有标签 label.io/role: cpu-1 的节点上,标签 label.io/hostnamenode1node2 匹配。

    ...
    spec:
      configuration:
        nodeAgent:
          enable: true
          loadAffinity: 
    1
    
            - nodeSelector:
                matchLabels:
                  label.io/role: cpu-1
                matchExpressions: 
    2
    
                  - key: label.io/hostname
                    operator: In
                    values:
                      - node1
                      - node2
                      ...
    Copy to Clipboard Toggle word wrap
    1
    通过添加 matchLabelsmatchExpressions 对象来配置 loadAffinity 对象。
    2
    配置 matchExpressions 对象,以对节点代理 pod 调度添加限制。

5.13.1.10. 节点代理负载均衡指南

使用以下准则在 DataProtectionApplication (DPA) 自定义资源 (CR) 中配置节点代理 loadAffinity 对象。

  • 使用 spec.nodeagent.podConfig.nodeSelector 对象进行简单节点匹配。
  • 对于更复杂的场景,使用没有 podConfig.nodeSelector 对象的 loadAffinity.nodeSelector 对象。
  • 您可以使用 podConfig.nodeSelectorloadAffinity.nodeSelector 对象,但 loadAffinity 对象必须与 podConfig 对象相比相等或更严格。在这种情况下,podConfig.nodeSelector 标签必须是 loadAffinity.nodeSelector 对象中使用的标签的子集。
  • 如果您在 DPA 中配置了 podConfig.nodeSelectorloadAffinity.nodeSelector 对象,则无法使用 matchExpressionsmatchLabels 字段。
  • 请参见以下示例在 DPA 中配置 podConfig.nodeSelectorloadAffinity.nodeSelector 对象。

    ...
    spec:
      configuration:
        nodeAgent:
          enable: true
          uploaderType: kopia
          loadAffinity:
            - nodeSelector:
                matchLabels:
                  label.io/location: 'US'
                  label.io/gpu: 'no'
          podConfig:
            nodeSelector:
              label.io/gpu: 'no'
    Copy to Clipboard Toggle word wrap

5.13.1.11. 配置节点代理负载并发

您可以控制在集群中的每个节点上可以同时运行的最大节点代理操作数量。

您可以使用 Data Protection Application (DPA) 的以下字段之一配置它:

  • globalConfig :定义跨所有节点中的节点代理的默认并发限制。
  • perNodeConfig: 根据 nodeSelector 标签指定特定节点的不同并发限制。这为其中某些节点可能具有不同的作用或角色的环境提供了灵活性。

先决条件

  • 您必须以具有 cluster-admin 权限的用户身份登录。

流程

  1. 如果要对特定节点使用负载并发性,请在这些节点中添加标签:

    $ oc label node/<node_name> label.io/instance-type='large'
    Copy to Clipboard Toggle word wrap
  2. 为您的 DPA 实例配置负载并发字段:

      configuration:
        nodeAgent:
          enable: true
          uploaderType: kopia
          loadConcurrency:
            globalConfig: 1 
    1
    
            perNodeConfig:
            - nodeSelector:
                  matchLabels:
                     label.io/instance-type: large 
    2
    
              number: 3 
    3
    Copy to Clipboard Toggle word wrap
    1
    全局并发数。默认值为 1,这意味着不能并发,只允许一个负载。globalConfig 值没有限制。
    2
    针对一个节点的并发标签。
    3
    针对一个节点的并发数。您可以根据实例类型和大小指定每个节点的并发数,例如基于数量类型和大小。针对一个节点的并发数量的范围与全局并发数相同。如果配置文件包含针对一个节点的并发数和全局并发数,则针对一个节点的并发数字具有更高的优先权。

5.13.1.12. 配置存储库维护

OADP 存储库维护是一个后台作业,您可以独立于节点代理 pod 配置它。这意味着,您可以将存储库维护 pod 调度到节点代理正在运行或没有运行的节点上。

只有在使用 Kopia 作为备份存储库时,您只能在 DataProtectionApplication (DPA)自定义资源(CR)中使用存储库维护作业关联性配置。

您可以选择在全局级别上配置负载关联性,会影响所有存储库。或者,您可以为每个存储库配置负载关联性。您还可以使用全局和每个存储库配置的组合。

先决条件

  • 您必须以具有 cluster-admin 权限的用户身份登录。
  • 已安装 OADP Operator。
  • 您已配置了 DPA CR。

流程

  • 使用以下方法之一在 DPA spec 中配置 loadAffinity 对象:

    • 全局配置:为所有存储库配置负载关联性,如下例所示:

      ...
      spec:
        configuration:
          repositoryMaintenance: 
      1
      
            global: 
      2
      
              podResources:
                cpuRequest: "100m"
                cpuLimit: "200m"
                memoryRequest: "100Mi"
                memoryLimit: "200Mi"
              loadAffinity:
                - nodeSelector:
                    matchLabels:
                      label.io/gpu: 'no'
                    matchExpressions:
                      - key: label.io/location
                        operator: In
                        values:
                          - US
                          - EU
      Copy to Clipboard Toggle word wrap
      1
      配置 repositoryMaintenance 对象,如示例所示。
      2
      使用 global 对象为所有存储库配置负载关联性。
    • per-repository 配置 :为每个存储库配置负载关联性,如下例所示:

      ...
      spec:
        configuration:
          repositoryMaintenance:
            myrepositoryname: 
      1
      
              loadAffinity:
                - nodeSelector:
                    matchLabels:
                      label.io/cpu: 'yes'
      Copy to Clipboard Toggle word wrap
      1
      为每个存储库配置 repositoryMaintenance 对象。

5.13.1.13. 配置 Velero 负载关联性

对于每个 OADP 部署,有一个 Velero pod,其主要目的是调度 Velero 工作负载。要调度 Velero pod,您可以在 DataProtectionApplication (DPA) 自定义资源 (CR) spec 中使用 velero.podConfig.nodeSelectorvelero.loadAffinity 对象。

使用 podConfig.nodeSelector 对象将 Velero pod 分配给特定的节点。您还可以为 pod 级别关联性和反关联性配置 velero.loadAffinity 对象。

OpenShift 调度程序应用规则并执行 Velero pod 部署调度。

先决条件

  • 您必须以具有 cluster-admin 权限的用户身份登录。
  • 已安装 OADP Operator。
  • 您已配置了 DPA CR。

流程

  • 在 DPA spec 中配置 velero.podConfig.nodeSelectorvelero.loadAffinity 对象,如下例所示:

    • velero.podConfig.nodeSelector 对象配置:

      ...
      spec:
        configuration:
          velero:
            podConfig:
              nodeSelector:
                some-label.io/custom-node-role: backup-core
      Copy to Clipboard Toggle word wrap
    • velero.loadAffinity 对象配置:

      ...
      spec:
        configuration:
          velero:
            loadAffinity:
              - nodeSelector:
                  matchLabels:
                    label.io/gpu: 'no'
                  matchExpressions:
                    - key: label.io/location
                      operator: In
                      values:
                        - US
                        - EU
      Copy to Clipboard Toggle word wrap

5.13.1.14. 覆盖 DPA 中的 imagePullPolicy 设置

在 OADP 1.4.0 或更早版本中,Operator 会将 Velero 和节点代理 pod 的 imagePullPolicy 字段设置为 Always

在 OADP 1.4.1 或更高版本中,Operator 首先检查每个镜像是否有 sha256sha512 摘要,并相应地设置 imagePullPolicy 字段:

  • 如果镜像有摘要,Operator 会将 imagePullPolicy 设置为 IfNotPresent
  • 如果镜像没有摘要,Operator 会将 imagePullPolicy 设置为 Always

您还可以使用 Data Protection Application (DPA)中的 spec.imagePullPolicy 字段覆盖 imagePullPolicy 字段。

先决条件

  • 已安装 OADP Operator。

流程

  • 在 DPA 中配置 spec.imagePullPolicy 字段,如下例所示:

    数据保护应用程序示例

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    metadata:
      name: test-dpa
      namespace: openshift-adp
    spec:
      backupLocations:
        - name: default
          velero:
            config:
              insecureSkipTLSVerify: "true"
              profile: "default"
              region: <bucket_region>
              s3ForcePathStyle: "true"
              s3Url: <bucket_url>
            credential:
              key: cloud
              name: cloud-credentials
            default: true
            objectStorage:
              bucket: <bucket_name>
              prefix: velero
            provider: aws
      configuration:
        nodeAgent:
          enable: true
          uploaderType: kopia
        velero:
          defaultPlugins:
            - openshift
            - aws
            - kubevirt
            - csi
      imagePullPolicy: Never 
    1
    Copy to Clipboard Toggle word wrap

    1
    指定 imagePullPolicy 的值。在本例中,imagePullPolicy 字段设置为 Never

5.13.1.15. 关于增量备份支持

OADP 支持对容器化和 OpenShift Virtualization 工作负载进行文件系统持久性卷的增量备份。下表总结了对文件系统备份 (FSB)、Container Storage Interface (CSI) 和 CSI Data Mover 的支持:

Expand
表 5.4. OADP 备份支持容器化工作负载的列表
卷模式FSB - ResticFSB - KopiaCSICSI Data Mover

Filesystem

S [1], I [2]

S [1], I [2]

S [1]

S [1], I [2]

Block

N [3]

N [3]

S [1]

S [1], I [2]

Expand
表 5.5. OADP 备份支持 OpenShift Virtualization 工作负载列表
卷模式FSB - ResticFSB - KopiaCSICSI Data Mover

Filesystem

N [3]

N [3]

S [1]

S [1], I [2]

Block

N [3]

N [3]

S [1]

S [1], I [2]

  1. 支持的备份
  2. 支持的增量备份
  3. 不支持
注意

CSI Data Mover 备份使用 Kopia,无论 uploaderType 是什么。

重要

红帽只支持 OADP 版本 1.3.0 及更新的版本,以及 OpenShift Virtualization 版本 4.14 及更新的版本。

在 1.3.0 前 OADP 版本不支持备份和恢复 OpenShift Virtualization。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat