Velero(以前称为 Heptio Ark)是一个开源工具,可以安全地备份和还原,执行灾难恢复以及迁移 Kubernetes 集群资源和持久卷,可以在 TKE 集群或自建 Kubenetes 集群中部署 Velero 用于:

  • 备份集群资源并在丢失的情况下进行还原。
  • 将集群资源迁移到其他集群。
  • 将生产集群资源复制到开发和测试集群。

Velero 工作原理图如下图所示,当用户执行备份命令时,调用自定义资源 API 创建备份对象(1),BackupController 控制器 watch 到生成的备份对象时(2)执行备份操作(3),备份完成后将备份的集群资源和存储卷快照上传到 Velero 的后端存储(4和5);类似的,当执行还原操作时,Velero 会将指定备份对象的数据从后端存储同步到 Kubernetes 集群完成还原工作。

下面介绍使用腾讯云对象存储 COS 作为 Velero 后端存储实现集群备份和还原的操作步骤。

一、前提条件

  • 已注册腾讯云账户
  • 已开通 COS 服务;
  • 已创建 Kubernetes 集群,集群版本 v1.10 或更高版本,集群可正常使用 DNS 和 互联网服务。若需要创建 TKE 集群,请参考创建集群

二、配置存储

1、创建 COS 存储桶

在 COS 控制台为 Velero 创建一个对象存储桶来存储备份 ,创建存储桶请参阅 COS 创建存储桶 使用说明 。

通过 COS 控制台为存储桶设置访问权限。对象存储 COS 支持设置两种权限类型:

1、公共权限设置:为了安全起见,推荐存储桶权限类别为私有读写,关于公共权限的说明,请参见存储桶概述中的权限类别)。

2、用户权限设置:主账号默认拥有存储桶所有权限(即完全控制),另外 COS 支持添加子账号有数据读取、数据写入、权限读取、权限写入,甚至完全控制的最高权限。

由于需要对存储桶进行读写操作,为示例子账号授予数据读取、数据写入权限,如下图所示:

2、获取存储桶访问凭证

Velero 使用与 AWS S3 兼容的 API 访问 COS ,需要使用一对访问密钥 ID 和密钥创建的签名进行身份验证,在 S3 API 参数中,access_key_id 字段为访问密钥 ID , secret_access_key 字段为密钥。

在腾讯云访问管理控制台新建和获取 COS 授权的示例子账号的腾讯云密钥 SecretId与 SecretKey ,如下图。其中 SecretId 值对应 access_key_id 字段,SecretKey 值对应 secret_access_key 字段。

根据上述对应关系在本地目录中创建 Velero 所需的凭证配置文件 credentials-velero :

三、安装 Velero

下载最新官方发行的 Velero 压缩包到集群环境中,本示例以撰写此文档时最新版本 v1.5.2 为例。

提取压缩包,压缩包中包含 Velero 命令行执行文件和一些示例文件。

将 velero 可执行文件从解压后的目录迁移到系统环境变量目录下直接使用,这里移至 /usr/bin 目录。

执行下面 Velero 安装命令,创建 Velero 和 restic 工作负载以及其他必要的资源对象。

参数说明:

--provider:声明使用的 Velero 插件类型。

--plugins:使用 S3 API 兼容插件 “velero-plugin-for-aws ”。

--bucket:在腾讯云 COS 创建的存储桶名。

--secret-file:访问 COS 的访问凭证文件,见上面创建的 “credentials-velero”凭证文件。

--use-restic:使用开源免费备份工具 restic 备份和还原持久卷数据。Velero 支持使用免费开源备份工具 restic 备份和还原 Kubernetes 存储卷数据 (不支持 hostPath 卷,详情请参阅 restic限制),这种集成是 Velero 备份功能的补充,建议开启。

--default-volumes-to-restic:使用 restic 来备份所有Pod卷,前提是需要开启 --use-restic 参数。

--backup-location-config:备份存储桶访问相关配置。

--region:兼容 S3 API 的 COS 存储桶地区,例如创建地区是广州的话,region 参数值为“ap-guangzhou”。

--s3ForcePathStyle:使用 S3 文件路径格式。

--s3Url:COS 兼容的 S3 API 访问地址,请注意不是创建的 COS 存储桶的公网访问域名,而是要使用格式为 https://cos..myqcloud.com 的 URL,例如地区是广州的话,参数值为 “https://cos.ap-guangzhou.myqcloud.com”。

另外还有其他安装参数可以使用 velero install --help 查看,比如不想备份存储卷数据的话可以设置 --use-volume-snapshots=false 来关闭存储卷数据快照备份。

执行上面的安装命令后,安装过程如下图所示:

安装命令执行完成后,等待 Velero 和 restic 工作负载就绪后,查看配置的存储位置是否可用。

执行 velero backup-location get 命令查看存储位置状态,显示“Avaliable”,则说明访问 COS 正常,如下图所示:

至此,Velero 安装完成,如想了解 Velero 更多安装介绍请参阅 Velero ⽂档

四、Velero 备份还原测试

在集群中使用 helm 工具创建一个具有持久卷的 minio 测试服务,minio 安装⽅式请参阅 minio 安装,在此示例中,已经为 minio 服务绑定了负载均衡器,可以在浏览器中使用公网地址访问管理页面。

登录 minio Web 管理页面,上传一些测试的图片数据, 如下图:

接下来使用 Velero 备份,可以直接备份集群中的所有对象,也可以按类型,名称空间和/或标签过滤对象,本示例使用下面命令仅备份 default 命名空间下所有资源:

使用 velero backup get 命令查看备份任务是否完成,当备份任务状态是“Completed”时,错误数为 0 ,说明备份任务完成且没发生任何错误,备份过程如下图:

此时我们删掉 minio 所有资源,包括它的 PVC 持久卷, 如下图:

删掉 minio 资源后,我们就可以测试使用之前的备份来还原被删除的 minio 资源了,先临时将备份存储位置更新为只读模式(这可以防止在还原过程中在备份存储位置中创建或删除备份对象):

修改 Velero 的存储位置的访问权限为 “ReadOnly”,如下图所示:

现在使用刚才 Velero 创建的备份 "default-backup" 来创建还原任务:

同样可以使用 velero restore get 来查看还原任务的状态,若还原状态是“Completed”,错误数为 0,则说明还原任务完成,还原过程如下图:

还原完成后,可以看到之前被删除的 minio 相关资源已经还原成功了,如下图:

在浏览器上登录 minio 的管理页面,可以看到之前上传的图片数据还在,说明持久卷的数据成功还原,如下图:

还原完成后,不要忘记把备份存储位置恢复为读写模式,以便下次备份任务成功使用:

五、Velero 卸载

若想在集群中卸载 velero,使用下面命令即可完成卸载。

六、总结

在本文中,我们简单介绍了 Kubernetes 集群资源备份工具 Velero,展示了如何配置腾讯云对象存储 COS 来作为 Velero 的后端存储,并成功实践了 minio 服务资源和数据的备份和还原操作 。

七、参考

Velero 官网:https://velero.io/

Restic 工具介绍:https://github.com/restic/restic

Minio 安装:https://github.com/minio/charts

restic 限制:https://velero.io/docs/v1.5/restic/#limitations

使用腾讯云对象存储 COS 作为 Velero 后端存储,实现集群资源备份和还原的更多相关文章

  1. 使用 Velero 跨云平台迁移集群资源到 TKE

    概述 Velero 是一个非常强大的开源工具,可以安全地备份和还原,执行灾难恢复以及迁移Kubernetes群集资源和持久卷,可以在 TKE 平台上使用 Velero 备份.还原和迁移集群资源,关于如 ...

  2. Docsify+腾讯云对象存储 COS,一键搭建云上静态博客

    最近一直在想如何利用 COS 简化静态博客的搭建过程.搜了很多的静态博客搭建过程,发现大部分的静态博客都要通过编译才能生成静态页面.功夫不负有心人,终于让我找到了一个超简洁博客的搭建方法. 效果预览 ...

  3. 腾讯云对象存储 COS搭建个人网站

    腾讯云对象存储 COS搭建个人网站,简单易操作,方便快捷.   只需要将你的网站资源上传即可,然后设置上你的自定义 CDN 加速域名,一个个人网站就上线啦!当然,你也可以不用设置自定义 CDN 加速域 ...

  4. 微信小程序基于腾讯云对象存储的图片上传

    在使用腾讯云对象存储之前,公司一直使用的是传统的FTP的上传模式,而随着用户量的不断增加,FTP所暴露出来的问题也越来越多,1.传输效率低,上传速度慢.2.时常有上传其他文件来攻击服务器,安全上得不到 ...

  5. php 腾讯云 对象存储V5版本 获取返回的上传文件的链接方法

    腾讯云 对象存储V5版本 文档地址:https://github.com/tencentyun/cos-php-sdk-v5 调用简单文件上传方法: 返回数据如下 Array ( [data:prot ...

  6. Laravel项目使用腾讯云对象存储上传图片(cos-php-sdk-v5版本)

    为了加快网站访问速度.降低网站负载,现在越来越多的网站选择把图片等静态文件放在云上,这里介绍一下腾讯云对象存储在Laravel项目中的使用 1.申请腾讯云对象存储.创建Bucket.获取APPID等参 ...

  7. 浅谈云原生基础入坑与docker 搭建redis-cluster集群

    浅谈云原生基础入坑与docker 搭建redis-cluster集群 开篇来点自己的小感触:自从走上后端开发这条无法回头的互卷道路以后,在视野内可见新的技术在迭代,更新的技术在不断发行.就拿最近的Op ...

  8. 用更云原生的方式做诊断|大规模 K8s 集群诊断利器深度解析

    背景 通常而言,集群的稳定性决定了一个平台的服务质量以及对外口碑,当一个平台管理了相当规模数量的 Kubernetes 集群之后,在稳定性这件事上也许会"稍显被动". 我们可能经常 ...

  9. 腾讯云对象存储COS新品发布——智能分层存储,自动优化您的存储成本

    近日,腾讯云正式发布对象存储新品--智能分层存储,能够根据用户数据的访问模式,自动地转换数据的冷热层级,为用户提供与标准存储一致的低延迟和高吞吐的产品体验,同时具有更低的存储成本. 熟悉数据存储的用户 ...

  10. 腾讯云--对象存储cos绑定自定义域名

    1.登录腾讯云控制台,找到对象存储一栏 2.选择一个你想绑定域名的存储桶 3.进入你选择的存储桶,点击域名管理 4.选择自定义源站域名.在域名处填写你要设置的自定义域名,在源站类型处选择静态网站源站, ...

随机推荐

  1. 使用duxapp开发 React Native App 事半功倍

    Taro的React Native端开发提供了两种开发方式,一种是将壳和代码分离,一种是将壳和代码合并在一起开发 壳是用来打包调试版或者发版安装包使用的 代码是运行在壳上的js代码 Taro壳子的代码 ...

  2. 基于腾讯云短信接口和nodejs服务器实现手机号验证码

    知识储备:js基础.nodejs基础.ajax基础: 1. 手机验证码原理 表单提交,把手机号码传送到后端:后端拿到手机号码后根据相关算法随机形成一个验证码,并将其保存在数据库:用户拿到验证码后将验证 ...

  3. 前端 vue.config.js 处理跨域问题 proxy 代理

    问: 业务中的跨域问题是如何解决的? 这个的话我们公司⼤概分了俩种环境,⼀种是开发的时候,⼀种是上⽣产的时候,开发的时候因为要对 接的后端可能会⽐较多,他们配置不太⽅便,这个时候采取的是⽐较⽅便的前端 ...

  4. 云原生周刊:K8s 在 v1.27 中移除的特性和主要变更

    文章推荐 K8s 在 v1.27 中移除的特性和主要变更 随着 Kubernetes 发展和成熟,为了此项目的整体健康,某些特性可能会被弃用.移除或替换为优化过的特性.基于目前在 v1.27 发布流程 ...

  5. RAC环境中某数据文件(非system表空间)创建在本地,不停机迁移到ASM磁盘中

    Datafiles are mistakenly built into the local file system for processing in the RAC environment The ...

  6. DOS特殊字符的转义方法

  7. Windows 非服务器版本永久关闭命令行“快速编辑模式”

    使用管理员权限运行cmd.exe 运行如下命令: reg add HKEY_CURRENT_USER\Console /v QuickEdit /t REG_DWORD /d 00000000 /f

  8. 初识GO语言--高级数据类型

  9. 一文彻底弄懂JUC工具包的CountDownLatch的设计理念与底层原理

    CountDownLatch 是 Java 并发包(java.util.concurrent)中的一个同步辅助类,它允许一个或多个线程等待一组操作完成. 一.设计理念 CountDownLatch 是 ...

  10. 如何在原生鸿蒙APP中使用RN的bundle包

    一.创作背景 上一篇博客中,我给大家分享了如何创建一个RN的项目,并且解决了其中的问题点,成功打出了Bundle包.接下来就是我给大家分享一下,如何在原生鸿蒙项目中使用那个Bundle包,这一篇分享完 ...