×

您可以通过安装 OADP 运算符来安装用于 Microsoft Azure 的 OpenShift 数据保护 API (OADP)。该运算符将安装 Velero 1.14

从 OADP 1.0.4 开始,所有 OADP 1.0.z 版本只能用作容器迁移工具包运算符的依赖项,并且不能作为独立运算符使用。

您可以为 Velero 配置 Azure,创建一个默认的 Secret,然后安装数据保护应用程序。更多详细信息,请参见 安装 OADP 运算符

要在受限网络环境中安装 OADP 运算符,您必须首先禁用默认的 OperatorHub 源并镜像运算符目录。有关详细信息,请参见 在断开连接的环境中使用运算符生命周期管理器

配置 Microsoft Azure

您为 OpenShift 数据保护 API (OADP) 配置 Microsoft Azure。

先决条件

使用 Azure 服务的工具应始终具有受限权限,以确保 Azure 资源安全。因此,Azure 提供服务主体,而不是让应用程序以完全特权的用户身份登录。Azure 服务主体是可以与应用程序、托管服务或自动化工具一起使用的名称。

此身份用于访问资源。

  • 创建服务主体

  • 使用服务主体和密码登录

  • 使用服务主体和证书登录

  • 管理服务主体角色

  • 使用服务主体创建 Azure 资源

  • 重置服务主体凭据

更多详细信息,请参见 使用 Azure CLI 创建 Azure 服务主体

关于备份和快照位置及其密钥

您在DataProtectionApplication自定义资源 (CR) 中指定备份和快照位置及其密钥。

备份位置

您可以指定与 AWS S3 兼容的对象存储作为备份位置,例如:多云对象网关;Red Hat Container Storage;Ceph RADOS 网关(也称为 Ceph 对象网关);Red Hat OpenShift Data Foundation;或 MinIO。

Velero 将 OpenShift Container Platform 资源、Kubernetes 对象和内部镜像作为存档文件备份到对象存储中。

快照位置

如果您使用云提供商的原生快照 API 来备份持久卷,则必须将云提供商指定为快照位置。

如果您使用容器存储接口 (CSI) 快照,则无需指定快照位置,因为您将创建一个VolumeSnapshotClass CR 来注册 CSI 驱动程序。

如果您使用文件系统备份 (FSB),则无需指定快照位置,因为 FSB 会将文件系统备份到对象存储中。

密钥

如果备份和快照位置使用相同的凭据,或者您不需要快照位置,则创建一个默认的Secret

如果备份和快照位置使用不同的凭据,则创建两个密钥对象。

  • 备份位置的自定义Secret,您在DataProtectionApplication CR 中指定。

  • 快照位置的默认Secret,在DataProtectionApplication CR 中没有引用。

数据保护应用程序需要一个默认的Secret。否则,安装将失败。

如果您不想在安装期间指定备份或快照位置,您可以创建一个包含空credentials-velero文件的默认Secret

创建默认 Secret

如果您的备份和快照位置使用相同的凭据,或者您不需要快照位置,则创建一个默认的Secret

Secret的默认名称为cloud-credentials-azure

DataProtectionApplication自定义资源 (CR) 需要一个默认的Secret。否则,安装将失败。如果未指定备份位置Secret的名称,则使用默认名称。

如果您不想在安装期间使用备份位置凭据,您可以使用空credentials-velero文件创建一个具有默认名称的Secret

先决条件
  • 您的对象存储和云存储(如有)必须使用相同的凭据。

  • 您必须为 Velero 配置对象存储。

  • 您必须以正确的格式为对象存储创建一个credentials-velero文件。

步骤
  • 创建一个具有默认名称的Secret

    $ oc create secret generic cloud-credentials-azure -n openshift-adp --from-file cloud=credentials-velero

安装数据保护应用程序时,Secret会在DataProtectionApplication CR 的spec.backupLocations.credential块中引用。

为不同的凭据创建密钥

如果您的备份和快照位置使用不同的凭据,则必须创建两个Secret对象。

  • 具有自定义名称的备份位置Secret。自定义名称在DataProtectionApplication自定义资源 (CR) 的spec.backupLocations块中指定。

  • 具有默认名称cloud-credentials-azure的快照位置Secret。此Secret未在DataProtectionApplication CR 中指定。

步骤
  1. 为快照位置创建一个适合您云提供商的格式的credentials-velero文件。

  2. 为快照位置创建一个具有默认名称的Secret

    $ oc create secret generic cloud-credentials-azure -n openshift-adp --from-file cloud=credentials-velero
  3. 为备份位置创建一个适合您对象存储的格式的credentials-velero文件。

  4. 为备份位置创建一个具有自定义名称的Secret

    $ oc create secret generic <custom_secret> -n openshift-adp --from-file cloud=credentials-velero
  5. 将具有自定义名称的Secret添加到DataProtectionApplication CR,如下例所示。

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    metadata:
      name: <dpa_sample>
      namespace: openshift-adp
    spec:
    ...
      backupLocations:
        - velero:
            config:
              resourceGroup: <azure_resource_group>
              storageAccount: <azure_storage_account_id>
              subscriptionId: <azure_subscription_id>
              storageAccountKeyEnvVar: AZURE_STORAGE_ACCOUNT_ACCESS_KEY
            credential:
              key: cloud
              name: <custom_secret> (1)
            provider: azure
            default: true
            objectStorage:
              bucket: <bucket_name>
              prefix: <prefix>
      snapshotLocations:
        - velero:
            config:
              resourceGroup: <azure_resource_group>
              subscriptionId: <azure_subscription_id>
              incremental: "true"
            provider: azure
    1 具有自定义名称的备份位置Secret

配置数据保护应用程序

您可以通过设置 Velero 资源分配或启用自签名 CA 证书来配置数据保护应用程序。

设置 Velero CPU 和内存资源分配

您可以通过编辑DataProtectionApplication自定义资源 (CR) 清单来设置Velero pod 的 CPU 和内存资源分配。

先决条件
  • 您必须已安装用于数据保护的 OpenShift API (OADP) 运算符。

步骤
  • 编辑DataProtectionApplication CR 清单中spec.configuration.velero.podConfig.ResourceAllocations块中的值,如下例所示。

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    metadata:
      name: <dpa_sample>
    spec:
    # ...
      configuration:
        velero:
          podConfig:
            nodeSelector: <node_selector> (1)
            resourceAllocations: (2)
              limits:
                cpu: "1"
                memory: 1024Mi
              requests:
                cpu: 200m
                memory: 256Mi
    1 指定要提供给 Velero podSpec 的节点选择器。
    2 列出的resourceAllocations用于平均使用情况。

Kopia 是 OADP 1.3 及更高版本中的一个选项。您可以使用 Kopia 进行文件系统备份,对于使用内置数据移动器的 Data Mover 案例,Kopia 是您的唯一选项。

Kopia 比 Restic 更耗费资源,您可能需要相应地调整 CPU 和内存需求。

使用nodeSelector字段选择哪些节点可以运行节点代理。nodeSelector字段是最简单的推荐节点选择约束形式。指定的任何标签都必须与每个节点上的标签匹配。

更多详情,请参见配置节点代理和节点标签

启用自签名 CA 证书

您必须通过编辑DataProtectionApplication自定义资源 (CR) 清单来启用对象存储的自签名 CA 证书,以防止出现certificate signed by unknown authority错误。

先决条件
  • 您必须已安装用于数据保护的 OpenShift API (OADP) 运算符。

步骤
  • 编辑DataProtectionApplication CR 清单的spec.backupLocations.velero.objectStorage.caCert参数和spec.backupLocations.velero.config参数。

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    metadata:
      name: <dpa_sample>
    spec:
    # ...
      backupLocations:
        - name: default
          velero:
            provider: aws
            default: true
            objectStorage:
              bucket: <bucket>
              prefix: <prefix>
              caCert: <base64_encoded_cert_string> (1)
            config:
              insecureSkipTLSVerify: "false" (2)
    # ...
    1 指定 Base64 编码的 CA 证书字符串。
    2 insecureSkipTLSVerify配置可以设置为"true""false"。如果设置为"true",则禁用 SSL/TLS 安全性。如果设置为"false",则启用 SSL/TLS 安全性。

将 CA 证书与 Velero 部署的 Velero 命令别名一起使用

您可能希望通过为其创建别名来使用 Velero CLI,而无需在您的系统上本地安装它。

先决条件
  • 您必须以具有cluster-admin角色的用户身份登录到 OpenShift Container Platform 集群。

  • 您必须安装 OpenShift CLI(oc)。

    1. 要使用 Velero 别名命令,请运行以下命令

      $ alias velero='oc -n openshift-adp exec deployment/velero -c velero -it -- ./velero'
    2. 运行以下命令检查别名是否有效

      示例
      $ velero version
      Client:
      	Version: v1.12.1-OADP
      	Git commit: -
      Server:
      	Version: v1.12.1-OADP
    3. 要使用 CA 证书与该命令一起使用,您可以通过运行以下命令将证书添加到 Velero 部署中

      $ CA_CERT=$(oc -n openshift-adp get dataprotectionapplications.oadp.openshift.io <dpa-name> -o jsonpath='{.spec.backupLocations[0].velero.objectStorage.caCert}')
      
      $ [[ -n $CA_CERT ]] && echo "$CA_CERT" | base64 -d | oc exec -n openshift-adp -i deploy/velero -c velero -- bash -c "cat > /tmp/your-cacert.txt" || echo "DPA BSL has no caCert"
      $ velero describe backup <backup_name> --details --cacert /tmp/<your_cacert>.txt
    4. 要获取备份日志,请运行以下命令

      $ velero backup logs  <backup_name>  --cacert /tmp/<your_cacert.txt>

      您可以使用这些日志查看无法备份的资源的错误和警告。

    5. 如果 Velero pod 重启,/tmp/your-cacert.txt 文件将消失,您必须通过重新运行上一步中的命令来重新创建 /tmp/your-cacert.txt 文件。

    6. 您可以通过运行以下命令检查 /tmp/your-cacert.txt 文件是否仍存在于您存储它的文件位置中

      $ oc exec -n openshift-adp -i deploy/velero -c velero -- bash -c "ls /tmp/your-cacert.txt"
      /tmp/your-cacert.txt

在未来版本的 OpenShift API for Data Protection (OADP) 中,我们计划将证书挂载到 Velero pod,以便不需要此步骤。

安装数据保护应用程序

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

先决条件
  • 您必须安装 OADP 运算符。

  • 您必须将对象存储配置为备份位置。

  • 如果您使用快照来备份 PV,您的云提供商必须支持原生快照 API 或容器存储接口 (CSI) 快照。

  • 如果备份和快照位置使用相同的凭据,则必须创建一个名为 cloud-credentials-azure 的默认 Secret

  • 如果备份和快照位置使用不同的凭据,则必须创建两个 Secret

    • 具有自定义名称的 Secret 用于备份位置。您将此 Secret 添加到 DataProtectionApplication CR 中。

    • 具有另一个自定义名称的 Secret 用于快照位置。您将此 Secret 添加到 DataProtectionApplication CR 中。

    如果您不想在安装期间指定备份或快照位置,您可以创建一个包含空 credentials-velero 文件的默认 Secret。如果没有默认 Secret,安装将失败。

步骤
  1. 单击**运算符** → **已安装的运算符** 并选择 OADP 运算符。

  2. 在**提供的 API** 下,单击**DataProtectionApplication** 框中的**创建实例**。

  3. 单击**YAML 视图**并更新 DataProtectionApplication 清单的参数

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    metadata:
      name: <dpa_sample>
      namespace: openshift-adp (1)
    spec:
      configuration:
        velero:
          defaultPlugins:
            - azure
            - openshift (2)
          resourceTimeout: 10m (3)
        nodeAgent: (4)
          enable: true (5)
          uploaderType: kopia (6)
          podConfig:
            nodeSelector: <node_selector> (7)
      backupLocations:
        - velero:
            config:
              resourceGroup: <azure_resource_group> (8)
              storageAccount: <azure_storage_account_id> (9)
              subscriptionId: <azure_subscription_id> (10)
              storageAccountKeyEnvVar: AZURE_STORAGE_ACCOUNT_ACCESS_KEY
            credential:
              key: cloud
              name: cloud-credentials-azure  (11)
            provider: azure
            default: true
            objectStorage:
              bucket: <bucket_name> (12)
              prefix: <prefix> (13)
      snapshotLocations: (14)
        - velero:
            config:
              resourceGroup: <azure_resource_group>
              subscriptionId: <azure_subscription_id>
              incremental: "true"
            name: default
            provider: azure
            credential:
              key: cloud
              name: cloud-credentials-azure (15)
    1 OADP 的默认命名空间是 openshift-adp。命名空间是一个变量,是可配置的。
    2 openshift 插件是必需的。
    3 指定在超时发生前等待多个 Velero 资源(例如 Velero CRD 可用性、卷快照删除和备份存储库可用性)的分钟数。默认为 10m。
    4 将管理请求路由到服务器的管理代理。
    5 如果您要启用 nodeAgent 并执行文件系统备份,请将此值设置为 true
    6 输入 kopiarestic 作为您的上传器。安装后您无法更改选择。对于内置 DataMover,您必须使用 Kopia。nodeAgent 部署了一个守护程序集,这意味着 nodeAgent pod 在每个工作节点上运行。您可以通过将 spec.defaultVolumesToFsBackup: true 添加到 Backup CR 来配置文件系统备份。
    7 指定 Kopia 或 Restic 可用的节点。默认情况下,Kopia 或 Restic 在所有节点上运行。
    8 指定 Azure 资源组。
    9 指定 Azure 存储帐户 ID。
    10 指定 Azure 订阅 ID。
    11 如果您不指定此值,则使用默认名称 cloud-credentials-azure。如果您指定自定义名称,则自定义名称将用于备份位置。
    12 指定一个 bucket 作为备份存储位置。如果 bucket 不是 Velero 备份的专用 bucket,则必须指定前缀。
    13 指定 Velero 备份的前缀,例如 velero,如果 bucket 用于多种用途。
    14 如果您使用 CSI 快照或 Restic 来备份 PV,则不需要指定快照位置。
    15 指定您创建的 Secret 对象的名称。如果您不指定此值,则使用默认名称 cloud-credentials-azure。如果您指定自定义名称,则自定义名称将用于备份位置。
  4. 单击**创建**。

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

    $ oc get all -n openshift-adp
    示例输出
    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
  2. 通过运行以下命令验证 DataProtectionApplication (DPA) 是否已协调

    $ oc get dpa dpa-sample -n openshift-adp -o jsonpath='{.status}'
    示例输出
    {"conditions":[{"lastTransitionTime":"2023-10-27T01:23:57Z","message":"Reconcile complete","reason":"Complete","status":"True","type":"Reconciled"}]}
  3. 验证 type 是否设置为 Reconciled

  4. 通过运行以下命令验证备份存储位置并确认 PHASEAvailable

    $ oc get backupstoragelocations.velero.io -n openshift-adp
    示例输出
    NAME           PHASE       LAST VALIDATED   AGE     DEFAULT
    dpa-sample-1   Available   1s               3d16h   true

使用客户端突发和 QPS 设置配置 DPA

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

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

先决条件
  • 您已安装 OADP 运算符。

步骤
  • 按照以下示例配置 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
    1 指定 client-burst 值。在此示例中,client-burst 字段设置为 500。
    2 指定 client-qps 值。在此示例中,client-qps 字段设置为 300。

配置节点代理和节点标签

OADP 的 DPA 使用 nodeSelector 字段来选择哪些节点可以运行节点代理。nodeSelector 字段是推荐的节点选择约束的最简单形式。

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

在您选择的任何节点上运行节点代理的正确方法是使用自定义标签标记节点

$ oc label node/<node_name> node-role.kubernetes.io/nodeAgent=""

DPA.spec.configuration.nodeAgent.podConfig.nodeSelector 中使用与用于标记节点相同的自定义标签。例如

configuration:
  nodeAgent:
    enable: true
    podConfig:
      nodeSelector:
        node-role.kubernetes.io/nodeAgent: ""

以下示例是 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: ""

在DataProtectionApplication CR中启用CSI

为了备份具有CSI快照的持久卷,您需要在DataProtectionApplication自定义资源 (CR) 中启用容器存储接口 (CSI)。

先决条件
  • 云提供商必须支持CSI快照。

步骤
  • 编辑DataProtectionApplication CR,例如:

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    ...
    spec:
      configuration:
        velero:
          defaultPlugins:
          - openshift
          - csi (1)
    1 添加csi默认插件。

禁用DataProtectionApplication中的节点代理

如果您没有使用ResticKopiaDataMover进行备份,则可以在DataProtectionApplication自定义资源 (CR) 中禁用nodeAgent字段。在禁用nodeAgent之前,请确保OADP Operator处于空闲状态且未运行任何备份。

步骤
  1. 要禁用nodeAgent,请将enable标志设置为false。请参见以下示例:

    DataProtectionApplication CR示例
    # ...
    configuration:
      nodeAgent:
        enable: false  (1)
        uploaderType: kopia
    # ...
    1 禁用节点代理。
  2. 要启用nodeAgent,请将enable标志设置为true。请参见以下示例:

    DataProtectionApplication CR示例
    # ...
    configuration:
      nodeAgent:
        enable: true  (1)
        uploaderType: kopia
    # ...
    1 启用节点代理。

您可以设置一个作业来启用和禁用DataProtectionApplication CR中的nodeAgent字段。有关更多信息,请参见“使用作业在Pod中运行任务”。