4.7. 使用 AWS S3 兼容存储配置 OADP


您可以通过安装 OADP Operator,使用 Amazon Web Services (AWS) S3 兼容存储安装 OpenShift API for Data Protection (OADP)。Operator 安装 Velero 1.14

注意

从 OADP 1.0.4 开始,所有 OADP 1.0.z 版本只能用作 Migration Toolkit for Containers Operator 的依赖项,且不能作为独立 Operator 提供。

您可以为 Velero 配置 AWS,创建一个默认 Secret,然后安装数据保护应用程序。如需了解更多详细信息,请参阅安装 OADP Operator

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

Amazon Simple Storage Service (Amazon S3)是 Amazon 用于互联网的存储解决方案。作为授权用户,您可以使用该服务根据需要从 web 上的任何位置存储和检索任何数量的数据。

您可以使用 AWS Identity and Access Management (IAM) web 服务安全地控制对 Amazon S3 和其他 Amazon 服务的访问。

您可以使用 IAM 来管理控制用户可以访问哪些 AWS 资源的权限。您可以使用 IAM 验证,或者验证用户是否是要声明的身份,并授权或使用资源的权限。

AWS GovCloud (US) 是一个 Amazon 存储解决方案,用于满足美国联邦政府特定的数据安全要求。AWS GovCloud (US )的工作方式与 Amazon S3 相同,但以下情况除外:

  • 您不能将 AWS GovCloud (US)区域中的 Amazon S3 存储桶的内容直接复制到另一个 AWS 区域。
  • 如果您使用 Amazon S3 策略,请使用 AWS GovCloud (US) Amazon Resource Name (ARN)标识符来在所有 AWS 中取消指定资源,如 IAM 策略、Amazon S3 存储桶名称和 API 调用。

    • 在 AWS GovCloud (US) 区域,ARN 有一个与其它标准 AWS 区域中的标识符不同的标识符arn:aws-us-gov。如果您需要指定 US-West 或 US-East 区域,请使用以下 ARN:

      • 对于 US-West,请使用 us-gov-west-1
      • 对于 US-East,请使用 us-gov-east-1
    • 对于所有其他标准区域,ARN 以 arn:aws 开头。
  • 在 AWS GovCloud (US) 区域,使用 Amazon Simple Storage Service endpoints and quotas 中的 "Amazon S3 endpoints" 表中的 AWS GovCloud (US-East) AWS GovCloud (US-West) 行中列出的端点。如果您要处理导出控制的数据,请使用 SSL/TLS 端点之一。如果您有 FIPS 要求,请使用 FIPS 140-2 端点,如 https://s3-fips.us-gov-west-1.amazonaws.comhttps://s3-fips.us-gov-east-1.amazonaws.com
  • 要查找其他 AWS 的限制,请参阅 How Amazon Simple Storage Service Differs for AWS GovCloud (US)

4.7.1.2. 配置 Amazon Web Services

您可以为 OpenShift API 配置 Amazon Web Services(AWS)以进行数据保护(OADP)。

先决条件

流程

  1. 设置 BUCKET 变量:

    $ BUCKET=<your_bucket>
    Copy to Clipboard Toggle word wrap
  2. 设置 REGION 变量:

    $ REGION=<your_region>
    Copy to Clipboard Toggle word wrap
  3. 创建 AWS S3 存储桶:

    $ aws s3api create-bucket \
        --bucket $BUCKET \
        --region $REGION \
        --create-bucket-configuration LocationConstraint=$REGION 
    1
    Copy to Clipboard Toggle word wrap
    1
    us-east-1 不支持 LocationConstraint。如果您的区域是 us-east-1,忽略 --create-bucket-configuration LocationConstraint=$REGION
  4. 创建一个 IAM 用户:

    $ aws iam create-user --user-name velero 
    1
    Copy to Clipboard Toggle word wrap
    1
    如果要使用 Velero 备份具有多个 S3 存储桶的集群,请为每个集群创建一个唯一用户名。
  5. 创建 velero-policy.json 文件:

    $ cat > velero-policy.json <<EOF
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ec2:DescribeVolumes",
                    "ec2:DescribeSnapshots",
                    "ec2:CreateTags",
                    "ec2:CreateVolume",
                    "ec2:CreateSnapshot",
                    "ec2:DeleteSnapshot"
                ],
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:DeleteObject",
                    "s3:PutObject",
                    "s3:AbortMultipartUpload",
                    "s3:ListMultipartUploadParts"
                ],
                "Resource": [
                    "arn:aws:s3:::${BUCKET}/*"
                ]
            },
            {
                "Effect": "Allow",
                "Action": [
                    "s3:ListBucket",
                    "s3:GetBucketLocation",
                    "s3:ListBucketMultipartUploads"
                ],
                "Resource": [
                    "arn:aws:s3:::${BUCKET}"
                ]
            }
        ]
    }
    EOF
    Copy to Clipboard Toggle word wrap
  6. 附加策略,为 velero 用户提供所需的最低权限:

    $ aws iam put-user-policy \
      --user-name velero \
      --policy-name velero \
      --policy-document file://velero-policy.json
    Copy to Clipboard Toggle word wrap
  7. velero 用户创建访问密钥:

    $ aws iam create-access-key --user-name velero
    Copy to Clipboard Toggle word wrap

    输出示例

    {
      "AccessKey": {
            "UserName": "velero",
            "Status": "Active",
            "CreateDate": "2017-07-31T22:24:41.576Z",
            "SecretAccessKey": <AWS_SECRET_ACCESS_KEY>,
            "AccessKeyId": <AWS_ACCESS_KEY_ID>
      }
    }
    Copy to Clipboard Toggle word wrap

  8. 创建 credentials-velero 文件:

    $ cat << EOF > ./credentials-velero
    [default]
    aws_access_key_id=<AWS_ACCESS_KEY_ID>
    aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>
    EOF
    Copy to Clipboard Toggle word wrap

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

4.7.1.3. 关于备份和恢复位置及其 secret

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

备份位置

您可以将以下 AWS S3 兼容对象存储解决方案之一指定为备份位置:

  • 多云对象网关 (MCG)
  • Red Hat Container Storage
  • Ceph RADOS 网关;也称为 Ceph 对象网关
  • Red Hat OpenShift Data Foundation
  • MinIO

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

快照位置

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

如果使用 Container Storage Interface(CSI)快照,则不需要指定快照位置,因为您要创建一个 VolumeSnapshotClass CR 来注册 CSI 驱动程序。

如果您使用文件系统备份 (FSB),则不需要指定快照位置,因为 FSB 在对象存储上备份文件系统。

Secrets

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

如果备份和恢复位置使用不同的凭证,您可以创建两个 secret 对象:

  • 您在 DataProtectionApplication CR 中指定的备份位置的自定义 Secret
  • 快照位置的默认 Secret,在 DataProtectionApplication CR 中没有引用。
重要

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

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

4.7.1.3.1. 创建默认 Secret

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

Secret 的默认名称为 cloud-credentials

注意

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

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

先决条件

  • 您的对象存储和云存储(若有)必须使用相同的凭证。
  • 您必须为 Velero 配置对象存储。

流程

  1. 为您的云供应商为备份存储位置创建一个 credentials-velero 文件。

    请参见以下示例:

    [default]
    aws_access_key_id=<AWS_ACCESS_KEY_ID>
    aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>
    Copy to Clipboard Toggle word wrap
  2. 使用默认名称创建 Secret 自定义资源 (CR):

    $ oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=credentials-velero
    Copy to Clipboard Toggle word wrap

在安装 Data Protection Application 时,secret 会在 DataProtectionApplication CR 的 spec.backupLocations.credential 块中引用。

4.7.1.3.2. 为不同凭证创建配置集

如果您的备份和快照位置使用不同的凭证,您可以在 credentials-velero 文件中创建单独的配置集。

然后,您可以创建一个 Secret 对象并在 DataProtectionApplication 自定义资源(CR)中指定配置集。

流程

  1. 使用备份和快照位置的独立配置集创建一个 credentials-velero 文件,如下例所示:

    [backupStorage]
    aws_access_key_id=<AWS_ACCESS_KEY_ID>
    aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>
    
    [volumeSnapshot]
    aws_access_key_id=<AWS_ACCESS_KEY_ID>
    aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>
    Copy to Clipboard Toggle word wrap
  2. 使用 credentials-velero 文件创建 Secret 对象:

    $ oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=credentials-velero 
    1
    Copy to Clipboard Toggle word wrap
  3. DataProtectionApplication CR 中添加配置集,如下例所示:

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    metadata:
      name: <dpa_sample>
      namespace: openshift-adp
    spec:
    ...
      backupLocations:
        - name: default
          velero:
            provider: aws
            default: true
            objectStorage:
              bucket: <bucket_name>
              prefix: <prefix>
            config:
              region: us-east-1
              profile: "backupStorage"
            credential:
              key: cloud
              name: cloud-credentials
      snapshotLocations:
        - velero:
            provider: aws
            config:
              region: us-west-2
              profile: "volumeSnapshot"
    Copy to Clipboard Toggle word wrap
4.7.1.3.3. 使用 AWS 配置备份存储位置

您可以配置 AWS 备份存储位置 (BSL),如下例所示。

先决条件

  • 已使用 AWS 创建对象存储桶。
  • 已安装 OADP Operator。

流程

  • 使用适合您用例的值配置 BSL 自定义资源 (CR)。

    备份存储位置

    apiVersion: oadp.openshift.io/v1alpha1
    kind: BackupStorageLocation
    metadata:
      name: default
      namespace: openshift-adp
    spec:
      provider: aws 
    1
    
      objectStorage:
        bucket: <bucket_name> 
    2
    
        prefix: <bucket_prefix> 
    3
    
      credential: 
    4
    
        key: cloud 
    5
    
        name: cloud-credentials 
    6
    
      config:
        region: <bucket_region> 
    7
    
        s3ForcePathStyle: "true" 
    8
    
        s3Url: <s3_url> 
    9
    
        publicUrl: <public_s3_url> 
    10
    
        serverSideEncryption: AES256 
    11
    
        kmsKeyId: "50..c-4da1-419f-a16e-ei...49f" 
    12
    
        customerKeyEncryptionFile: "/credentials/customer-key" 
    13
    
        signatureVersion: "1" 
    14
    
        profile: "default" 
    15
    
        insecureSkipTLSVerify: "true" 
    16
    
        enableSharedConfig: "true" 
    17
    
        tagging: "" 
    18
    
        checksumAlgorithm: "CRC32" 
    19
    Copy to Clipboard Toggle word wrap

    1 1
    对象存储插件的名称。在本例中,插件是 aws。此字段是必需的。
    2
    在其中存储备份的存储桶的名称。此字段是必需的。
    3
    在其中存储备份的存储桶的前缀。此字段是可选的。
    4
    备份存储位置的凭证。您可以设置自定义凭证。如果没有设置自定义凭证,则使用默认凭证的 secret。
    5
    secret 凭证数据中的密钥
    6
    包含凭证的 secret 名称。
    7
    存储桶所在的 AWS 区域。如果 s3ForcePathStyle 为 false,则可选。
    8
    决定是否使用路径风格寻址而不是虚拟托管存储桶寻址的布尔值标志。如果使用存储服务,如 MinIO 或 NooBaa,则设置为 true。这是可选字段。默认值为 false
    9
    您可以在此处显式指定 AWS S3 URL。此字段主要用于存储服务,如 MinIO 或 NooBaa。这是可选字段。
    10
    此字段主要用于存储服务,如 MinIO 或 NooBaa。这是可选字段。
    11
    用于上传对象的服务器端加密算法的名称,如 AES256。这是可选字段。
    12
    指定 AWS KMS 密钥 ID。您可以格式化示例所示,如别名,如 alias/<KMS-key-alias-name>,或完整 ARN,以启用存储在 S3 中的备份加密。请注意 kmsKeyId 无法用于 customerKeyEncryptionFile。这是可选字段。
    13
    指定具有 SSE-C 客户密钥的文件,以启用存储在 S3 中的备份的客户密钥加密。该文件必须包含一个 32 字节的字符串。customerKeyEncryptionFile 字段指向 velero 容器中挂载的 secret。将以下“键-值”对添加到 velero cloud-credentials secret: customer-key: <your_b64_encoded_32byte_string>.请注意,customerKeyEncryptionFile 字段不能与 kmsKeyId 字段一起使用。默认值为一个空字符串(""),这代表 SSE-C 被禁用。这是可选字段。
    14
    用于创建签名 URL 的签名算法版本。您可以使用签名的 URL 来下载备份或获取日志。有效值为 14。默认版本为 4。这是可选字段。
    15
    凭证文件中的 AWS 配置集的名称。默认值为 default。这是可选字段。
    16
    如果您不想在连接到对象存储时验证 TLS 证书,例如,使用 MinIO 的自签名证书,请将 insecureSkipTLSVerify 字段设置为 true。将其设置为 true 容易受到中间人攻击的影响,不建议在生产环境工作负载中使用。默认值为 false。这是可选字段。
    17
    如果要将凭据文件作为共享配置文件加载,请将 enableSharedConfig 字段设置为 true。默认值为 false。这是可选字段。
    18
    指定要注解 AWS S3 对象的标签。以键值对的形式指定标签。默认值为一个空字符串 ("")。这是可选字段。
    19
    指定用于上传对象到 S3 的校验和算法。支持的值包括:CRC32,CRC32C,SHA1, 和 SHA256。如果将字段设置为空字符串 (""),则会跳过 checksum 检查。默认值为 CRC32。这是可选字段。

Amazon Web Services (AWS) S3 应用 Amazon S3 管理密钥(SSE-S3)的服务器端加密,作为 Amazon S3 中每个 bucket 的基本加密级别。

OpenShift API for Data Protection (OADP) 在将数据从集群传输到存储时使用 SSL/TLS、HTTPS 和 velero-repo-credentials secret 来加密数据。要在丢失了 AWS 凭证或 AWS 凭证被盗用时保护备份数据,请使用额外的加密层。

velero-plugin-for-aws 插件提供了几个额外的加密方法。您应该查看其配置选项,并考虑实施其他加密。

您可以在客户提供的密钥(SSE-C)中使用服务器端加密来存储自己的加密密钥。如果您的 AWS 凭证被公开,此功能会提供额外的安全性。

警告

确保以安全的方式存储加密密钥。如果没有加密密钥,则无法恢复加密的数据和备份。

先决条件

  • 要使 OADP 将一个包含了您的 SSE-C 密钥的 secret 挂载到 Velero pod(位于 /credentials),为 AWS 使用以下默认 secret 名称:cloud-credentials,并至少将以下标签之一留空:

注意

以下流程包含了一个没有指定凭证的 spec:backupLocations 块的示例。本例会触发 OADP secret 挂载。

  • 如果您需要备份位置带有不是名为 cloud-credentials 的凭证,则需要添加一个快照位置,如以下示例中的凭证,它没有包含凭证名称。由于示例没有包含凭证名称,快照位置将使用 cloud-credentials 作为其执行快照的 secret。

没有指定凭证的 DPA 中的快照位置示例

 snapshotLocations:
  - velero:
      config:
        profile: default
        region: <region>
      provider: aws
# ...
Copy to Clipboard Toggle word wrap

流程

  1. 创建 SSE-C 加密密钥:

    1. 运行以下命令,生成随机数字并将其保存为名为 sse.key 的文件:

      $ dd if=/dev/urandom bs=1 count=32 > sse.key
      Copy to Clipboard Toggle word wrap
  2. 创建一个 OpenShift Container Platform secret:

    • 如果您在初始安装和配置 OADP,同时创建 AWS 凭证和加密密钥 secret,请运行以下命令:

      $ oc create secret generic cloud-credentials --namespace openshift-adp --from-file cloud=<path>/openshift_aws_credentials,customer-key=<path>/sse.key
      Copy to Clipboard Toggle word wrap
    • 如果要更新一个现有的安装,编辑 DataProtectionApplication CR 清单的 cloud-credential secret 块的值,如下例所示:

      apiVersion: v1
      data:
        cloud: W2Rfa2V5X2lkPSJBS0lBVkJRWUIyRkQ0TlFHRFFPQiIKYXdzX3NlY3JldF9hY2Nlc3Nfa2V5P<snip>rUE1mNWVSbTN5K2FpeWhUTUQyQk1WZHBOIgo=
        customer-key: v+<snip>TFIiq6aaXPbj8dhos=
      kind: Secret
      # ...
      Copy to Clipboard Toggle word wrap
  3. 编辑 DataProtectionApplication CR 清单的 backupLocations 块中 customerKeyEncryptionFile 属性的值,如下例所示:

    spec:
      backupLocations:
        - velero:
            config:
              customerKeyEncryptionFile: /credentials/customer-key
              profile: default
    # ...
    Copy to Clipboard Toggle word wrap
    警告

    您必须重启 Velero pod,以便在现有安装中正确重新挂载 secret 凭证。

    在安装完成后,您可以备份和恢复 OpenShift Container Platform 资源。在 AWS S3 存储中保存的数据使用新密钥加密,您无法在没有额外加密密钥的情况下从 AWS S3 控制台或 API 下载。

验证

要验证在没有包含额外密钥的情况下无法下载加密文件,请创建一个测试文件,上传该文件,然后尝试下载该文件。

  1. 运行以下命令来创建测试文件:

    $ echo "encrypt me please" > test.txt
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令来上传测试文件:

    $ aws s3api put-object \
      --bucket <bucket> \
      --key test.txt \
      --body test.txt \
      --sse-customer-key fileb://sse.key \
      --sse-customer-algorithm AES256
    Copy to Clipboard Toggle word wrap
  3. 尝试下载文件。在 Amazon Web 控制台或终端中运行以下命令:

    $ s3cmd get s3://<bucket>/test.txt test.txt
    Copy to Clipboard Toggle word wrap

    下载失败,因为文件使用了附加的密钥进行加密。

  4. 运行以下命令,下载带有额外加密密钥的文件:

    $ aws s3api get-object \
        --bucket <bucket> \
        --key test.txt \
        --sse-customer-key fileb://sse.key \
        --sse-customer-algorithm AES256 \
        downloaded.txt
    Copy to Clipboard Toggle word wrap
  5. 运行以下命令来读取文件内容:

    $ cat downloaded.txt
    Copy to Clipboard Toggle word wrap

    输出示例

    encrypt me please
    Copy to Clipboard Toggle word wrap

当您验证 SSE-C 加密密钥时,您也可以下载带有额外的加密密钥的由 Velero 备份的文件。

流程

  • 运行以下命令,下载使用 Velero 备份的、带有额外加密密钥的文件:
$ aws s3api get-object \
  --bucket <bucket> \
  --key velero/backups/mysql-persistent-customerkeyencryptionfile4/mysql-persistent-customerkeyencryptionfile4.tar.gz \
  --sse-customer-key fileb://sse.key \
  --sse-customer-algorithm AES256 \
  --debug \
  velero_download.tar.gz
Copy to Clipboard Toggle word wrap

4.7.1.4. 配置数据保护应用程序

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

4.7.1.4.1. 设置 Velero CPU 和内存分配

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

先决条件

  • 您必须安装了 OpenShift API for Data Protection(OADP)Operator。

流程

  • 编辑 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
    Copy to Clipboard Toggle word wrap
    1
    指定要提供给 Velero podSpec 的节点选择器。
    2
    列出的 resourceAllocations 用于平均使用。
注意

Kopia 是 OADP 1.3 及之后的版本中的一个选项。您可以使用 Kopia 进行文件系统备份,Kopia 是 Data Mover 的唯一选择,并带有内置数据 Mover。

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

使用 nodeSelector 字段选择哪些节点可以运行节点代理。nodeSelector 字段是节点选择限制的最简单的形式。任何指定的标签都需要与每个节点上的标签匹配。

如需了解更多详细信息,请参阅配置节点代理和节点标签

4.7.1.4.2. 启用自签名 CA 证书

您必须通过编辑 DataProtectionApplication 自定义资源(CR)清单来为对象存储启用自签名 CA 证书,以防止由未知颁发机构签名的证书

先决条件

  • 您必须安装了 OpenShift API for Data Protection(OADP)Operator。

流程

  • 编辑 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
    
    # ...
    Copy to Clipboard Toggle word wrap
    1
    指定以 Base64 编码的 CA 证书字符串。
    2
    insecureSkipTLSVerify 配置可以设置为 "true""false "。如果设置为 "true",则禁用 SSL/TLS 安全性。如果设置为 "false",则启用 SSL/TLS 安全性。

如果您望使用 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'
      Copy to Clipboard Toggle word wrap
    2. 运行以下命令检查别名是否正常工作:

      Example

      $ velero version
      Client:
      	Version: v1.12.1-OADP
      	Git commit: -
      Server:
      	Version: v1.12.1-OADP
      Copy to Clipboard Toggle word wrap

    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"
      Copy to Clipboard Toggle word wrap
      $ velero describe backup <backup_name> --details --cacert /tmp/<your_cacert>.txt
      Copy to Clipboard Toggle word wrap
    4. 要获取备份日志,请运行以下命令:

      $ velero backup logs  <backup_name>  --cacert /tmp/<your_cacert.txt>
      Copy to Clipboard Toggle word wrap

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

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

在以后的 OpenShift API for Data Protection (OADP) 发行版本中,我们计划将证书挂载到 Velero pod,以便不需要这一步。

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

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

先决条件

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

    注意

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

流程

  1. Operators 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:
            - openshift 
    2
    
            - aws
          resourceTimeout: 10m 
    3
    
        nodeAgent: 
    4
    
          enable: true 
    5
    
          uploaderType: kopia 
    6
    
          podConfig:
            nodeSelector: <node_selector> 
    7
    
      backupLocations:
        - name: default
          velero:
            provider: aws
            default: true
            objectStorage:
              bucket: <bucket_name> 
    8
    
              prefix: <prefix> 
    9
    
            config:
              region: <region>
              profile: "default"
              s3ForcePathStyle: "true" 
    10
    
              s3Url: <s3_url> 
    11
    
            credential:
              key: cloud
              name: cloud-credentials 
    12
    
      snapshotLocations: 
    13
    
        - name: default
          velero:
            provider: aws
            config:
              region: <region> 
    14
    
              profile: "default"
            credential:
              key: cloud
              name: cloud-credentials 
    15
    Copy to Clipboard Toggle word wrap
    1
    OADP 的默认命名空间是 openshift-adp。命名空间是一个变量,可配置。
    2
    openshift 插件是必需的。
    3
    指定在超时发生前等待多个 Velero 资源的分钟,如 Velero CRD 可用、volumeSnapshot 删除和备份存储库可用。默认值为 10m。
    4
    将管理请求路由到服务器的管理代理。
    5
    如果要启用 nodeAgent 并执行文件系统备份,则将此值设置为 true
    6
    输入 kopiarestic 作为您的上传者。您不能在安装后更改选择。对于 Built-in DataMover,您必须使用 Kopia。nodeAgent 部署守护进程集,这意味着 nodeAgent pod 在每个工作节点上运行。您可以通过在 Backup CR 中添加 spec.defaultVolumesToFsBackup: true 来配置文件系统备份。
    7
    指定 Kopia 或 Restic 可用的节点。默认情况下,Kopia 或 Restic 在所有节点上运行。
    8
    指定存储桶作为备份存储位置。如果存储桶不是 Velero 备份的专用存储桶,您必须指定一个前缀。
    9
    如果存储桶用于多个目的,请为 Velero 备份指定一个前缀,如 velero
    10
    指定是否为 S3 对象强制路径风格 URL (Boolean)。AWS S3 不需要。只适用于 S3 兼容存储。
    11
    指定您用于存储备份的对象存储的 URL。AWS S3 不需要。只适用于 S3 兼容存储。
    12
    指定您创建的 Secret 对象的名称。如果没有指定这个值,则使用默认值 cloud-credentials。如果您指定了自定义名称,则使用自定义名称进行备份位置。
    13
    指定快照位置,除非您使用 CSI 快照或文件系统备份 (FSB)备份 PV。
    14
    快照位置必须与 PV 位于同一区域。
    15
    指定您创建的 Secret 对象的名称。如果没有指定这个值,则使用默认值 cloud-credentials。如果指定了自定义名称,则自定义名称用于快照位置。如果您的备份和快照位置使用不同的凭证,您可以在 credentials-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

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

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

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

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

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

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

4.7.1.6. 使用 MD5 checksum 算法配置备份存储位置

您可以在数据保护应用程序(DPA)中配置 Backup Storage Location (BSL),为 Amazon Simple Storage Service (Amazon S3)和 S3 兼容存储供应商使用 MD5 checksum 算法。checksum 算法计算校验和,以在 Amazon S3 中上传和下载对象。您可以使用以下选项之一,设置 DPA 的 spec.backupLocations.velero.config.checksumAlgorithm 部分中的 checksumAlgorithm 字段。

  • CRC32
  • CRC32C
  • SHA1
  • SHA256
注意

您还可以将 checksumAlgorithm 字段设置为空值来跳过 MD5 checksum 检查。

如果没有为 checksumAlgorithm 字段设置值,则默认值为 CRC32

先决条件

  • 已安装 OADP Operator。
  • 您已将 Amazon S3 或 S3 兼容对象存储配置为备份位置。

流程

  • 在 DPA 中配置 BSL,如下例所示:

    数据保护应用程序示例

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    metadata:
      name: test-dpa
      namespace: openshift-adp
    spec:
      backupLocations:
      - name: default
        velero:
          config:
            checksumAlgorithm: "" 
    1
    
            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:
        velero:
          defaultPlugins:
          - openshift
          - aws
          - csi
    Copy to Clipboard Toggle word wrap

    1
    指定 checksumAlgorithm。在本例中,checksumAlgorithm 字段被设置为一个空值。您可以从以下列表中选择一个选项:CRC32, CRC32C, SHA1, SHA256
重要

如果您使用 Noobaa 作为对象存储供应商,并且没有在 DPA 中设置 spec.backupLocations.velero.config.checksumAlgorithm 字段,则值为空的 checksumAlgorithm 会添加到 BSL 配置中。

空值只为使用 DPA 创建的 BSL 添加。如果您使用任何其他方法创建 BSL,则不会添加这个值。

4.7.1.7. 使用客户端 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。

4.7.1.8. 覆盖 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

4.7.1.9. 使用多个 BSL 配置 DPA

您可以使用多个 BackupStorageLocation (BSL) CR 配置 DataProtectionApplication (DPA) 自定义资源 (CR),并指定云供应商提供的凭证。

例如,在配置了以下两个 BSLs 时:

  • 在 DPA 中配置了一个 BSL,并将它设置为默认的 BSL。
  • 使用 BackupStorageLocation CR 独立创建另一个 BSL。

因为您已通过 DPA 创建 BSL 作为默认值,您无法再次设置独立创建的 BSL 作为默认值。这意味着,在任何给定时间,您只能将一个 BSL 设置为默认的 BSL。

先决条件

  • 您必须安装 OADP Operator。
  • 您必须使用云供应商提供的凭证创建 secret。

流程

  1. 使用多个 BackupStorageLocation CR 配置 DataProtectionApplication CR。请参见以下示例:

    DPA 示例

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    #...
    backupLocations:
      - name: aws 
    1
    
        velero:
          provider: aws
          default: true 
    2
    
          objectStorage:
            bucket: <bucket_name> 
    3
    
            prefix: <prefix> 
    4
    
          config:
            region: <region_name> 
    5
    
            profile: "default"
          credential:
            key: cloud
            name: cloud-credentials 
    6
    
      - name: odf 
    7
    
        velero:
          provider: aws
          default: false
          objectStorage:
            bucket: <bucket_name>
            prefix: <prefix>
          config:
            profile: "default"
            region: <region_name>
            s3Url: <url> 
    8
    
            insecureSkipTLSVerify: "true"
            s3ForcePathStyle: "true"
          credential:
            key: cloud
            name: <custom_secret_name_odf> 
    9
    
    #...
    Copy to Clipboard Toggle word wrap

    1
    为第一个 BSL 指定名称。
    2
    此参数表示此 BSL 是默认的 BSL。如果没有在 Backup CR 中设置 BSL,则会使用默认的 BSL。您只能将一个 BSL 设置为默认值。
    3
    指定存储桶名称。
    4
    为 Velero 备份指定一个前缀,如 velero
    5
    指定存储桶的 AWS 区域。
    6
    指定您创建的默认 Secret 对象的名称。
    7
    为第二个 BSL 指定名称。
    8
    指定 S3 端点的 URL。
    9
    Secret 指定正确的名称;例如,custom_secret_name_odf。如果没有指定 Secret 名称,则使用默认名称。
  2. 指定要在备份 CR 中使用的 BSL。请参见以下示例。

    备份 CR 示例

    apiVersion: velero.io/v1
    kind: Backup
    # ...
    spec:
      includedNamespaces:
      - <namespace> 
    1
    
      storageLocation: <backup_storage_location> 
    2
    
      defaultVolumesToFsBackup: true
    Copy to Clipboard Toggle word wrap

    1
    指定要备份的命名空间。
    2
    指定存储位置。
4.7.1.9.1. 在 DataProtectionApplication CR 中启用 CSI

您可以在 DataProtectionApplication 自定义资源(CR)中启用 Container Storage Interface(CSI)来备份持久性卷,以使用 CSI 快照备份持久性卷。

先决条件

  • 云供应商必须支持 CSI 快照。

流程

  • 编辑 DataProtectionApplication CR,如下例所示:

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    ...
    spec:
      configuration:
        velero:
          defaultPlugins:
          - openshift
          - csi 
    1
    Copy to Clipboard Toggle word wrap
    1
    添加 csi 默认插件。

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

流程

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

    DataProtectionApplication CR 示例

    # ...
    configuration:
      nodeAgent:
        enable: false  
    1
    
        uploaderType: kopia
    # ...
    Copy to Clipboard Toggle word wrap

    1
    禁用节点代理。
  2. 要启用 nodeAgent,将 enable 标志设置为 true。请参见以下示例:

    DataProtectionApplication CR 示例

    # ...
    configuration:
      nodeAgent:
        enable: true  
    1
    
        uploaderType: kopia
    # ...
    Copy to Clipboard Toggle word wrap

    1
    启用节点代理。

您可以设置一个作业来启用和禁用 DataProtectionApplication CR 中的 nodeAgent 字段。如需更多信息,请参阅"使用作业在 pod 中运行任务"。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat