×

您可以通过安装OADP操作符来安装用于与Amazon Web Services (AWS) S3兼容存储的数据保护的OpenShift API (OADP)。该操作符安装Velero 1.14

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

您可以为Velero配置AWS,创建一个默认的Secret,然后安装数据保护应用程序。更多详情,请参见安装OADP操作符

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

关于Amazon Simple Storage Service、身份和访问管理以及GovCloud

Amazon Simple Storage Service (Amazon S3)是亚马逊的互联网存储解决方案。作为授权用户,您可以随时随地从网络上的任何位置使用此服务来存储和检索任何数量的数据。

您可以使用AWS身份和访问管理(IAM)网络服务安全地控制对Amazon S3和其他Amazon服务的访问。

您可以使用IAM管理权限,这些权限控制用户可以访问哪些AWS资源。您可以使用IAM来进行身份验证(验证用户是否是他们声称的人)和授权(授予使用资源的权限)。

AWS GovCloud (US)是亚马逊开发的存储解决方案,旨在满足美国联邦政府严格而具体的数据安全要求。AWS GovCloud (US)的工作方式与Amazon S3相同,但以下几点除外:

  • 您不能将AWS GovCloud (US)区域中的Amazon S3存储桶的内容直接复制到或从其他AWS区域复制。

  • 如果您使用Amazon S3策略,请使用AWS GovCloud (US) Amazon资源名称(ARN)标识符来明确指定所有AWS中的资源,例如在IAM策略、Amazon S3存储桶名称和API调用中。

    • 在 AWS GovCloud (美国) 区域中,ARN 的标识符与其他标准 AWS 区域中的标识符不同,为 arn:aws-us-gov。如果您需要指定美国西部或美国东部区域,请使用以下 ARN 之一。

      • 对于美国西部,请使用 us-gov-west-1

      • 对于美国东部,请使用 us-gov-east-1

    • 对于所有其他标准区域,ARN 以以下内容开头:arn:aws

  • 在 AWS GovCloud (美国) 区域中,请使用 Amazon 简单存储服务端点和配额 中“Amazon S3 端点”表的“AWS GovCloud (美国东部)”和“AWS GovCloud (美国西部)”行中列出的端点。如果您正在处理受出口管制的数据,请使用 SSL/TLS 端点之一。如果您有 FIPS 要求,请使用 FIPS 140-2 端点,例如 https://s3-fips.us-gov-west-1.amazonaws.comhttps://s3-fips.us-gov-east-1.amazonaws.com

  • 要查找 AWS 强加的其他限制,请参阅 Amazon 简单存储服务在 AWS GovCloud (美国) 中的不同之处

配置 Amazon Web Services

您需要为 OpenShift 数据保护 API (OADP) 配置 Amazon Web Services (AWS)。

先决条件
步骤
  1. 设置 BUCKET 变量

    $ BUCKET=<your_bucket>
  2. 设置 REGION 变量

    $ REGION=<your_region>
  3. 创建一个 AWS S3 存储桶

    $ aws s3api create-bucket \
        --bucket $BUCKET \
        --region $REGION \
        --create-bucket-configuration LocationConstraint=$REGION (1)
    1 us-east-1 不支持 LocationConstraint。如果您的区域是 us-east-1,请省略 --create-bucket-configuration LocationConstraint=$REGION
  4. 创建一个 IAM 用户

    $ aws iam create-user --user-name velero (1)
    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
  6. 附加策略以授予 velero 用户必要的最小权限

    $ aws iam put-user-policy \
      --user-name velero \
      --policy-name velero \
      --policy-document file://velero-policy.json
  7. velero 用户创建一个访问密钥

    $ aws iam create-access-key --user-name velero
    示例输出
    {
      "AccessKey": {
            "UserName": "velero",
            "Status": "Active",
            "CreateDate": "2017-07-31T22:24:41.576Z",
            "SecretAccessKey": <AWS_SECRET_ACCESS_KEY>,
            "AccessKeyId": <AWS_ACCESS_KEY_ID>
      }
    }
  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

    安装数据保护应用程序之前,您可以使用 credentials-velero 文件为 AWS 创建一个 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 中指定。

  • 快照位置的默认 Secret,在 DataProtectionApplication 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

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

为不同的凭据创建配置文件

如果您的备份和快照位置使用不同的凭据,则在 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>
  2. 使用 credentials-velero 文件创建一个 Secret 对象

    $ oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=credentials-velero (1)
  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"

使用 AWS 配置备份存储位置

您可以按照以下示例过程配置 AWS 备份存储位置 (BSL)。

先决条件
  • 您已使用 AWS 创建了一个对象存储桶。

  • 您已安装 OADP 运算符。

步骤
  • 使用适用于您用例的值配置 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)
    1 对象存储插件的名称。在此示例中,插件为 aws。此字段是必需的。
    2 用于存储备份的存储桶的名称。此字段是必需的。
    3 用于存储备份的存储桶中的前缀。此字段是可选的。
    4 备份存储位置的凭据。您可以设置自定义凭据。如果未设置自定义凭据,则使用默认凭据的密钥。
    5 密钥凭据数据中的key
    6 包含凭据的密钥名称。
    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/,或完整的ARN,以启用对存储在S3中的备份的加密。请注意,kmsKeyId不能与customerKeyEncryptionFile一起使用。这是一个可选字段。
    13 指定包含SSE-C客户密钥的文件,以启用对存储在S3中的备份的客户密钥加密。该文件必须包含一个32字节的字符串。customerKeyEncryptionFile字段指向velero容器内挂载的密钥。将以下键值对添加到velero cloud-credentials密钥:customer-key: 。请注意,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的校验和算法。支持的值包括:CRC32CRC32CSHA1SHA256。如果将此字段设置为空字符串(""),则将跳过校验和检查。默认值为CRC32。这是一个可选字段。

创建OADP SSE-C加密密钥以增强数据安全性

Amazon Web Services (AWS) S3使用Amazon S3托管密钥 (SSE-S3) 应用服务器端加密,作为Amazon S3中每个存储桶的基础加密级别。

OpenShift API for Data Protection (OADP) 在将数据从集群传输到存储时,使用SSL/TLS、HTTPS和velero-repo-credentials密钥进行数据加密。为了防止AWS凭据丢失或被盗的情况下的备份数据泄露,请应用额外的加密层。

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

您可以使用带有客户提供的密钥的服务器端加密 (SSE-C) 来存储您自己的加密密钥。如果您的AWS凭据泄露,此功能可提供额外的安全性。

务必以安全可靠的方式存储加密密钥。如果您没有加密密钥,则无法恢复加密数据和备份。

先决条件
  • 要使OADP将包含您的SSE-C密钥的密钥挂载到/credentials处的Velero pod,请使用以下AWS默认密钥名称:cloud-credentials,并至少保留以下标签之一为空

以下过程包含一个spec:backupLocations块的示例,该块未指定凭据。此示例将触发OADP密钥挂载。

  • 如果您需要备份位置使用与cloud-credentials不同的名称的凭据,则必须添加一个快照位置(例如以下示例中的位置),该位置不包含凭据名称。由于该示例不包含凭据名称,因此快照位置将使用cloud-credentials作为其拍摄快照的密钥。

未指定凭据的DPA中的示例快照位置
 snapshotLocations:
  - velero:
      config:
        profile: default
        region: <region>
      provider: aws
# ...
步骤
  1. 创建SSE-C加密密钥

    1. 生成一个随机数,并将其保存为名为sse.key的文件,方法是运行以下命令

      $ dd if=/dev/urandom bs=1 count=32 > sse.key
    2. 使用Base64编码sse.key,并将结果保存为名为sse_encoded.key的文件,方法是运行以下命令

      $ cat sse.key | base64 > sse_encoded.key
    3. 将名为sse_encoded.key的文件链接到名为customer-key的新文件,方法是运行以下命令

      $ ln -s sse_encoded.key customer-key
  2. 创建OpenShift Container Platform密钥

    • 如果您最初安装和配置OADP,请同时创建AWS凭据和加密密钥,方法是运行以下命令

      $ oc create secret generic cloud-credentials --namespace openshift-adp --from-file cloud=<path>/openshift_aws_credentials,customer-key=<path>/sse_encoded.key
    • 如果您正在更新现有安装,请编辑DataProtectionApplication CR清单的cloud-credential secret块的值,如下例所示

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

    spec:
      backupLocations:
        - velero:
            config:
              customerKeyEncryptionFile: /credentials/customer-key
              profile: default
    # ...

    您必须重新启动Velero pod才能在现有安装上正确重新挂载密钥凭据。

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

验证

要验证您是否无法在不包含附加密钥的情况下下载加密文件,请创建一个测试文件,将其上传,然后尝试下载它。

  1. 通过运行以下命令创建测试文件

    $ echo "encrypt me please" > test.txt
  2. 通过运行以下命令上传测试文件

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

    $ s3cmd get s3://<bucket>/test.txt test.txt

    下载失败,因为文件已使用附加密钥加密。

  4. 使用附加加密密钥下载文件,方法是运行以下命令

    $ aws s3api get-object \
        --bucket <bucket> \
        --key test.txt \
        --sse-customer-key fileb://sse.key \
        --sse-customer-algorithm AES256 \
        downloaded.txt
  5. 通过运行以下命令读取文件内容

    $ cat downloaded.txt
    示例输出
    encrypt me please
其他资源

您还可以使用附加加密密钥下载由Velcro备份的文件。请参见 使用SSE-C加密密钥下载由Velero备份的文件

使用SSE-C加密密钥下载由Velero备份的文件

验证SSE-C加密密钥时,您还可以使用附加加密密钥下载使用Velcro备份的文件。

步骤
  • 运行以下命令下载 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

配置数据保护应用程序

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

设置 Velero CPU 和内存资源分配

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

先决条件
  • 您必须已安装 OpenShift 数据保护 (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 数据保护 (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`。

  • 如果备份和快照位置使用不同的凭据,则必须创建名称为 `cloud-credentials` 的默认 `Secret`,其中包含备份和快照位置凭据的单独配置文件。

    如果您不想在安装过程中指定备份或快照位置,您可以创建一个包含空 `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:
            - 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)
    1 OADP 的默认命名空间为 `openshift-adp`。命名空间是一个变量,是可配置的。
    2 `openshift` 插件是强制性的。
    3 指定在超时发生之前等待多个 Velero 资源(例如 Velero CRD 可用性、卷快照删除和备份存储库可用性)的分钟数。默认为 10 分钟。
    4 将管理请求路由到服务器的管理代理。
    5 如果您想启用 `nodeAgent` 并执行文件系统备份,请将此值设置为 `true`。
    6 输入 `kopia` 或 `restic` 作为您的上传器。安装后您无法更改选择。对于内置 DataMover,您必须使用 Kopia。`nodeAgent` 部署了一个守护程序集,这意味着 `nodeAgent` pod 在每个工作节点上运行。您可以通过将 `spec.defaultVolumesToFsBackup: true` 添加到 `Backup` CR 来配置文件系统备份。
    7 指定 Kopia 或 Restic 可用的节点。默认情况下,Kopia 或 Restic 在所有节点上运行。
    8 指定一个桶作为备份存储位置。如果该桶不是 Velero 备份的专用桶,则必须指定一个前缀。
    9 如果该桶用于多种用途,则为 Velero 备份指定一个前缀,例如 `velero`。
    10 指定是否强制为 S3 对象使用路径样式 URL(布尔值)。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. 点击创建

验证
  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

配置节点代理和节点标签

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: ""

使用 MD5 校验和算法配置备份存储位置

您可以将数据保护应用程序 (DPA) 中的备份存储位置 (BSL) 配置为对 Amazon 简单存储服务 (Amazon S3) 和与 S3 兼容的存储提供商都使用 MD5 校验和算法。校验和算法计算上传和下载到 Amazon S3 的对象的校验和。您可以使用以下选项之一来设置 DPA 的spec.backupLocations.velero.config.checksumAlgorithm部分中的checksumAlgorithm字段。

  • CRC32

  • CRC32C

  • SHA1

  • SHA256

您也可以将checksumAlgorithm字段设置为空值以跳过 MD5 校验和检查。

如果您未为checksumAlgorithm字段设置值,则默认值将设置为CRC32

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

  • 您已将 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
    1 指定checksumAlgorithm。在此示例中,checksumAlgorithm字段设置为一个空值。您可以从以下列表中选择一个选项:CRC32CRC32CSHA1SHA256

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

空值仅添加到使用 DPA 创建的 BSL。如果您使用任何其他方法创建 BSL,则不会添加此值。

使用客户端突发和 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。

使用多个 BSL 配置 DPA

您可以使用多个 BSL 配置 DPA 并指定云提供商提供的凭据。

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

  • 您必须使用云提供商提供的凭据创建密钥。

步骤
  1. 使用多个 BSL 配置 DPA。请参见以下示例。

    示例 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)
    #...
    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
    1 指定要备份的命名空间。
    2 指定存储位置。

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