K8S备份、恢复、迁移神器 Velero
前言
Kubernetes 集群备份一直是我们的痛点。虽然可以通过Etcd v3备份与恢复来实现K8S集群备份,但是这种备份很难恢复单个 Namespace
。
今天推荐 Velero
工具,它提供以下功能:
灾备场景
:提供备份恢复k8s集群的能力迁移场景
:提供拷贝集群资源到其他集群的能力(复制同步开发,测试,生产环境的集群配置,简化环境配置)
Velero 项目地址:https://github.com/vmware-tanzu/velero
Velero 阿里云插件地址:https://github.com/AliyunContainerService/velero-plugin
Velero 架构
Velero 分为两部分:
服务端
:部署在目标 k8s 集群中客户端
:运行在本地环境中,需要已配置好kubectl
及集群kubeconfig
的机器上
环境准备
K8S 集群版本为 v1.18.2
阿里云 Velero 自定义 RAM策略
{"Version": "1","Statement": [{"Action": ["ecs:DescribeSnapshots","ecs:CreateSnapshot","ecs:DeleteSnapshot","ecs:DescribeDisks","ecs:CreateDisk","ecs:Addtags","oss:PutObject","oss:GetObject","oss:DeleteObject","oss:GetBucket","oss:ListObjects"],"Resource": ["*"],"Effect": "Allow"}]
}
创建阿里云
OSS
(对象存储)Bucket
创建
OSS Bucket
请访问 https://www.aliyun.com/product/oss?spm=a2c6h.12873639.0.0.5f49340drYAEk0
创建阿里云
RAM用户
,并自定义策略,把自定义策略加入到新创建的RAM用户
中创建自定义策略(策略在上方),请访问链接 https://ram.console.aliyun.com/policies
创建
RAM用户
并把AK信息
复制出来为后面使用做准备,请参考链接 https://www.alibabacloud.com/help/zh/doc-detail/93720.htm
下载官方 velero 客户端 ( https://github.com/vmware-tanzu/velero/releases )
部署 velero 插件服务端
项目地址 https://github.com/AliyunContainerService/velero-plugin
下载 velero 阿里云插件服务端
# 拉取 velero 阿里云插件服务端
$ git clone https://github.com/AliyunContainerService/velero-plugin.git# 进入 velero-plugin 目录
$ cd velero-plugin
设置阿里云AK信息
把上面创建的 RAM用户
AK 信息填写到 credentials-velero
文件中
$ vim install/credentials-veleroALIBABA_CLOUD_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID>
ALIBABA_CLOUD_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>
设置备份 OSS Bucket 与 可用区 并部署 velero
1、设置备份 OSS Bucket 和 可用区 环境变量
# OSS Bucket 名称
$ BUCKET=<YOUR_BUCKET># OSS 所在可用区
$ REGION=<YOUR_REGION>
2、创建 velero 命名空间 和 阿里云 secret
# 创建 velero 命名空间
$ kubectl create namespace velero# 创建阿里云 secret
$ kubectl create secret generic cloud-credentials --namespace velero --from-file cloud=install/credentials-velero
3、部署 velero CRD 和 替换 OSS Bucket 与 OSS 所在可用区
# 部署 velero CRD
$ kubectl apply -f install/00-crds.yaml# 替换 OSS Bucket 与 OSS 所在可用区
$ sed -i "s#<BUCKET>#$BUCKET#" install/01-velero.yaml
$ sed -i "s#<REGION>#$REGION#" install/01-velero.yaml
注意,本文把 velero 生成的备份都存放在 OSS velero-k8s-backu
Bucket huawei-k8s
目录中,具体如下配置:
# 下面是本文的修改
$ git diff install/01-velero.yaml@@ -31,10 +31,10 @@ metadata:namespace: velerospec:config:
- region: <REGION>
+ region: cn-beijingobjectStorage:
- bucket: <BUCKET>
- prefix: ""
+ bucket: velero-k8s-backup
+ prefix: "huawei-k8s"provider: alibabacloud---
@@ -47,11 +47,11 @@ metadata:namespace: velerospec:config:
- region: <REGION>
+ region: cn-beijingprovider: alibabacloud---
-apiVersion: extensions/v1beta1
+apiVersion: apps/v1kind: Deploymentmetadata:name: velero
4、部署 velero
# 部署 velero
$ kubectl apply -f install/01-velero.yaml# 查看 velero
$ kubectl get pods -n veleroNAME READY STATUS RESTARTS AGE
velero-6d4c7d4c9b-5zwll 1/1 Running 0 3h5m
备份与恢复演示
1、部署一个测试 nginx 服务
$ kubectl apply -f examples/base.yaml
2、使用 velero 创建备份
# 备份 nginx-example 整个命名空间,当前命名空间只有一个nginx服务
$ velero backup create nginx-backup --include-namespaces nginx-example --waitBackup request "nginx-backup" submitted successfully.
Waiting for backup to complete. You may safely press ctrl-c to stop waiting - your backup will continue in the background.
.
Backup completed with status: Completed. You may check for more information using the commands `velero backup describe nginx-backup` and `velero backup logs nginx-backup`.
下面是通过阿里云 OSS 控制台查看,nginx-backup 已成功创建
3、删除 nginx 服务
$ kubectl delete -f examples/base.yamldeployment.apps "nginx-deployment" deleted
service "my-nginx" deleted
4、恢复 nginx 服务
# 使用 velero 恢复 nginx 服务
$ velero restore create --from-backup nginx-backup --waitRestore request "nginx-backup-20200623174649" submitted successfully.
Waiting for restore to complete. You may safely press ctrl-c to stop waiting - your restore will continue in the background.Restore completed with status: Completed. You may check for more information using the commands `velero restore describe nginx-backup-20200623174649` and `velero restore logs nginx-backup-20200623174649`.# 查看 nginx 服务 是否成功恢复
$ kubectl get pods -n nginx-exampleNAME READY STATUS RESTARTS AGE
nginx-deployment-5bf87f5f59-gs2cs 1/1 Running 0 27s
nginx-deployment-5bf87f5f59-vts6d 1/1 Running 0 27s
注意:
velero restore
恢复不会覆盖已有的资源
,只恢复当前集群中不存在的资源
。已有的资源不会回滚到之前的版本,如需要回滚,需在restore之前提前删除现有的资源。
带有持久卷备份与恢复
持久卷备份
$ velero backup create nginx-backup-volume --snapshot-volumes --include-namespaces nginx-example
注意:该备份会在集群所在region给云盘创建快照(当前还不支持NAS和OSS存储),快照恢复云盘只能在同region完成。
持久卷恢复
$ velero restore create --from-backup nginx-backup-volume --restore-volumes
velero 更多命令使用
查看备份位置
$ velero get backup-locationsNAME PROVIDER BUCKET/PREFIX ACCESS MODE
default alibabacloud velero-k8s-backup/huawei-k8s ReadWrite
查看已有的备份
$ velero get backup
查看已有的恢复
$ velero get restores
查看 velero 插件
$ velero get plugins
删除 velero 备份
$ velero backup delete nginx-backup
创建集群所有namespaces备份,但排除 velero,metallb-system 命名空间
$ velero backup create all-ns-backup --snapshot-volumes=false --exclude-namespaces velero,metallb-system
恢复集群所有namespaces备份(对已经存在的服务不会覆盖)
$ velero restore create --from-backup all-ns-backup
恢复集群 default,nginx-example namespaces备份
$ velero restore create --from-backup all-ns-backup --include-namespaces default,nginx-example
高级备份功能
周期性定时备份
# 每日3点进行备份
$ velero schedule create <SCHEDULE NAME> --schedule "0 3 * * *"# 每日3点进行备份,备份保留48小时,默认保留30天
$ velero schedule create <SCHEDULE NAME> --schedule "0 3 * * *" --ttl 48# 每6小时进行一次备份
$ velero create schedule <SCHEDULE NAME> --schedule="@every 6h"# 每日对 web namespace 进行一次备份
$ velero create schedule <SCHEDULE NAME> --schedule="@every 24h" --include-namespaces web
添加指定的标签备份时被排除
# 添加标签
$ kubectl label -n <ITEM_NAMESPACE> <RESOURCE>/<NAME> velero.io/exclude-from-backup=true# 为 default namespace 添加标签
$ kubectl label -n default namespace/default velero.io/exclude-from-backup=true
迁移场景
和集群恢复场景类似,velero 可以帮助我们把一个k8s集群的resource导出并导入到另外一个集群,只要将每个Velero实例指向同一个云对象存储位置,Velero就可以帮助我们将资源从一个集群移植到另一个集群,请注意,Velero不支持跨云提供商迁移持久卷。当前使用velero迁移集群功能最完善的场景是在同一个云厂商的同一个region,可以恢复集群的应用和数据卷。
在集群1上做一个备份:
$ velero backup create <BACKUP-NAME> --snapshot-volumes
在集群2上做一个恢复:
$ velero restore create --from-backup <BACKUP-NAME> --restore-volumes
velero 清理
$ kubectl delete namespace/velero clusterrolebinding/velero
$ kubectl delete crds -l component=velero
总结
Velero 作为一个免费的开源组件,其能力基本可以满足容器服务的灾备和迁移的场景,推荐用户将velero日常备份作为运维的一部分,未雨绸缪,防患未然。
参考链接
https://developer.aliyun.com/article/705007
https://github.com/AliyunContainerService/velero-plugin
热门文章推荐
Kubernetes故障排查指南-分析容器退出状态码
Kubeconfig文件自动合并-实现K8S多集群切换
比Kubernetes Dashboard更好用的K8S管理工具 Kuboard
Grafana 采集阿里云SLB监控信息
Kubernetes 中利用 LXCFS 控制容器资源可见性
Kubernetes 私有集群 LoadBalancer 解决方案
最后
欢迎您加我微信【ypxiaozhan01】,拉您进技术群,一起交流学习...
欢迎您关注【YP小站】,学习互联网最流行的技术,做个专业的技术人...
【文章让您有收获,点个在看支持我吧】
K8S备份、恢复、迁移神器 Velero相关推荐
- 备份和迁移Kubernetes应用程序利器-velero
女主宣言 你是否在运维kubernetes集群中有过这样的经历: ⼀个新⼈把某个namespace点击删除,导致这下⾯所有的资源全部丢失,只能⼀步⼀步的重新部署.新搭建集群,为了保证环境尽可能⼀致,只 ...
- Velero备份恢复
Velero k8s集群的数据备份方式有两种,第一种是备份etcd数据库,这种备份方式比较简单,但是恢复数据时只能全部恢复.试想一下,需求是恢复误删除的一个namespace,恢复时却要将整个etcd ...
- TiDB数据库备份恢复与数据迁移
TiDB数据库备份恢复与数据迁移 数据迁移 使用 mydumper/loader 全量导入数据 mydumper/loader 全量导入数据最佳实践 某次导入示例,以及相关的配置 从 MySQL 导出 ...
- 版本管理工具Subversion Edge的备份恢复与数据迁移方案
软件开发生命周期中会使用到多种工具,这些工具的更迭与迁移,备份与恢复都构成了软件开发生命周期的重要部分.这篇文章以当下最新版本的Subversion Edge为例介绍一下其备份恢复与数据迁移方案,因相 ...
- docker下Gitlab如何进行备份恢复与迁移?
首先进入到gitlab容器 docker exec -it gitlab /bin/bash 1.Gitlab 创建备份 1.1 创建备份文件 首先我们得把老服务器上的Gitlab整体备份,使用Git ...
- Oracle 运维篇+RAC集群转单实例/RMAN异机恢复/RMAN迁移/RMAN备份恢复操作概要
说明:本文为Oracle RAC集群转单实例/RMAN异机恢复/RMAN迁移/RMAN备份恢复操作概要方便用户查阅 温馨提示:如果您发现本文哪里写的有问题或者有更好的写法请留言或私信我进行修改优化 说 ...
- 用RMAN 备份异机恢复 迁移数据
先假设一种情况,假设有一个数据库,数据量是2T. 如果要对这个数据库进行迁移,在不考虑磁盘空间的前提下,要求在最短的时间内完成切换操作. 在不考虑磁盘空间前提下,备份时间,网络传输时间,恢复时间. 这 ...
- “免费”容器存储及备份恢复方案
云原生时代为什么还需要本地存储? 云原生时代,对于有存储应用的容器化上云,一般的解决思路是"计算存储分离",计算层通过容器技术实现弹性伸缩,而相应的存储层也需要配合进行" ...
- Kubernetes 上免费的容器存储及容灾备份恢复方案
公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 云原生时代为什么还需要本地存储? 云原生时代,对于有存储应用的容器化上云,一般的解决思路是"计算存储分离 ...
最新文章
- RAC分解步骤之一,在oracle linux 4u4上安装oracle 10.2.0.1.0操作日志
- php7安装kafka扩展(已经测试)
- 使用字符串解析的方式完成计算器的设计思路
- CSS3+JS切割轮播图
- 在给定总和K的二叉树中找到级别
- mac下终端命令行下添加mysql命令
- 【23】蔡高厅老师 - 高等数学下阅读笔记 - 重积分 - 直角坐标系下(下)23 - 27
- Open vswitch 之Qos rate-limiting 原理
- 微软 Build 2020 为 WSL 带来的新消息一览:WSL2 即将到来,对 GPU 和 Linux GUI 的支持也不远了
- excel首行空不能导入access_终于解决SQL Server 2008 64位系统无法导入Access/Excel的问题 2012/08/01...
- 如何判断各个IE浏览器版本
- Linux:使用libgen.h:basename,dirname
- windows下创建多个回收站
- 2022程序员必备网站
- Linux小程序——彩色进度条
- 曲线上点的曲率半径计算
- 深度 | 巨头都在追逐的眼球追踪技术,究竟能带来什么?
- C语言结构标记的作用,C语言基础知识之词法符号
- Java的在哪里找labor_Java流程控制
- 如何计算网站或应用程序的带宽需求
热门文章
- 【笔记】excel做累计到天的销售公式匹配原理
- 学习傅里叶变换的心得
- ArcGIS如何拼接两张栅格图像
- 【我的第一个目标检测课题】1、课题介绍及环境配置(Windows+Keras+GPU)
- 视觉算法工程师面试总结[2022春季 达摩院 美团 字节 华为]
- 51单片机学习之DS18B20温度传感器
- [iOS]NSArray:数组(NSArray)使用注意
- Perl中的闭包(closure)
- VS LINK : fatal error LNK1104: 无法打开文件.exe
- html分享标题描述图片尺寸,微信分享网页时自定义标题、描述和图片