×

您可以通过安装 OADP 运算符来安装用于数据保护的 OpenShift API (OADP) 和多云对象网关 (MCG)。该运算符安装 Velero 1.14

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

您可以将 多云对象网关 配置为备份位置。MCG 是 OpenShift 数据基金会的一个组件。您可以在 DataProtectionApplication 自定义资源 (CR) 中将 MCG 配置为备份位置。

CloudStorage API 自动创建对象存储的存储桶,只是一个技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且功能可能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让您抢先体验即将推出的产品功能,从而能够在开发过程中测试功能并提供反馈。

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

您可以为备份位置创建一个 Secret,然后安装数据保护应用程序。有关更多详细信息,请参阅 安装 OADP 运算符

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

检索多云对象网关凭据

您必须检索多云对象网关 (MCG) 凭据,这是创建用于数据保护的 OpenShift API (OADP) 的 Secret 自定义资源 (CR) 所必需的。

虽然 MCG 运算符已 弃用,但 MCG 插件仍然可用于 OpenShift 数据基金会。要下载插件,请浏览至 下载 Red Hat OpenShift 数据基金会 并下载适合您操作系统的 MCG 插件。

先决条件
步骤
  1. 通过在 NooBaa 自定义资源上运行 describe 命令 来获取 S3 端点、AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY

  2. 创建一个 credentials-velero 文件

    $ cat << EOF > ./credentials-velero
    [default]
    aws_access_key_id=<AWS_ACCESS_KEY_ID>
    aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>
    EOF

    安装数据保护应用程序时,您可以使用 credentials-velero 文件创建 Secret 对象。

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

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

备份位置

您可以指定与 AWS S3 兼容的对象存储作为备份位置,例如多云对象网关;Red Hat 容器存储;Ceph RADOS 网关(也称为 Ceph 对象网关);Red Hat OpenShift 数据基金会;或 MinIO。

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

快照位置

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

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

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

密钥

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

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

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

  • 快照位置的默认 SecretDataProtectionApplication CR 中未引用此位置。

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

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

创建默认 Secret

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

默认的 `Secret` 名称是 `cloud-credentials`。

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

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

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

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

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

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

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

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

为不同的凭据创建 Secret

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

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

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

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

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

    $ oc create secret generic cloud-credentials -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:
              profile: "default"
              region: <region_name> (1)
              s3Url: <url>
              insecureSkipTLSVerify: "true"
              s3ForcePathStyle: "true"
            provider: aws
            default: true
            credential:
              key: cloud
              name:  <custom_secret> (2)
            objectStorage:
              bucket: <bucket_name>
              prefix: <prefix>
    1 根据对象存储服务器文档的命名约定指定区域。
    2 具有自定义名称的备份位置 `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 进行文件系统备份,对于使用内置数据移动器的“数据移动器”案例,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 (OADP) 的未来版本中,我们计划将证书安装到 Velero pod,以便不需要此步骤。

安装数据保护应用程序

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

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

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

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

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

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

    • 具有自定义名称的备份位置 `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:
            - aws (2)
            - openshift (3)
          resourceTimeout: 10m (4)
        nodeAgent: (5)
          enable: true (6)
          uploaderType: kopia (7)
          podConfig:
            nodeSelector: <node_selector> (8)
      backupLocations:
        - velero:
            config:
              profile: "default"
              region: <region_name> (9)
              s3Url: <url> (10)
              insecureSkipTLSVerify: "true"
              s3ForcePathStyle: "true"
            provider: aws
            default: true
            credential:
              key: cloud
              name: cloud-credentials (11)
            objectStorage:
              bucket: <bucket_name> (12)
              prefix: <prefix> (13)
    1 OADP 的默认命名空间是 `openshift-adp`。命名空间是一个变量,可以配置。
    2 需要一个与您的存储位置相对应的对象存储插件。对于所有 S3 提供商,所需的插件是aws。对于 Azure 和 GCP 对象存储,需要azuregcp插件。
    3 openshift 插件是必须的。
    4 指定在超时发生之前等待多个 Velero 资源(例如 Velero CRD 可用性、卷快照删除和备份存储库可用性)的分钟数。默认为 10 分钟。
    5 将管理请求路由到服务器的管理代理。
    6 如果要启用nodeAgent并执行文件系统备份,请将此值设置为true
    7 输入kopiarestic作为您的上传器。安装后无法更改选择。对于内置 DataMover,您必须使用 Kopia。nodeAgent部署了一个 DaemonSet,这意味着nodeAgent Pod 在每个工作节点上运行。您可以通过向Backup CR 添加spec.defaultVolumesToFsBackup: true来配置文件系统备份。
    8 指定 Kopia 或 Restic 可用的节点。默认情况下,Kopia 或 Restic 在所有节点上运行。
    9 根据对象存储服务器文档的命名约定指定区域。
    10 指定 S3 端点的 URL。
    11 指定您创建的Secret对象的名称。如果您没有指定此值,则使用默认名称cloud-credentials。如果您指定自定义名称,则自定义名称将用于备份位置。
    12 指定一个 bucket 作为备份存储位置。如果 bucket 不是 Velero 备份的专用 bucket,则必须指定一个前缀。
    13 如果 bucket 用于多种用途,请指定 Velero 备份的前缀,例如velero
  4. 点击创建

验证
  1. 通过运行以下命令查看 OpenShift 数据保护 API (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

配置 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

您可以在DataProtectionApplication自定义资源 (CR) 中启用容器存储接口 (CSI),以便使用 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 运算符处于空闲状态且未运行任何备份。

步骤
  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 中运行任务”。