ACK基于开源项目Velero开发了应用备份功能。该功能支持ACK集群和外部注册集群对应用和存储卷进行单集群和跨集群的备份和恢复。本文介绍如何对Kubernetes应用进行备份及恢复,以便于对您的集群应用及数据进行有效的保护。

前提条件

背景信息

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

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

使用限制

  • 支持对应用数据进行全量备份,暂不支持增量备份。
  • 备份应用时,正在被删除的资源不会被备份。
  • 如果想使用云盘快照来进行卷的备份,需要安装CSI插件并且CSI版本大于或等于1.1.0。关于如何安装CSI插件的详情,请参见安装与升级CSI组件

步骤一:配置OSS权限

为托管版或专有版集群配置权限

如果您的集群为托管版集群或专有版集群,您需要为托管版集群或专有版集群配置OSS权限。

  1. 为OSS创建自定义权限策略。具体步骤,请参见创建自定义策略
    说明 更多OSS细粒度授权配置信息,请参见通过RAM对OSS进行权限管理

    如果您想要所有OSS的权限,请按以下示例设置权限策略。

    {
        "Version": "1",
        "Statement": [
            {
                "Action": [
                    "oss:PutObject",
                    "oss:GetObject",
                    "oss:DeleteObject",
                    "oss:GetBucket",
                    "oss:ListObjects",
                    "oss:ListBuckets"
                ],
                "Resource": [
                    "*"
                ],
                "Effect": "Allow"
            }
        ]
    }
    如果您只想要指定OSS的读写权限,请按以下示例设置权限策略。
    {
        "Version": "1",
        "Statement": [
            {
                "Action": [
                    "oss:PutObject",
                    "oss:GetObject",
                    "oss:DeleteObject",
                    "oss:GetBucket",
                    "oss:ListObjects",
                    "oss:ListBuckets"
                ],
                "Resource": [
                    "acs:oss:*:*:mybackups",
                    "acs:oss:*:*:mybackups/*"
                ],
                "Effect": "Allow"
            }
        ]
    }
    您需要将上述代码中的mybackups替换为您自己的OSS名称。
  2. 为托管集群RAM角色添加权限。
    1. 登录容器服务管理控制台
    2. 在控制台左侧导航栏中,单击集群
    3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
    4. 在集群信息页面单击集群资源页签,查看Worker RAM角色。
    5. 登录RAM控制台
    6. 在控制台左侧导航栏单击授权
    7. 授权页面单击新增授权,在添加权限对话框配置参数,然后单击确定
      参数 说明
      授权范围 可选云账号全部资源指定资源组
      被授权主体 输入Worker RAM角色。
      选择权限 单击自定义策略,在搜索框中搜索步骤1中创建的权限策略,然后单击目标权限策略名称。

为注册集群配置权限

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

  1. 创建RAM用户。具体操作,请参见创建RAM用户
  2. 为OSS创建自定义权限策略。具体操作,请参见步骤1
  3. 为RAM用户添加权限。具体操作,请参见为RAM用户授权
  4. 为RAM用户创建AccessKey。具体操作,请参见获取AccessKey
  5. 在注册集群中创建Secret。

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

    例如,对于Migrate Controller组件,ACK继承Velero开源社区的使用习惯,将其全部安装在名为velero的命名空间下。所以您需要先创建这个命名空间(如果velero的命名空间不存在),然后在这个命名空间下引用AccessKey信息创建alibaba-addon-secret的Secret资源。

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

      您需要将上述代码中your AccessKey IDyour AccessKey Secret替换为您在步骤4中获取的AccessKey信息。

步骤二:安装应用备份组件

说明 首次使用应用备份功能,您需按照应用备份组件。如果您已安装应用备份组件,请忽略此步骤。
  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 在集群管理页左侧导航栏选择运维管理 > 应用备份(公测)
  5. 应用备份页面单击开始安装
    说明 应用备份组件安装完之后,会生成Velero的命名空间,在使用备份过程中,请勿删除该命名空间。
    安装完成后,显示以下界面,说明应用备份组件安装成功。应用备份组件

步骤三:创建备份仓库

当前ACK应用备份使用阿里云OSS来对备份的数据进行存储。接下来为您介绍接入OSS基本流程。

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 在集群管理页左侧导航栏选择运维管理 > 应用备份(公测)
  5. 应用备份页面备份仓库页签下单击创建
  6. 创建面板配置参数,然后单击确定
    参数 说明
    名称 备份仓库的名称,支持小写字母和数字。
    Bucket区域 OSS Bucket所在地域。
    Bucket名称 OSS Bucket的名称。
    Bucket子目录 OSS Bucket的子目录(非必填)。
    网络模式 支持公网私网。如果您的环境可以使用OSS内网端点进行数据传输,则选择私网,ACK默认使用公网传输。

步骤四:创建备份任务

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 在集群管理页左侧导航栏选择运维管理 > 应用备份(公测)
  5. 应用备份页面单击备份页签。
  6. 备份页签单击创建
  7. 创建对话框设置备份应用的相关参数,然后单击确定
    创建备份
    参数 描述
    名称 设置备份任务的名称,必填项。
    备份仓库 选择需要关联的备份仓库,必填项。
    备份命名空间 支持选中一个或者多个备份命名空间。表示备份选中的一个或多个命名空间中的应用。
    指定标签备份 填写需要备份的应用的标签,以指定备份带有该标签的应用。
    排除命名空间 支持选中一个或者多个排查命名空间。表示排除备份选中的排除命名空间中的应用。
    排除资源 支持填写多个资源对象名称,多个资源对象名称以英文逗号(,)间隔,例如pod,secret等。表示排除备份选中的资源对象应用。
    备份存储卷 设置是否开启备份存储卷以存储应用中的数据。
    当选中备份存储卷时,需要设置存储卷备份方式
    • 云盘快照:使用阿里云云盘快照功能,应用数据存储在后端云盘中。
    • Restic:Restic是开源的数据复制技术,应用数据存储在OSS中。
    有效期 设置备份任务的数据存储有效期,过期之后数据将无法恢复。
    定时备份 设置是否开启定时备份应用及应用内数据。支持Crontab表达式设置定时备份。关于如何使用Crontab表达式,请参见how-use-cron-linux
    说明
    • 备份任务名称仅支持小写字母和数字,不能有空格。
    • 备份命名空间及排除命名空间均可以选择多个。
    • 如果指定标签备份,每个备份任务只能输入一个标签。
    • 备份存储卷时,云盘快照集成了阿里云云盘快照技术,而Restic是开源的数据复制技术。推荐使用阿里云云盘快照来进行数据备份。
    • 定时备份的表达式,支持Linux Crontab以及按照间隔备份。
    • 如果开启了定时备份功能,则在应用备份页面的定时备份配置页签可以看到定时备份的详细配置信息。
    备份页签下创建的备份任务状态显示Completed,表示该任务备份成功。

步骤五:创建恢复任务

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 在集群管理页左侧导航栏选择运维管理 > 应用备份(公测)
  5. 应用备份页面单击恢复页签。
  6. 恢复页签单击创建恢复任务
  7. 创建恢复任务对话框输入名称,选择备份名称,然后单击确定
    说明
    • 恢复任务名称仅支持小写字母和数字。
    • 恢复时对于已经存在的资源不会覆盖,只会恢复当前集群中不存在的资源。如果想恢复到之前的版本,则需要删除现有资源,然后在进行恢复。
  8. 在提示对话框中单击确定

跨集群恢复应用

执行跨集群恢复应用前,您需要创建2个集群。本例中一个名为cluster_A集群,另一个名为cluster_B集群。接下来展示在cluster_A集群备份应用,在cluster_B集群恢复应用。
注意 创建集群时,请确保2个集群的Kubernetes版本一致,否则会导致跨集群恢复应用失败。
架构图
  1. 授予cluster_A和cluster_B集群OSS权限。具体操作,请参见步骤一:配置OSS权限
  2. 在cluster_A和cluster_B集群中安装应用备份组件。具体操作,请参见步骤二:安装应用备份组件
  3. 在cluster_A和cluster_B集群创建备份仓库。创建备份仓库时,给cluster_A和cluster_B集群设置同一个OSS,并且选择公网访问。具体操作,请参见步骤三:创建备份仓库
  4. 在cluster_A集群创建备份任务。具体操作,请参见步骤四:创建备份任务
    cluster_A集群创建备份任务完成后,您可以在cluster_B集群应用备份页面备份页签下看到cluster_A集群的备份任务。
  5. 在cluster_B集群应用备份页签恢复页签下选择cluster_A集群的备份任务,执行恢复操作。具体操作,请参见步骤五:创建恢复任务