5-1 Velero 备份 Kubernetes 详解

更新时间:2023年2月

Velero 简介

官网:Velero

官方文档:Velero Docs - Overview

Velero 是一个开源的 Kubernetes 备份恢复工具,其前身是 Heptio Ark。可以对 Kubernetes 集群资源和持久卷 进行安全地备份和恢复,或者执行灾难恢复以及迁移

Velero 作用包括

  • 备份和恢复集群数据
  • 迁移集群资源
  • 将生产集群负责到开发和测试集群

Velero 相关组件包括

  • Server:服务端,运行在集群上
  • Client:客户端,用户交互的命令行工具,与服务端通信完成备份操作
  • 第三方对象存储:用于存储备份数据

支持的存储类型

参考:Velero Docs - Providers


Velero 工作原理

每个 Velero 操作都是一个自定义资源,安装 Velero 之后,由 Kubernetes 自定义资源定义(CRD),并存储在 etcd 中。除了自定义资源之外,Velero 还包括处理自定义资源所需的相关操作的控制器

按需备份

备份操作

  • 将复制的 Kubernetes 对象压缩包上传到云端的对象存储
  • 调用对象存储所提供的 API 以创建持久卷的磁盘快照

可以选择指定在备份期间执行一些触发操作(backup hooks)。例如,在拍摄快照之前将数据库内存缓冲区刷新到磁盘。详见 backup hooks 文档:Velero Docs - Backup Hooks

注:集群备份并不是严格的原子备份。如果备份时正在创建或编辑 Kubernetes 对象,则备份中可能不包含这些对象

计划备份

计划操作可以定期备份数据。您可以随时创建定时备份,然后按照定时的指定间隔执行备份。时间间隔由 Cron 表达式决定

Velero 将会以 <SCHEDULE NAME>-<TIMESTAMP> 格式来命名创建的备份。其中,<TIMESTAMP> 的格式为 YYYYMMDDHhmms 。详细信息可以参考:Velero Docs - Backup Reference

备份工作流程

当执行 velero backup create test-backup 时,备份流程如下

  • Velero 客户端调用 Kubernetes API 服务(kube-apiserver),在 Kubernetes 中创建备份对象
  • BackupController 会监控到新的 Backup 对象并执行验证
  • BackupController 开始执行备份过程。通过向 API 服务查询资源来收集要备份的数据
  • BackupController 调用对象存储服务(例如:AWS、S3),上传备份文件

默认情况下,velero 备份创建会创建任何持久卷的磁盘快照。可以通过指定其他的选项来调整快照备份策略。例如:可以使用选项 --snapshotvolumes=false 禁用快照。其他选项请参考:velero backup create --help

在这里插入图片描述

恢复

恢复操作可以从之前创建的备份中还原所有对象和持久卷,也可以仅恢复对象和持久卷的过滤子集

Velero 在恢复时,支持多个命名空间重新映射。例如,在单个还原中,命名空间 “abc” 中的对象可以在命名空间 “def” 下重新创建,而命名空间 “123” 中的目标可以在 “456” 下重新生成

Velero 默认恢复的备份名称为 <BACKUP NAME>-<TIMESTAMP> ,也可以指定备份恢复。其中,<TIMESTAMP> 的格式为 YYYYMMDDHhmms 。还原后的对象会包含一个标签 velero.io/restore-name,值为 <RESTORE NAME>

默认情况下,备份存储位置以读写模式创建。但是,在恢复还原过程中,可以将备份存储位置配置为只读模式,禁用存储位置的备份创建和删除。确保在还原场景中不会无意中创建或删除备份

可以选择在还原期间或还原资源后执行一些触发操作(restore hooks)。例如:在数据库应用程序容器启动之前执行数据库还原操作。详见 restore hooks 文档:Velero Docs - How Velero Works

恢复工作流程

当执行 velero restore create 时,恢复流程如下:

  • Velero 客户端调用 Kubernetes API 服务(kube-apiserver),在 Kubernetes 中创建 Restore 对象
  • RestoreController 监控到新的 Restore 对象并执行验证
  • RestoreController 从对象存储服务获取备份信息。然后对备份的资源进行一些预处理,以确保恢复的资源能够在集群上运行。例如:使用备份的 API 版本验证恢复资源是否可以在目标集群上运行
  • RestoreController 启动还原过程,一次还原一个符合条件的资源

默认情况下,Velero 执行的是非破坏性恢复,这意味着它不会删除目标集群上的任何数据。如果目标集群中已经存在备份中的资源,Velero 将跳过该资源的恢复工作。可以通过选项指定将 Velero 的更新策略(默认为 --existing-resource-policy)。当此标志设置为 update 时,Velero 会尝试更新目标集群中的已存在的资源

更多恢复相关操作请查阅:Velero Docs - Restore Reference

备份的 API 版本

Velero 默认会使用 Kubernetes API Server 的首选版本进行资源备份。还原资源时,目标集群中必须存在相同的 API 版本,才能成功还原

设置备份过期

创建备份时,可以通过 --ttl <DURATION> 选项来指定 TTL(生存时间)。如果 Velero 发现有备份资源已过期,则会进行删除以下相关资源

  • 备份的资源
  • 云端对象存储的备份文件
  • 所有的 PersistentVolume 快照
  • 所有关联的还原

TTL 标签允许用户以小时、分钟和秒为单位指定备份保留期,格式为 --ttl 24h0m0s。如果未指定,将应用 30 天的默认 TTL 值

如果备份删除失败,则会在备份的自定义资源中添加标签 velero.io/gc-failure=<Reason>。后续可以使用该标签筛选和选择未能删除的备份

备份删除失败可能原因如下:

  • BSLNotFound:找不到备份的位置
  • BSLCannotGet:由于未知原因,无法从 API 服务检索到备份存储位置
  • BSLReadOnly:备份存储位置是只读的,无法执行删除

对象存储同步

Velero 会将对象存储作为正确的信息来源,不断检查以确保 Kubernetes 中始终存在正确的备份对象。如果存储桶中有一个格式正确的备份文件,但 Kubernetes API 中没有相应的备份对象,Velero 就会将对象存储中的信息同步到 Kubernetes

这就让 Velero 具备了集群迁移功能,允许恢复功能在迁移场景中工作,因为原始的备份对象在新集群中不存在,Velero 会自动同步对象存储中的信息到 Kubernetes

同理,如果一个已完成的备份对象(Completed)存在于 Kubernetes 中,但不存在于对象存储中。那么它将会被 Velero 从 Kubernetes 中删除

注:对象存储同步不会删除失败或部分失败的备份


安装配置 MinIO 单节点

本文采用 MinIO 作为 Velero 的云端存储,用于存储备份文件

安装流程官方文档:Install and Deploy MinIO — MinIO Object Storage for Container

MinIO 是一款高性能分布式对象存储服务器,专为大型私有云基础设施而设计。MinIO 支持在裸金属硬件上部署,也可以选择将过程管理的容器化

安装 MinIO

由于是单节点,选择使用 Docker 安装更加方便

$ mkdir -p /data/minio

$ docker run -d \
   --restart=always \
   -p 9000:9000 \
   -p 9090:9090 \
   --user $(id -u):$(id -g) \
   --name minio \
   -e "MINIO_ROOT_USER=admin" \
   -e "MINIO_ROOT_PASSWORD=minio520123" \
   -v /data/minio:/data \
   minio/minio server /data --console-address ":9090"
   

相关信息

  • /data/minio:存储 minio 的数据,挂载到容器中
  • 端口 9000:API 端口
  • 端口 9090:控制台(WEB)端口,可通过浏览器访问
  • MINIO_ROOT_USER:设置控制台的 root 用户,默认为 minioadmin
  • MINIO_ROOT_PASSWORD:设置控制台的 root 用户的密码,默认为 minioadmin

创建 bucket 及验证

登录控制台
在这里插入图片描述

登录成功
在这里插入图片描述

创建 bucket
在这里插入图片描述


安装 Velero

根据使用的对象存储不同, Velero 有不同的安装方式,详情请参阅:Velero Docs - Providers

此处使用 MinIO 作为对象存储,文档参考:Velero Docs - Quick start evaluation install with Minio

前置条件

  • Kubernetes 版本 1.7 以上。注:文件系统的备份需要 Kubernetes 版本 1.10 以上
  • Kubernetes 集群 DNS 插件已安装并正常工作
  • 安装了 kubectl 命令行,并可以正常连接到集群
  • MinIO 需要有足够的磁盘空间处理备份,如果 MinIO 空间小于 1G,则无法正常工作

安装客户端

版本发布 github 地址:Releases · vmware-tanzu/velero (github.com)

# 下载
$ wget https://github.com/vmware-tanzu/velero/releases/download/v1.10.1/velero-v1.10.1-linux-amd64.tar.gz

# 解压
$ tar -zxvf velero-v1.10.1-linux-amd64.tar.gz 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值