阿里云ACK 在几个月前上线了 kubernetes (K8S) 应用备份-公测版,该功能是基于开源项目 Velero 开发的一款产品,用来对 K8S 集群中的应用和持久卷提供:

  1. 备份和恢复
  2. 容灾
  3. 迁移

本文通过示例的方式来了解该应用备份功能。

前提条件

  • 通过工单申请开通应用备份公测版
  • 创建ACK K8S集群
  • 创建OSS bucket资源并授权ACK K8S 集群 OSS读写权限 用于应用备份

安装步骤

  1. 在容器服务-Kubernetes 下选择指定ACK集群

  2. 在左侧运维管理菜单中选择 应用备份(公测)

  3. 在页面 "安装组件",点击 开始安装 按钮,进行 Velero 组件安装;

  4. 安装成功后,右侧会显示如下应用备份管理界面

配置备份仓库

  • 安装结束后,需要先创建一个备份仓库 (目前仅支持 OSS), 选择前提条件中配置的 OSS bucket 填写对应的 bucket 信息

  • 备份仓库创建成功后,确保对应的状态为 Available ;

    • 如果状态为 "Unavailable", 可以通过 kubectl -n velero logs velero-xxx 来查看 velero log 进行排错

部署应用实例

使用经典的wordpress + mysql 有状态应用作为 应用备份的测试用例。

  1. 参考 https://github.com/jibutech/examples/blob/master/mysql-wordpress-pd/wordpress-mysql-acs-pvc.yaml 在ACS 集群中部署应用 kubectl apply -f https://raw.githubusercontent.com/jibutech/examples/master/mysql-wordpress-pd/wordpress-mysql-acs-pvc.yaml

  2. 在ACS console 选择 网络 -> 路由,创建 访问 wordpress 所需的 ingress 服务,如下

  3. 通过 ingress URL 安装 wordpress,并且创建一篇 blog 作为应用数据

备份

  1. 在 ACS console 应用备份界面, 选择备份并创建, 选择之前添加的 OSS 备份仓库,指定备份命名空间,此处为 wordpress

  2. 选择 开启 备份存储卷 来备份 wordpress 和 mysql 中的应用数据。 此处选择 restic 文件系统进行数据复制 (云盘快照测试失败)

  3. 创建完 备份请求后,等待备份状态变成 Completed 表示备份成功 (两次尝试后成功)

恢复

  1. 删除 wordpress 命名空间,模拟数据丢失场景

       [root@k8smaster ~]# kubectl delete ns wordpress
       namespace "wordpress" deleted
  2. 在 ACS console 应用备份界面,选择恢复,从备份列表选择已完成的备份名称,进行恢复

  3. 创建完 恢复请求后, 等待恢复状态变成 Completed 表示恢复成功 (此处示例中虽为PartiallyFailed,但实际应用和数据恢复成功)

  4. 访问之前的 ingress URL, 验证恢复的数据正确

体验感受

  • 通过ACS console提供基于Velero的应用和数据备份 功能,简化了用户日常通过使用velero命令行的方式来备份和恢复数据。
  • 目前该应用备份尚处于公测版本,从稳定性角度,仍然需要进一步提高来满足日常运维的需要。
  • 当前版本只针对单个ACS 集群提供备份和恢复服务,尚未提供容灾迁移功能。

问题

  • snapshot 备份失败
  • 从web 界面 删除 backup 失败
    • 通过 kubectl -n velero delete backups.velero.io wordpress-backup 删除velero backup 资源后,backup 资源会重新创建
  • 安装成功后,刷新 应用备份 页面,仍然提示 需要 安装组件
    • 关闭页面,重新选择ACS 集群,选择运维管理,进入应用备份 页面
  • 恢复完成,但恢复状态显示为 PartiallyFailed

问题调试

应用备份服务 在ACS K8S 环境中 安装 Velero 命令空间以及响应的 restic pods 来实现 K8S 中应用和存储卷的备份以及恢复功能。通过以下命令可以查看当前 velero 和备份/恢复资源

kubectl -n velero get backups.velero.io test-wp-backup -o yaml
kubectl -n velero get backupstoragelocations.velero.io
kubectl -n velero get restores.velero.io restore-wp  -o yaml
kubectl -n velero logs velero-c4dbd9dc7-nlqfz velero > velero.log

更多调试方法,请参考 velero troubleshoot

    说点什么吧...