tnblog
首页
视频
资源
登录

Kubernetes Velero 备份的运用

8640人阅读 2021/3/6 14:20 总访问:3467593 评论:0 收藏:0 手机
分类: 云产品

Velero 的运用

Velero简介


Velero是一个开源工具,可以安全地备份,恢复和迁移Kubernetes集群和持久卷。它既可以在本地运行,也可以在公共云中运行。Velero由在Kubernetes集群中作为部署运行的服务器进程和命令行界面(CLI)组成,DevOps团队和平台操作员可使用该命令行界面配置计划的备份,触发临时备份,执行还原等。

是什么让Velero脱颖而出?


与直接访问Kubernetes etcd数据库以执行备份和还原的其他工具不同,Velero使用Kubernetes API捕获群集资源的状态并在必要时对其进行还原。这种由API驱动的方法具有许多关键优势:

— 备份可以捕获群集资源的子集,并按名称空间,资源类型和/或标签选择器进行过滤,从而为备份和还原的内容提供了高度的灵活性。
— 托管Kubernetes产品的用户通常无法访问底层的etcd数据库,因此无法对其进行直接备份/还原。
— 通过聚合的API服务器公开的资源可以轻松备份和还原,即使它们存储在单独的etcd数据库中也是如此。

此外,借助Velero,您可以使用存储平台的本机快照功能或称为restic的集成文件级备份工具来备份和还原应用程序的持久数据及其配置 。

重要的三大功能


灾难恢复 在基础架构丢失,数据损坏和/或服务中断的情况下,减少了恢复时间。
数据迁移 通过轻松地将Kubernetes资源从一个集群迁移到另一个集群来实现集群可移植性。
数据保护 提供关键数据保护功能,例如计划的备份,保留计划以及自定义操作的备份前或备份后挂钩。

veleo备份原理


本地 Velero 客户端发送备份指令。

1. Kubernetes 集群内就会创建一个 Backup 对象。

2. BackupController 监测 Backup 对象并开始备份过程。

3. BackupController 会向 API Server 查询相关数据。

4. BackupController 将查询到的数据备份到远端的对象存储。

Velero 在 Kubernetes 集群中创建了很多 CRD 以及相关的控制器,进行备份恢复等操作实质上是对相关 CRD 的操作。

下载Velero应用

下载当前最新版本


到该地址查看最新版本 https://github.com/vmware-tanzu/velero/releases ,当前版本最新为(1.5.3)
我们通过如下命令进行安装

  1. wget https://github.com/vmware-tanzu/velero/releases/download/v1.5.3/velero-v1.5.3-linux-amd64.tar.gz
  2. # 解压
  3. tar -C /usr/local/bin -xzvf velero-v1.5.3-linux-amd64.tar.gz
  4. # 添加到环境变量中去
  5. export PATH=$PATH:/usr/local/bin/velero-v1.5.3-linux-amd64/
  6. # 测试是否安装成功了
  7. velero -h

安装miniio

简介


MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。

创建minio凭证(credentials-velero文件)

  1. vim credentials-velero
  1. [default]
  2. aws_access_key_id = minio
  3. aws_secret_access_key = minio123

启动服务器和本地存储服务

  1. kubectl create -f /usr/local/bin/velero-v1.5.3-linux-amd64/examples/minio/00-minio-deployment.yaml

开放端口

  1. kubectl expose deployment minio -n velero --type=NodePort --name=minio-nodeport --target-port=9000

然后在本地通过本地代理访问minio服务,我这里访问的链接是:http://127.0.0.1:8001/api/v1/namespaces/velero/services/minio/proxy
不清楚的可以参考我这篇文章:https://www.tnblog.net/hb/article/details/4681
这里的账号与密码默认是:minio/minio123

奇怪的是我们好像怎么样都登录不上去


这个时候我们可以通过NodePort的服务进行外网访问,那么我这里是外网IP:32422

创建velero桶


随后我们在右下角创建Velero的Bucket

安装velero (使用本地集群minio作为备份存储)

注意在s3Url这里填写自己的minio地址(NodePort地址)

  1. velero install \
  2. --provider aws \
  3. --plugins velero/velero-plugin-for-aws:v1.0.0 \
  4. --bucket velero \
  5. --secret-file ./credentials-velero \
  6. --use-volume-snapshots=false \
  7. --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://192.168.255.97:9000

本示例假定它在本地群集中运行,而没有能够提供快照的卷提供程序,因此不会VolumeSnapshotLocation创建(--use-volume-snapshots=false)。
此外,您可以指定--use-restic启用Restic支持,并--wait等待部署准备就绪。

小案例

部署示例nginx应用程序:

  1. kubectl apply -f /usr/local/bin/velero-v1.5.3-linux-amd64/examples/nginx-app/base.yaml

检查是否成功创建了Velero和nginx部署:

  1. kubectl get deployments -l component=velero --namespace=velero
  2. kubectl get deployments --namespace=nginx-example -o wide

备份

namespaces=nginx-example命名空间和app=nginx标签选择器匹配的任何对象创建备份:

  1. velero backup create nginx-backup --selector app=nginx --include-namespaces=nginx-example

(可选)使用namespaces=nginx-example命名空间和app=nginx标签选择器基于cron表达式创建定期计划的备份:

  1. velero schedule create nginx-daily --schedule="0 1 * * *" --selector app=nginx --include-namespaces=nginx-example

然后我们通过下面的命令查看备份情况,也可以从UI上进行查看备份信息

  1. velero backup describe nginx-backup

模拟灾难

  1. kubectl delete namespace nginx-example

恢复

执行

  1. velero restore create --from-backup nginx-backup

卸载

要从Kubernetes集群中完全卸载Velero,minio,请执行以下操作:

  1. kubectl delete namespace/velero clusterrolebinding/velero
  2. kubectl delete crds -l component=velero
  3. kubectl delete -f examples/nginx-app/base.yaml

资源查看

  1. velero get backup #备份查看
  2. velero get schedule #查看定时备份
  3. velero get restore #查看已有的恢复
  4. velero get plugins #查看插件


更多请参考:https://velero.io/docs/v1.5/index.html


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

net core 使用 EF Code First

下面这些内容很老了看这篇:https://www.tnblog.net/aojiancc2/article/details/5365 项目使用多层,把数据库访问...

cAPS.net 保存base64位格式的图片

publicvoidUpload() { //取出图片对应的base64位字符 stringimgBase=Request["imgBase"]; //c#里边的base6...

Quartz.net实例动态改变周期调度。misfire、Cron

Quartz:Java编写的开源的任务调度作业框架 类似Timer之类定时执行的功能,但是更强大Quartz.NET:是把Quartz转成C# NuGet...

.net Windows服务发布、安装、卸载、监听脚本。服务调试

一、脚本 为方便不用每次都去写安装卸载的脚本1.安装脚本@echooff @echo开始安装【服务】 %SystemRoot%\Microsoft.NET\Fr...

c、VB.net中全角半角转换方法

///<summary> ///转全角的函数(SBCcase) ///</summary> ///<paramname="input">任意字符串...

.net mvc分部页,.net core分部页

.net分部页的三种方式第一种:@Html.Partial("_分部页")第二种:@{ Html.RenderPartial("分部页");}...

C.net 配合小程序实现经过第三方服务器中转文件

某些时候,微信小程序前段上传文件的时候需要经过第三方服务器再将文件上传到客户的服务器;操作如下:1:(小程序内向中端服...

.net实现QQ邮箱发送邮件功能

1、微软已经帮我们封装好了发送邮件的类MailMessage,MailMessage类构造一些邮件信息,然后通过SmtpClient进行邮件发送。Mai...

StackExchange.Redis操作redis(net core支持)

官方git开源地址https://github.com/StackExchange/StackExchange.Redis官方文档在docs里边都是官方的文档通过nuget命令下...

windows 自带的netsh进行端口映射

使用netsh 把本地任意ip的25566端口 映射到192.168.81.234的25565端口netshinterfaceportproxyaddv4tov4listenaddress=0.0....

确保.net程序始终以管理员身份运行

usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Threading.Tasks; ...

ASP.net Timer细节处理

Timer的用法:1:本人称之为计时器,是asp.net官方的一种。用法即是计时所用 2:关于计时有很多中方式,本人学识有限,暂...

.net core 使用session

tip:net core 2.2后可以直接启用session了,不用在自己添加一次session依赖,本身就添加了使用nuget添加引用Microsoft.AspN...

通俗易懂,什么是.net?什么是.net Framework?什么是.net core?

朋友圈@蓝羽 看到一篇文章写的太详细太通俗了,搬过来细细看完,保证你对.NET有个新的认识理解原文地址:https://www.cnblo...

asp.net core2.0 依赖注入 AddTransient与AddScoped的区别

asp.net core主要提供了三种依赖注入的方式其中AddTransient与AddSingleton比较好区别AddTransient瞬时模式:每次都获取一...
这一世以无限游戏为使命!
排名
2
文章
634
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术