×

您可以将OpenShift API for Data Protection (OADP)与Red Hat OpenShift Service on AWS (ROSA)集群一起使用,以备份和恢复应用程序数据。

在安装OpenShift API for Data Protection (OADP)之前,必须为OADP设置角色和策略凭据,以便它可以使用Amazon Web Services API。

此过程分为以下两个阶段:

  1. 准备AWS凭据

  2. 安装OADP Operator并赋予其IAM角色

为OADP准备AWS凭据

必须准备并配置Amazon Web Services帐户以接受OpenShift API for Data Protection (OADP)安装。

步骤
  1. 通过运行以下命令创建以下环境变量:

    将集群名称更改为与您的ROSA集群匹配,并确保您已以管理员身份登录集群。在继续之前,请确保所有字段都正确输出。

    $ export CLUSTER_NAME=my-cluster (1)
      export ROSA_CLUSTER_ID=$(rosa describe cluster -c ${CLUSTER_NAME} --output json | jq -r .id)
      export REGION=$(rosa describe cluster -c ${CLUSTER_NAME} --output json | jq -r .region.id)
      export OIDC_ENDPOINT=$(oc get authentication.config.openshift.io cluster -o jsonpath='{.spec.serviceAccountIssuer}' | sed 's|^https://||')
      export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
      export CLUSTER_VERSION=$(rosa describe cluster -c ${CLUSTER_NAME} -o json | jq -r .version.raw_id | cut -f -2 -d '.')
      export ROLE_NAME="${CLUSTER_NAME}-openshift-oadp-aws-cloud-credentials"
      export SCRATCH="/tmp/${CLUSTER_NAME}/oadp"
      mkdir -p ${SCRATCH}
      echo "Cluster ID: ${ROSA_CLUSTER_ID}, Region: ${REGION}, OIDC Endpoint:
      ${OIDC_ENDPOINT}, AWS Account ID: ${AWS_ACCOUNT_ID}"
    1 my-cluster替换为您的ROSA集群名称。
  2. 在AWS账户上,创建一个IAM策略以允许访问AWS S3。

    1. 运行以下命令检查策略是否存在:

      $ POLICY_ARN=$(aws iam list-policies --query "Policies[?PolicyName=='RosaOadpVer1'].{ARN:Arn}" --output text) (1)
      1 RosaOadp替换为您的策略名称。
    2. 输入以下命令创建策略JSON文件,然后在ROSA中创建策略:

      如果找不到策略ARN,则该命令将创建策略。如果策略ARN已存在,则if语句会故意跳过策略创建。

      $ if [[ -z "${POLICY_ARN}" ]]; then
        cat << EOF > ${SCRATCH}/policy.json (1)
        {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "s3:CreateBucket",
              "s3:DeleteBucket",
              "s3:PutBucketTagging",
              "s3:GetBucketTagging",
              "s3:PutEncryptionConfiguration",
              "s3:GetEncryptionConfiguration",
              "s3:PutLifecycleConfiguration",
              "s3:GetLifecycleConfiguration",
              "s3:GetBucketLocation",
              "s3:ListBucket",
              "s3:GetObject",
              "s3:PutObject",
              "s3:DeleteObject",
              "s3:ListBucketMultipartUploads",
              "s3:AbortMultipartUpload",
              "s3:ListMultipartUploadParts",
              "ec2:DescribeSnapshots",
              "ec2:DescribeVolumes",
              "ec2:DescribeVolumeAttribute",
              "ec2:DescribeVolumesModifications",
              "ec2:DescribeVolumeStatus",
              "ec2:CreateTags",
              "ec2:CreateVolume",
              "ec2:CreateSnapshot",
              "ec2:DeleteSnapshot"
            ],
            "Resource": "*"
          }
        ]}
      EOF
      
        POLICY_ARN=$(aws iam create-policy --policy-name "RosaOadpVer1" \
        --policy-document file:///${SCRATCH}/policy.json --query Policy.Arn \
        --tags Key=rosa_openshift_version,Value=${CLUSTER_VERSION} Key=rosa_role_prefix,Value=ManagedOpenShift Key=operator_namespace,Value=openshift-oadp Key=operator_name,Value=openshift-oadp \
        --output text)
        fi
      1 SCRATCH是为环境变量创建的临时目录的名称。
    3. 运行以下命令查看策略ARN:

      $ echo ${POLICY_ARN}
  3. 为集群创建一个IAM角色信任策略。

    1. 运行以下命令创建信任策略文件:

      $ cat <<EOF > ${SCRATCH}/trust-policy.json
        {
            "Version": "2012-10-17",
            "Statement": [{
              "Effect": "Allow",
              "Principal": {
                "Federated": "arn:aws:iam::${AWS_ACCOUNT_ID}:oidc-provider/${OIDC_ENDPOINT}"
              },
              "Action": "sts:AssumeRoleWithWebIdentity",
              "Condition": {
                "StringEquals": {
                  "${OIDC_ENDPOINT}:sub": [
                    "system:serviceaccount:openshift-adp:openshift-adp-controller-manager",
                    "system:serviceaccount:openshift-adp:velero"]
                }
              }
            }]
        }
      EOF
    2. 运行以下命令创建角色:

      $ ROLE_ARN=$(aws iam create-role --role-name \
        "${ROLE_NAME}" \
        --assume-role-policy-document file://${SCRATCH}/trust-policy.json \
        --tags Key=rosa_cluster_id,Value=${ROSA_CLUSTER_ID} \
               Key=rosa_openshift_version,Value=${CLUSTER_VERSION} \
               Key=rosa_role_prefix,Value=ManagedOpenShift \
               Key=operator_namespace,Value=openshift-adp \
               Key=operator_name,Value=openshift-oadp \
        --query Role.Arn --output text)
    3. 运行以下命令查看角色ARN:

      $ echo ${ROLE_ARN}
  4. 运行以下命令将IAM策略附加到IAM角色:

    $ aws iam attach-role-policy --role-name "${ROLE_NAME}" \
      --policy-arn ${POLICY_ARN}

安装OADP Operator并提供IAM角色

AWS安全令牌服务(AWS STS)是一种全局Web服务,它为IAM或联合用户提供短期凭据。使用STS的Red Hat OpenShift Service on AWS (ROSA)是ROSA集群的推荐凭据模式。本文档描述了如何在使用AWS STS的ROSA上安装OpenShift API for Data Protection (OADP)。

不支持Restic。

备份没有容器存储接口(CSI)快照支持的文件系统时,支持Kopia文件系统备份(FSB)。

示例文件系统包括:

  • Amazon Elastic File System (EFS)

  • 网络文件系统(NFS)

  • emptyDir

  • 本地卷

对于备份卷,使用AWS STS的ROSA上的OADP仅支持原生快照和容器存储接口(CSI)快照。

在使用STS身份验证的Amazon ROSA集群中,不支持在不同的AWS区域恢复备份的数据。

数据移动器功能目前在ROSA集群中不受支持。您可以使用原生的AWS S3工具来移动数据。

先决条件
  • 具有所需访问权限和令牌的Red Hat OpenShift Service on AWS ROSA集群。有关说明,请参阅之前的步骤“为OADP准备AWS凭据”。如果您计划使用两个不同的集群进行备份和恢复,则必须为每个集群准备AWS凭据,包括ROLE_ARN

步骤
  1. 通过输入以下命令从您的AWS令牌文件创建Red Hat OpenShift Service on AWS密钥:

    1. 创建凭据文件

      $ cat <<EOF > ${SCRATCH}/credentials
        [default]
        role_arn = ${ROLE_ARN}
        web_identity_token_file = /var/run/secrets/openshift/serviceaccount/token
        region = <aws_region> (1)
      EOF
      1 创建云资源的AWS区域。
    2. 为OADP创建一个命名空间

      $ oc create namespace openshift-adp
    3. 创建Red Hat OpenShift Service on AWS密钥

      $ oc -n openshift-adp create secret generic cloud-credentials \
        --from-file=${SCRATCH}/credentials

      在Red Hat OpenShift Service on AWS 4.15及更高版本中,OADP Operator通过Operator Lifecycle Manager (OLM)和Cloud Credentials Operator (CCO)支持新的标准化STS工作流程。在此工作流程中,您无需创建上述密钥,只需在使用Red Hat OpenShift Service on AWS Web控制台安装OLM管理的Operator时提供角色ARN即可,有关更多信息,请参阅“使用Web控制台从OperatorHub安装”。

      上述密钥由CCO自动创建。

  2. 安装OADP Operator

    1. 在Red Hat OpenShift Service on AWS Web控制台中,浏览到**Operators** → **OperatorHub**。

    2. 搜索**OADP Operator**。

    3. 在**role_ARN**字段中,粘贴您之前创建的role_arn,然后单击**Install**。

  3. 通过输入以下命令使用您的AWS凭据创建AWS云存储:

    $ cat << EOF | oc create -f -
      apiVersion: oadp.openshift.io/v1alpha1
      kind: CloudStorage
      metadata:
        name: ${CLUSTER_NAME}-oadp
        namespace: openshift-adp
      spec:
        creationSecret:
          key: credentials
          name: cloud-credentials
        enableSharedConfig: true
        name: ${CLUSTER_NAME}-oadp
        provider: aws
        region: $REGION
    EOF
  4. 通过输入以下命令检查应用程序的存储默认存储类:

    $ oc get pvc -n <namespace>
    示例输出
    NAME     STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    applog   Bound    pvc-351791ae-b6ab-4e8b-88a4-30f73caf5ef8   1Gi        RWO            gp3-csi        4d19h
    mysql    Bound    pvc-16b8e009-a20a-4379-accc-bc81fedd0621   1Gi        RWO            gp3-csi        4d19h
  5. 运行以下命令获取存储类:

    $ oc get storageclass
    示例输出
    NAME                PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
    gp2                 kubernetes.io/aws-ebs   Delete          WaitForFirstConsumer   true                   4d21h
    gp2-csi             ebs.csi.aws.com         Delete          WaitForFirstConsumer   true                   4d21h
    gp3                 ebs.csi.aws.com         Delete          WaitForFirstConsumer   true                   4d21h
    gp3-csi (default)   ebs.csi.aws.com         Delete          WaitForFirstConsumer   true                   4d21h

    以下存储类将有效:

    • gp3-csi

    • gp2-csi

    • gp3

    • gp2

    如果正在备份的应用程序都使用具有容器存储接口(CSI)的持久卷(PV),建议在OADP DPA配置中包含CSI插件。

  6. 创建DataProtectionApplication资源以配置与存储备份和卷快照的连接

    1. 如果您只使用CSI卷,请通过输入以下命令部署Data Protection Application:

      $ cat << EOF | oc create -f -
        apiVersion: oadp.openshift.io/v1alpha1
        kind: DataProtectionApplication
        metadata:
          name: ${CLUSTER_NAME}-dpa
          namespace: openshift-adp
        spec:
          backupImages: true (1)
          features:
            dataMover:
              enable: false
          backupLocations:
          - bucket:
              cloudStorageRef:
                name: ${CLUSTER_NAME}-oadp
              credential:
                key: credentials
                name: cloud-credentials
              prefix: velero
              default: true
              config:
                region: ${REGION}
          configuration:
            velero:
              defaultPlugins:
              - openshift
              - aws
              - csi
            restic:
              enable: false
      EOF
      1 ROSA支持内部镜像备份。如果您不想使用镜像备份,请将此字段设置为false
  1. 如果您使用CSI或非CSI卷,请通过输入以下命令部署Data Protection Application:

    $ cat << EOF | oc create -f -
      apiVersion: oadp.openshift.io/v1alpha1
      kind: DataProtectionApplication
      metadata:
        name: ${CLUSTER_NAME}-dpa
        namespace: openshift-adp
      spec:
        backupImages: true (1)
        features:
          dataMover:
             enable: false
        backupLocations:
        - bucket:
            cloudStorageRef:
              name: ${CLUSTER_NAME}-oadp
            credential:
              key: credentials
              name: cloud-credentials
            prefix: velero
            default: true
            config:
              region: ${REGION}
        configuration:
          velero:
            defaultPlugins:
            - openshift
            - aws
          nodeAgent: (2)
            enable: false
            uploaderType: restic
        snapshotLocations:
          - velero:
              config:
                credentialsFile: /tmp/credentials/openshift-adp/cloud-credentials-credentials (3)
                enableSharedConfig: "true" (4)
                profile: default (5)
                region: ${REGION} (6)
              provider: aws
    EOF
    1 ROSA 支持内部镜像备份。如果不想使用镜像备份,请将此字段设置为 false。
    2 请参阅关于nodeAgent属性的重要说明。
    3 credentialsFile字段是 pod 上挂载的 bucket 凭据位置。
    4 enableSharedConfig字段允许snapshotLocations共享或复用为 bucket 定义的凭据。
    5 使用 AWS 凭据文件中设置的配置文件名称。
    6 region指定为您的 AWS 区域。这必须与集群区域相同。

    现在,您可以根据应用程序备份中的描述,备份和恢复 AWS 上的 Red Hat OpenShift Service 应用程序。

在此配置中,resticenable参数设置为false,因为 OADP 不支持 ROSA 环境中的 Restic。

如果您使用 OADP 1.2,请替换此配置

nodeAgent:
  enable: false
  uploaderType: restic

为以下配置

restic:
  enable: false

如果您想使用两个不同的集群进行备份和恢复,则这两个集群必须在云存储 CR 和 OADP DataProtectionApplication配置中具有相同的 AWS S3 存储名称。

其他资源