当前位置: 首页 > news >正文

Velero 简介和部署

包括k8s的资源,以及卷里面的数据,都可以进行备份和迁移。

这个备份和etcd的备份还是有区别的, 可以备份k8s资源以及pv里面的数据,所以功能还是很强大的。

可以利用备份还原的功能实现集群数据的迁移。比如生产有一套完整的k8s集群,如果想完整的移植到测试环境,这个时候就可以使用迁移功能将一套k8s资源完整的迁移到另外一套k8s里面去。

其实下面就是围绕着k8s集群备份恢复以及迁移。

velero只能将资源进行备份,比如deploy service,secret这些。etcd只能将所有的资源进行备份,而velero也可以做完全备份,它可以做特定的资源对象分类备份,对名称空间备份,对某个标签备份,对某个类别备份。所以更加精准。

etcd的备份是可以直接操作etcd数据库的,它和k8s的APIserver是不需要连接的,velero是要通过apiserver来进行的。在备份期间是要保证k8s正常工作的,如果apiservre出现问题是无法进行备份的。

所以verlero备份和etcd的备份其实是不太一样的。

因此在实际的过程当中,etcd的备份和verlero的备份是相互补充关系,而不是完全替代关系。etcd该备份备份,verleo该备份还是备份。

verlero还支持周期性的备份,比如每天,几个小时做一次备份,自身自带计划任务功能。

velero 组件组成

在实际生产中,可以使用etcd来做备份,在velero挑一些特定的资源进行备份,包括数据。

要实现完整功能需要三部分

客户端

基于cs结构的,它需要有客户端,这个客户端实际上就是命令行工具,这个命令就叫做verlero,这个需要访问apiserver,这个是需要授权的。

verlero也是通过RBAC机制进行授权访问。所以直接部署在master节点上面,因为master节点上授权都做好了。如果不在master节点上,那么自己在节点上指定kubeconfig资源即可。

服务端

客户端要调用服务器端来完成k8s里面资源获取的,这个服务端表现方式不是以二进制进程的方式去表现,你要在k8s里面以Pod的方式运行起来。

实际平时说的就是控制器理论,在k8s里面部署服务器端,以Pod方式运行,提供备份还原功能。

在k8s里面常见的资源对应的都是有控制器,有controller manager管理,但是verlero是第三方软件,并没有集成在k8s自身的控制器里面,所以需要安装单独的控制器,部署在k8s里面。

插件

和存储,包括一些资源做快照相关的一些第三方的插件来扩展存储功能。比如velero实现远程备份到公有云,私有云,需要调用它的一些存储插件。另外需要将数据做快照,需要借助卷的快照插件。

verlero备份恢复功能  备份工作流程

当运行 velero backup create test-backup 时:

  1. Velero 客户端调用 Kubernetes API 服务器来创建一个 Backup 对象
  2. BackupController 注意到新的 Backup 对象并进行验证
  3. BackupController 开始备份过程。它通过查询 API 服务器的资源来收集要备份的数据
  4. BackupController 会调用对象存储服务-例如 AWS S3 -来上传备份文件

默认情况下,velero backup create 会对任何持久化卷进行磁盘快照:可以通过指定额外的标志来调整快照, 运行 velero backup create --help 来查看可用的标志.

可以通过选项--snapshot-volumes=false 来禁用快照.

只是安装完客户端是无法完成数据备份和还原的,因为还要服务器端,服务器端表现的是控制器。

所以这里会有两个控制器。一个是备份的控制器,一个是恢复的控制器,这两个加起来就是服务器端。

当用户备份的时候要执行这条命令向apiserver发起请求,apiserver收到请求之后会对身份进行认证,要提前配置kubeconfig。

认证完之后连接apiserver,apiserver认证信息通过之后会向backup controller发起请求,说要做备份了,收到备份请求功能之后,这个时候就会向K8s发起通知要做备份,会去从apiserver读取资源信息,然后备份到对应的存储上面。一般放在集群外部的存储上面。

无论是客户端还是服务端controller都得去连接apiserver进行通信获取里面的各种资源。

备份完之后资源是独立存放的,将来需要的时候可以做还原,也是通过客户端工具发起还原申请。当然apiserver也是需要去认证身份的,看是否有没有权限。

那么restore控制器会收到通知,然后拿到存储当中的资源对象和数据再还原到k8s里面去。

在还原中用到的还是控制器,一个是backup控制器,一个是restore控制器。这两个是表现为Pod提前要部署到k8s里面。

下面部署的时候要准备客户端,其次是服务器端,还有一个第三方的存储。存储在真正使用的时候还需要有插件,在安装的时候也会通过客户端工具给安装上。

客户端安装

安装简单,去github网站上就可以下载到对应的软件,使用互联网上面的代理。

 wget https://githubfast.com/vmware-tanzu/velero/releases/download/v1.16.1/velero-v1.16.1-linux-amd64.tar.gz

 加压缩之后可执行的二进制文件才是我们所需要的,放在对应的路径下即可。

[root@master ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin[root@master ~]# cp velero-v1.16.1-linux-amd64/velero  /usr/local/bin

客户端工具要去连接apiserver,所以velero部署在master节点即可。

[root@master ~]# velero completion --help
[root@master ~]# mkdir -p /etc/bash_completion.d
[root@master ~]# velero completion bash > /etc/bash_completion.d/velero

对象存储minio部署

下面使用对象存储minio来实现,将客户端工具和存储结合起来使用,客户端可以将数据备份到存储上面,velero怎么有权限访问minio呢?

不使用公有云环境,使用的是私有的minio。部署的方式有二进制部署,比较繁琐,也可以使用docker来安装,最好和k8s分开部署。

docker run -d \-p 9000:9000 \-p 9090:9090 \--name minio \--restart always \-v /data/minio:/data \-e "MINIO_ROOT_USER=admin" \-e "MINIO_ROOT_PASSWORD=12345678" \registry.cn-beijing.aliyuncs.com/wangxiaochun/minio:RELEASE.2024-11-07T00-52-20Z server /data --console-address ":9090"

现在创建bucket,其实就是一个大的文件夹,这个文件夹后续会使用到,名字叫做velero。

可以看到是有一个桶的标记,buckets叫做桶,verlero相当于一个大的文件夹,里面还没有内容,是空的,object是文件,可以看到里面是没有文件的。

后面是去授权用户去访问,稍后要去授权verlero client来访问minio。这里面要通过accesskey去授权。

虽然也可以使用之前的admin123来授权,但是之前的权限太大,也不安全。所以需要单独建立accesskey来单独给程序使用。用这种方式进行授权比较安全。这样只能通过api的方式进行访问,而不能登入到minio上面,这样的话安全。

这里已经生成好了key secret。

 一定要记录下来,防止关闭界面的时候再也看不到。

VwmHQ87Y23P5IgC7nTYTsOdhG0MpgkeYRciLQhjpIqKCm6cKIA5NTtVHEbjR

上面这些其实就已经完成了minio的工作了。上面其实就是建立了一个大的verlero的文件夹,目前这个文件夹里面没有内容。

这里面未来会放未来velero备份下来的那些k8s数据。

授权文件


现在要授权velero客户端来访问minio,写一个清单授权文件,这个授权文件在所安装的verlero机器上面。这样文件里面就存放了访问minio的授权信息了,也就有权限访问minio了。

[root@master ~]# cat > credentials-velero <<EOF
> [default]
> aws_access_key_id = VwmHQ87Y23P5IgC7nTYT
> aws_secret_access_key = sOdhG0MpgkeYRciLQhjpIqKCm6cKIA5NTtVHEbjR
> EOF[root@master ~]# cat credentials-velero 
[default]
aws_access_key_id = VwmHQ87Y23P5IgC7nTYT
aws_secret_access_key = sOdhG0MpgkeYRciLQhjpIqKCm6cKIA5NTtVHEbjR

实际生产中minio都是集群方式部署的,现在只是单机的形式部署。生产建议使用多节点的,高可用的,分布式的minio集群,而不是单机版。

这样minio和客户端就准备好了

现在需要部署服务器端,backup controller和restore controller。这两个组件要部署在k8s上面,表现方式为pod方式。

这个不是使用传统的k8s清单文件部署,而是使用verlero客户端工具来对接到k8s里面,这样就可以把server部署上。

部署verlero server

部署的方法有两种,一种是verlero的客户端工具,用install子命令就可以将server部署上。这样其实就是给k8s里面安装上verlero server。表现为备份恢复的两个控制器。

第二种就是是helm来部署。

这里还有插件和版本的关系,因为要和第三方存储对接,需要一些插件,需要对接什么存储,就得使用对应的存储插件,存储插件和verlero是有版本兼容性关系的。

比如亚马逊s3的版本要去提前确认一下。

使用minio来存储实际上是兼容亚马逊s3存储的,所以这里的版本兼容性要考虑清楚。

[root@master ~]# velero version
Client:Version: v1.16.1Git commit: 2eb97fa8b187f9ed0aeb49f216565eddf93a0b08
<error getting server version: no matches for kind "ServerStatusRequest" in version "velero.io/v1">

在部署的时候有些镜像是放在github网站上面的,要以容器的方式下载下来部署到k8s里面去,但是直接从docker网站去拉取,目前是已经无法拉取了,国内的防火墙屏蔽了,访问不了。

这里提前将镜像传到了阿里云上,方便拉取。

--provider aws   表示要使用什么样的存储,基于s3兼容的aws亚马逊云的minio。

--plugins  亚马逊存储相关的插件

 --backup-location-config 备份位置,要备份在minio上面,要提前指定备份服务器的地址

端口不是使用控制台界面的端口,是9000端口,固定的。

--bucket velero  bucket桶

--secret-file  访问minio服务器是需要授权的

--use-node-agent   数据备份的

--use-volume-snapshots=false  如果k8s里面资源是存储方式是支持快照的,可以把这个开启,因为没有安装支持快照插件,所以不支持

--wait 直到安装完毕才会退出程序

部署verlero控制器,部署好之后可以看到生成大量自定义资源类型

velero install \--provider aws \--image registry.cn-beijing.aliyuncs.com/wangxiaochun/velero:v1.15.0 \--plugins registry.cn-beijing.aliyuncs.com/wangxiaochun/velero-plugin-for-aws:v1.11.0 \--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://192.168.136.66:9000 \--bucket velero \--secret-file ./credentials-velero \--namespace velero \--use-node-agent \--use-volume-snapshots=false \--wait[root@master ~]# kubectl get crd
NAME                                                  CREATED AT
backuprepositories.velero.io                          2025-08-03T03:51:30Z
backups.velero.io                                     2025-08-03T03:51:30Z
backupstoragelocations.velero.io                      2025-08-03T03:51:30Z
bgpconfigurations.crd.projectcalico.org               2024-08-19T10:30:53Z
bgppeers.crd.projectcalico.org                        2024-08-19T10:30:53Z
blockaffinities.crd.projectcalico.org                 2024-08-19T10:30:53Z
clusterinformations.crd.projectcalico.org             2024-08-19T10:30:53Z
datadownloads.velero.io                               2025-08-03T03:51:31Z
datauploads.velero.io                                 2025-08-03T03:51:31Z
deletebackuprequests.velero.io                        2025-08-03T03:51:30Z
downloadrequests.velero.io                            2025-08-03T03:51:30Z
felixconfigurations.crd.projectcalico.org             2024-08-19T10:30:53Z
globalnetworkpolicies.crd.projectcalico.org           2024-08-19T10:30:53Z
globalnetworksets.crd.projectcalico.org               2024-08-19T10:30:53Z
hostendpoints.crd.projectcalico.org                   2024-08-19T10:30:53Z
ipamblocks.crd.projectcalico.org                      2024-08-19T10:30:54Z
ipamconfigs.crd.projectcalico.org                     2024-08-19T10:30:54Z
ipamhandles.crd.projectcalico.org                     2024-08-19T10:30:54Z
ippools.crd.projectcalico.org                         2024-08-19T10:30:54Z
kubecontrollersconfigurations.crd.projectcalico.org   2024-08-19T10:30:54Z
networkpolicies.crd.projectcalico.org                 2024-08-19T10:30:54Z
networksets.crd.projectcalico.org                     2024-08-19T10:30:54Z
podvolumebackups.velero.io                            2025-08-03T03:51:30Z
podvolumerestores.velero.io                           2025-08-03T03:51:30Z
restores.velero.io                                    2025-08-03T03:51:30Z
schedules.velero.io                                   2025-08-03T03:51:30Z
serverstatusrequests.velero.io                        2025-08-03T03:51:30Z
volumesnapshotlocations.velero.io                     2025-08-03T03:51:30Z[root@master ~]# kubectl api-resources
backuprepositories                             velero.io/v1                           true         BackupRepository
backups                                        velero.io/v1                           true         Backup
backupstoragelocations            bsl          velero.io/v1                           true         BackupStorageLocation
datadownloads                                  velero.io/v2alpha1                     true         DataDownload
datauploads                                    velero.io/v2alpha1                     true         DataUpload
deletebackuprequests                           velero.io/v1                           true         DeleteBackupRequest
downloadrequests                               velero.io/v1                           true         DownloadRequest
podvolumebackups                               velero.io/v1                           true         PodVolumeBackup
podvolumerestores                              velero.io/v1                           true         PodVolumeRestore
restores                                       velero.io/v1                           true         Restore
schedules                                      velero.io/v1                           true         Schedule
serverstatusrequests              ssr          velero.io/v1                           true         ServerStatusRequest
volumesnapshotlocations           vsl          velero.io/v1                           true         VolumeSnapshotLocation

这些资源都是新加的,加了一个资源组。有备份资源backups还有恢复资源restores,还有计划任务资源schedules。

--use-node-agent   数据备份的,在每个节点上面都会部署一个agent,如果不涉及到数据备份,其实这个也可以不要,如果只是k8s里面的资源进行备份

velero-7fdc58b7f5-c8kpv 就是一个控制器,,说的服务端软件其实就是它,两个控制器都在里面。

[root@master ~]# kubectl get pod -n velero
NAME                      READY   STATUS    RESTARTS   AGE
node-agent-7j454          1/1     Running   0          31h
velero-7fdc58b7f5-c8kpv   1/1     Running   0          31h

因为新增加了一些资源类型,比如backup,restore。因为还没有做备份,所以这里面资源都是空的。

[root@master ~]# kubectl get backup
No resources found in default namespace.
[root@master ~]# kubectl get restore
No resources found in default namespace.

到此部署完成,已经把velero的组件部署完毕。上面已经安装了客户端,minio存储,使用minio的客户端执行install命令,将服务器端也部署完毕。

这样所有环境都准备完成,只剩下备份还原了。

http://www.dtcms.com/a/316561.html

相关文章:

  • Linux进程信号——初步认识信号、信号的产生
  • 《UE教程》第一章第六回——迁移独立项目(资源)
  • IAR软件中变量监控的几种方法
  • 如何在 FastAPI 中优雅处理后台任务异常并实现智能重试?
  • Wireshark安装过程 Npcap Setup: Failed to create the npcap service: 0x8007007e.
  • 信息系统项目管理中的沟通管理实战精解
  • 智慧能源场景设备缺陷漏检率↓76%:陌讯多模态融合检测方案实战解析
  • SpringCloud学习------Gateway详解
  • Claude Code 完整指南:入门到应用
  • Qt事件系统学习笔记
  • 嵌入式软件架构设计之七:双机通信及通信协议之字符串协议
  • 大语言模型安全攻防:从提示词注入到模型窃取的全面防御浅谈
  • 与功能包相关的指令ros2 pkg
  • 女性成长赛道:现状与发展趋势|创客匠人
  • NumPy 中的取整函数
  • 如何在Android设备上删除多个联系人(3种方法)
  • Java项目:基于SSM框架实现的公益网站管理系统【ssm+B/S架构+源码+数据库+毕业论文+答辩PPT+远程部署】
  • 解锁高效敏捷:2025年Scrum项目管理工具的核心应用解析
  • 智慧社区物业管理平台登录流程全解析:从验证码到JWT认证
  • 关于熵减 - 双线线圈
  • 前端性能测试:从工具到实战全解析
  • 类内部方法调用,自注入避免AOP失效
  • Flutter 国际化
  • OpenSpeedy绿色免费版下载,提升下载速度,网盘下载速度等游戏变速工具
  • spring boot 加载失败 异常没有曝漏出来
  • 基于Java AI(人工智能)生成末日题材的实践
  • 2. JS 有哪些数据类型
  • 【网络运维】Linux:系统启动原理与配置
  • 虚幻GAS底层原理解剖一(开篇)
  • ⭐CVPR2025 用于个性化图像生成的 TFCustom 框架