阿里云容器服务备份中心为无状态或有状态应用的备份、恢复与迁移提供了一站式的解决方案,特别是对混合云,多集群的有状态应用提供了数据容灾和应用迁移能力。本文介绍如何开启集群备份能力及不同类型集群的相关授权配置。

前提条件

背景信息

随着越来越多的应用运行在Kubernetes中,对应用进行定时的备份就显得格外重要。备份中心可以有效的防护由于意外情况导致服务长时间中断而无法恢复的情况。区别于传统的备份单机、备份磁盘的方案,基于Kubernetes的应用备份,主要关注于运行在Kubernetes中的应用及其数据、资源对象、配置及整个命名空间等。

步骤一:安装备份服务组件

说明 首次使用备份中心功能,您需安装备份服务组件;如果您已安装,则请忽略此步骤。
  1. 登录容器服务管理控制台,在左侧导航栏中选择集群
  2. 集群列表页面中,单击目标集群名称,然后在左侧导航栏中,选择运维管理 > 应用备份
  3. 应用备份页面单击开始安装
    系统会自动检测备份仓库,若您未创建备份仓库,请先创建备份仓库,具体操作,请参见创建备份仓库
    • 首次安装完成后,显示以下界面,说明备份服务组件安装成功。应用备份组件
      说明 备份服务组件安装完之后,会生成csdr的命名空间,在使用备份过程中,请勿删除该命名空间。
    • 若您已安装该组件,但备份组件不是最新版本,请在应用备份页面单击开始升级,系统会自动将应用备份组件升级至最新版本。

步骤二:为不同类型的集群配置OSS与HBR权限

当前备份中心只使用阿里云OSS存储备份的应用。在使用阿里云对象存储OSS前,您需要配置OSS权限。

若是在混合云场景中使用备份中心,您在开通HBR服务后,还需要配置HBR权限。以下介绍ACK托管版集群、ACK专有版集群与注册集群的权限配置方式。

ACK托管版集群权限配置

  • 配置OSS权限

    ACK托管版集群必须以cnfs-oss-***名称开头的OSS Bucket作为备份中心的备份仓库,您无需再为其配置OSS权限。

  • 配置HBR权限

    对于ACK托管版集群,您无需再为其配置HBR权限。

ACK专有版集群权限配置

您需要为专有版集群配置OSS权限。在混合云场景下,您还需要为专有版集群配置HBR权限。

  1. 为OSS与HBR创建如下自定义权限策略。具体操作,请参见通过脚本编辑模式创建自定义权限策略
    • OSS权限策略内容
      说明
      • 如果您想要所有OSS的权限,请按以下示例设置权限策略:
        {
            "Version": "1",
            "Statement": [
                {
                    "Action": [
                        "oss:PutObject",
                        "oss:GetObject",
                        "oss:DeleteObject",
                        "oss:GetBucket",
                        "oss:ListObjects",
                        "oss:ListBuckets",
                        "oss:GetBucketStat"
                    ],
                    "Resource": [
                        "*"
                    ],
                    "Effect": "Allow"
                }
            ]
        }
      • 如果您只想要指定OSS的读写权限,请按以下示例设置权限策略:
        {
            "Version": "1",
            "Statement": [
                {
                    "Action": [
                        "oss:PutObject",
                        "oss:GetObject",
                        "oss:DeleteObject",
                        "oss:GetBucket",
                        "oss:ListObjects",
                        "oss:ListBuckets", 
                        "oss:GetBucketStat"
                    ],
                    "Resource": [
                        "acs:oss:*:*:mybackups",
                        "acs:oss:*:*:mybackups/*"
                    ],
                    "Effect": "Allow"
                }
            ]
        }
    • HBR权限策略内容
      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "hbr:CreateVault",
                      "hbr:CreateBackupJob",
                      "hbr:DescribeVaults",
                      "hbr:DescribeBackupJobs2",
                      "hbr:DescribeRestoreJobs",
                      "hbr:SearchHistoricalSnapshots",
                      "hbr:CreateRestoreJob",
                      "hbr:AddContainerCluster",
                      "hbr:DescribeContainerCluster",
                      "hbr:DescribeRestoreJobs2"
                  ],
                  "Resource": "*"
              }
          ]
      }
  2. 为集群的Worker RAM角色添加OSS与HBR的权限。
    1. 登录容器服务管理控制台,在左侧导航栏中选择集群
    2. 集群列表页面中,单击目标集群名称,然后在左侧导航栏中,选择集群信息
    3. 集群信息页面,单击集群资源页签,然后单击Worker RAM角色右侧的链接KubernetesWorkerRole-****
    4. 在RAM控制台的KubernetesWorkerRole-****页面,单击权限管理页签,然后单击新增授权
    5. 新增授权页面,配置参数后,单击确定,然后单击完成
      参数 说明
      授权范围 可选整个云账号指定资源组
      被授权主体 使用已有的Worker RAM角色。
      选择权限 单击自定义策略,在搜索框中搜索步骤1中创建的权限策略,然后单击目标权限策略名称。

注册集群权限配置

您需要为注册集群创建RAM用户,为RAM用户添加访问云资源权限,然后创建AccessKey。

  1. 创建RAM用户。具体操作,请参见创建RAM用户
  2. 为OSS与HBR创建如下自定义权限策略。具体操作,请参见通过脚本编辑模式创建自定义权限策略
    • OSS权限策略内容
      说明
      • 如果您想要所有OSS的权限,请按以下示例设置权限策略:
        {
            "Version": "1",
            "Statement": [
                {
                    "Action": [
                        "oss:PutObject",
                        "oss:GetObject",
                        "oss:DeleteObject",
                        "oss:GetBucket",
                        "oss:ListObjects",
                        "oss:ListBuckets",
                        "oss:GetBucketStat"
                    ],
                    "Resource": [
                        "*"
                    ],
                    "Effect": "Allow"
                }
            ]
        }
      • 如果您只想要指定OSS的读写权限,请按以下示例设置权限策略:
        {
            "Version": "1",
            "Statement": [
                {
                    "Action": [
                        "oss:PutObject",
                        "oss:GetObject",
                        "oss:DeleteObject",
                        "oss:GetBucket",
                        "oss:ListObjects",
                        "oss:ListBuckets", 
                        "oss:GetBucketStat"
                    ],
                    "Resource": [
                        "acs:oss:*:*:mybackups",
                        "acs:oss:*:*:mybackups/*"
                    ],
                    "Effect": "Allow"
                }
            ]
        }
    • HBR权限策略内容
      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "hbr:CreateVault",
                      "hbr:CreateBackupJob",
                      "hbr:DescribeVaults",
                      "hbr:DescribeBackupJobs2",
                      "hbr:DescribeRestoreJobs",
                      "hbr:SearchHistoricalSnapshots",
                      "hbr:CreateRestoreJob",
                      "hbr:AddContainerCluster",
                      "hbr:DescribeContainerCluster",
                      "hbr:DescribeRestoreJobs2"
                  ],
                  "Resource": "*"
              }
          ]
      }
  3. 为RAM用户添加OSS和HBR权限。具体操作,请参见为RAM用户授权
  4. 为RAM用户创建AccessKey。具体操作,请参见获取AccessKey
  5. 在注册集群中创建Secret。

    为了保证您的AccessKey信息只在您的注册集群内安全使用,您需要先在注册集群中使用AccessKey信息部署一个名为alibaba-addon-secret的Secret资源,以降低泄露风险。

    1. 执行以下命令,创建命名空间csdr
      kubectl create ns csdr
    2. 执行以下命令,创建名为alibaba-addon-secret的Secret资源。
      kubectl -n csdr create secret generic alibaba-addon-secret --from-literal='access-key-id=<your AccessKey ID>' --from-literal='access-key-secret=<your AccessKey Secret>'

      您需要将上述代码中<your AccessKey ID><your AccessKey Secret>替换为您在上一步获取的AccessKey信息。