阿里云容器服务备份中心为集群内的有状态应用提供灾难备份和恢复能力,对于Kubernetes集群内的有状态应用的崩溃一致性、应用一致性及跨地域的灾难恢复提供了一站式的解决方案。本文介绍如何通过应用备份功能或Velero工具实现应用与存储卷的备份和恢复。

前提条件

已安装备份服务组件。具体操作,请参见 安装备份服务组件

使用限制

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

方式一:通过控制台应用备份功能备份和恢复应用

步骤一:创建备份仓库

当前应用备份功能使用阿里云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. 在提示对话框中单击确定

方式二:通过Velero工具备份和恢复应用

Velero是一个云原生的集群应用备份、恢复和迁移工具。Velero采用GO语言编写,可以安全地备份、恢复和迁移Kubernetes集群中的应用及其持久化存储卷。有关Velero源码项目地址,请参见Velero。有关Velero Plugin for Alibaba Cloud源码项目地址,请参见velero-plugin

使用Velero工具前需要根据服务器的操作系统类型安装Velero客户端。具体操作,请参见Velero客户端

步骤一:配置OSS Bucket存储空间

在Velero中,需要创建BackupStorageLocation自定义资源用于配置Velero备份的存储位置。

  1. 使用以下模板创建名为BackupStorageLocation.yaml文件。
    apiVersion: velero.io/v1
    kind: BackupStorageLocation
    metadata:
      labels:
        component: velero
      name: default
      namespace: velero
    spec:
      config:
        region: cn-hangzhou
      objectStorage:
        bucket: velero-bucket
      provider: alibabacloud
    说明
    • 设置spec.config.region为OSS Bucket所在地域的信息。
    • 设置spec.objectStorage.bucket为OSS Bucket名称。
    • 如果您的环境可以使用OSS内网端点进行数据传输,则可以添加spec.config.network: internal,ACK默认使用内网传输。
    • 如果您想要使用OSS Bucket下一个指定的子目录,则可以添加spe.objectStorage.prefix: <your prefix>,ACK默认使用Bucket根目录。
  2. 执行以下命令配置OSS Bucket。
    kubectl apply -f BackupStorageLocation.yaml

步骤二:备份应用

执行以下命令使用Migrate Controller组件的Velero工具对Kubernetes集群下指定的一个或多个命名空间下的所有资源进行备份保存。
velero backup create <BACKUP NAME> --include-namespaces <INCLUDE NAMESPACES>
如何使用命令备份一个命名空间和两个命名空间的所有资源:
  • 执行以下命令备份命名空间nginx-examples下的应用。
    velero backup create backup-nginx --include-namespaces nginx-examples
  • 执行以下命令备份命名空间nginx-exampleswordpress下的应用。
    velero backup create backup-nginx-and-wordpress --include-namespaces nginx-examples,wordpress
说明 上面的应用备份操作并不会备份应用挂载的持久化数据卷数据,只备份Kubernetes资源的JSON格式编排文件。

如果您在备份应用的同时也希望可以备份应用挂载的持久化数据卷,请按以下步骤进行操作:

  1. 执行以下命令为挂载了持久化数据卷的Pod添加注解backup.velero.io/backup-volumes
    kubectl -n <NAMESPACE> annotate pod/<POD NAME> backup.velero.io/backup-volumes=<POD VOLUME NAME>
  2. 添加完注解后,执行以下命令继续创建备份。
    velero backup create <BACKUP NAME> --include-namespaces <INCLUDE NAMESPACES>
    例如,备份命名空间 nginx-examples下的Nginx应用及其持久化数据卷数据,持久化数据卷为 nginx-logs并挂载在应用 nginx-deployment-7477779c4f-rz95l上,其备份步骤为:
    1. 执行以下命令为Pod的数据卷添加注解。
      kubectl -n nginx-example annotate pod/nginx-deployment-7477779c4f-rz95l backup.velero.io/backup-volumes=nginx-logs
    2. 执行以下命令创建备份。
      velero backup create nginx-backup-with-pv --include-namespaces nginx-example
如果您需要定时备份应用,则执行以下命令创建定时备份。
velero schedule create <NAME> --include-namespaces <NAMESPACE> --schedule "SCHEDULE"
使用命令创建每7天和每24小时的定时备份的示例:
  • 创建定时备份nginx-app-with-pv-schedule-01,每7天备份一次命名空间nginx-examples下的应用。
    velero schedule create nginx-app-with-pv-schedule-01 --include-namespaces nginx-examples --schedule "0 7 * * *"
  • 创建定时备份nginx-app-with-pv-schedule-02,每24小时备份一次命名空间nginx-examples下的应用。
    velero schedule create nginx-app-with-pv-schedule-02 --include-namespaces nginx-examples --schedule "@every 24h"

步骤三:恢复应用

以删除整个命名空间再恢复应用为例,说明如何恢复应用。

  1. 执行以下命令删除整个nginx-example命名空间。
    kubectl delete ns nginx-example
  2. 执行以下命令恢复应用。
    velero restore create --from-backup nginx-backup-without-pv