Velero 快速上手:使用本地 Minio 完成备份与恢复全流程实操

发布时间:2026/11/7 22:04:31

Velero 快速上手:使用本地 Minio 完成备份与恢复全流程实操 Velero 快速上手使用本地 Minio 完成备份与恢复全流程实操【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero本文基于 Velero 官方文档《Quick start evaluation install with Minio》完整演示如何在 Kubernetes 集群中用 MinioS3 兼容的本地对象存储搭建一套可直接体验的 Velero 环境安装客户端、启动服务器与本地存储、部署示例应用、创建备份与定时策略、模拟灾难并恢复数据最后完成清理。读完后你将掌握 Velero 从安装到备份/恢复的完整操作链路并能结合仓库源码理解velero install各参数的实际作用。需要说明的是该示例的目的是让你快速体验 Velero 的基本功能不适用于生产环境Minio 的生产化配置不在本文范围内。文档适用于 v1.11 版本线参数说明以当前仓库 velero install 命令源码 为准。前置条件开始前请确认以下条件均已满足可访问的 Kubernetes 集群版本 1.7 或更高。注意文件系统备份File System Backup需要 Kubernetes 1.10 及以上或开启了 mount propagation 特性的更早版本。本示例不依赖文件系统备份但后续可能需要参考 文件系统备份文档。集群内可用的 DNS 服务器。已安装kubectl。Minio 所在节点有足够的磁盘空间足以存放所有备份数据且额外保留至少 1GB 空闲空间——Minio 在空闲磁盘低于 1GB 时会停止工作。安装 Velero CLI方式一macOS Homebrew在 macOS 上可以直接用 Homebrew 安装velero客户端brew install velero方式二从官方 Release 下载下载与你客户端平台匹配的官方 Release 压缩包tarball。建议使用官方发布的 Release 版本。每个 Release 的 tarball 中均包含velero命令行客户端。仓库 main 分支的代码处于活跃开发状态不保证稳定。解压 tarballtar -xvf RELEASE-TARBALL-NAME.tar.gz -C /dir/to/extract/to解压后的目录在后续步骤中称为“Velero 目录”。将velero二进制从 Velero 目录移动到PATH中的某个位置。部署本地 Minio 存储Velero 需要一个对象存储来存放备份数据。示例提供了完整的 Minio 部署清单 00-minio-deployment.yaml包含三个对象NamespaceveleroVelero 与 Minio 共用。Deploymentcomponent: minio运行minio/minio:latest镜像监听 9000 端口访问密钥由环境变量MINIO_ACCESS_KEYminio与MINIO_SECRET_KEYminio123定义数据目录使用emptyDir卷挂载到/storage。Serviceminio默认类型为ClusterIP仅集群内可访问暴露 9000 端口。注释中明确提示生产环境保持ClusterIP仅在 Minikube 等试验环境才改为NodePort。Jobminio-setup使用minio/mc客户端初始化存储命令为mc alias set velero http://minio:9000 minio minio123 mc mb -p velero/velero即创建名为velero的 bucket——这正是后续velero install --bucket velero所引用的 bucket且mb -p参数表示在 bucket 上禁用公共访问。应用该清单kubectl apply -f examples/minio/00-minio-deployment.yaml注意示例 Minio 清单使用emptyDir存储所在节点必须同时满足“备份数据 1GB 空闲空间”的要求。如果节点空间不足可以修改清单改用 Persistent Volume 替代emptyDir。部署 Velero 服务器第一步创建 Velero 专用凭据文件在你的 Velero 目录下创建credentials-velero文件AWS 风格的 S3 凭据格式供 AWS 插件解析[default] aws_access_key_id minio aws_secret_access_key minio123其中的minio/minio123与 Minio Deployment 的MINIO_ACCESS_KEY/MINIO_SECRET_KEY环境变量一致。第二步执行 velero install在 Velero 目录下运行velero install \ --provider aws \ --plugins velero/velero-plugin-for-aws:v1.2.1 \ --bucket velero \ --secret-file ./credentials-velero \ --use-volume-snapshotsfalse \ --backup-location-config regionminio,s3ForcePathStyletrue,s3Urlhttp://minio.velero.svc:9000各参数的含义结合 install.go 中的BindFlags定义参数取值说明--provideraws备份与卷存储的提供者名称。由于 Minio 兼容 S3这里按 AWS 处理--pluginsvelero/velero-plugin-for-aws:v1.2.1要装入 Velero Deployment 的插件镜像。AWS 插件版本需与 Velero 版本兼容安装时请自行核对--bucketvelero备份存放的 bucket 名称即 Minio setup Job 创建的velero--secret-file./credentials-velero凭据文件路径内容会读取后创建为名为cloud-credentials的 Secret--use-volume-snapshotsfalse不自动创建VolumeSnapshotLocation。示例假设集群没有支持快照的卷提供者--backup-location-configregionminio,s3ForcePathStyletrue,s3Urlhttp://minio.velero.svc:9000BackupStorageLocation的键值配置s3Url指向集群内 Minio Service 地址s3ForcePathStyletrue让 S3 客户端使用 path-style 寻址Minio 要求源码层面的补充说明在 pkg/cmd/cli/install/install.go 的Validate方法中可以看到参数校验规则未使用--no-default-backup-location时--provider和--bucket均为必填--secret-file与--no-secret必须二选一且不可同时使用当--use-volume-snapshotsfalse时--snapshot-location-config必须为空非--no-default-backup-location场景下--plugins为必填。AsVeleroOptions会用os.ReadFile读取--secret-file指向的文件字节内容作为SecretData传入资源生成逻辑pkg/install/resources.go 中的BackupStorageLocation函数据此构建BackupStorageLocation对象并将凭据组装为cloud-credentialsSecret。该 Secret 随后被挂载到 Velero 服务器 Deployment见 pkg/install/deployment.go。此外还可以追加--use-node-agent开启文件系统备份支持会创建 node-agent DaemonSet以及--wait等待 Deployment 就绪源码中Run方法会对 Velero Deployment、node-agent DaemonSet 逐一执行就绪检查。也可以组合使用--dry-run -o yaml只生成资源清单而不提交到集群便于定制安装。第三步部署示例 nginx 应用kubectl apply -f examples/nginx-app/base.yaml该清单base.yaml创建了nginx-example命名空间标签app: nginx、2 副本的nginx-deployment标签app: nginx、以及LoadBalancer类型的 Servicemy-nginx。第四步验证部署kubectl get deployments -l componentvelero --namespacevelero kubectl get deployments --namespacenginx-example确认 Velero 与 nginx 两个 Deployment 均已成功创建。创建备份按标签选择器创建一次性备份备份所有匹配appnginx标签选择器的对象velero backup create nginx-backup --selector appnginx如果希望备份所有对象、但排除匹配backupignore标签的对象可使用velero backup create nginx-backup --selector backup notin (ignore)可选创建定时备份基于 cron 表达式每天凌晨 1 点执行一次velero schedule create nginx-daily --schedule0 1 * * * --selector appnginx也可以直接使用的非标准简写 cron 表达式velero schedule create nginx-daily --scheduledaily --selector appnginx更多 cron 用法可参考 Velero 所依赖的 cron 包的文档。模拟灾难删除示例命名空间模拟应用彻底丢失kubectl delete namespace nginx-example确认 Deployment 与 Service 均已消失kubectl get deployments --namespacenginx-example kubectl get services --namespacenginx-example kubectl get namespace/nginx-example以上命令应无任何结果返回。注意命名空间的完整清理可能需要等待几分钟。执行恢复基于之前的备份创建恢复velero restore create --from-backup nginx-backup查看恢复状态velero restore get恢复完成后输出形如NAME BACKUP STATUS WARNINGS ERRORS CREATED SELECTOR nginx-backup-20170727200524 nginx-backup Completed 0 0 2017-07-27 20:05:24 0000 UTC none注意恢复可能需要一段时间期间STATUS列显示InProgress。恢复成功后STATUS变为CompletedWARNINGS与ERRORS均为 0nginx-example命名空间中的所有对象应恢复到删除前的状态。如出现错误或警告可查看详情更多排查信息见 恢复问题排查文档velero restore describe RESTORE_NAME清理删除备份删除指定备份包括对象存储中的数据和卷快照velero backup delete BACKUP_NAME该命令会让 Velero 服务器删除与BACKUP_NAME关联的全部备份数据需要对每个要彻底删除的备份分别执行。完全删除后执行velero backup get BACKUP_NAME将看不到该备份。彻底卸载 Velero、Minio 与示例应用kubectl delete namespace/velero clusterrolebinding/velero kubectl delete crds -l componentvelero kubectl delete -f examples/nginx-app/base.yaml将 Minio 暴露到集群外执行velero describe或获取日志等命令时Velero 服务器会生成预签名 URL 供客户端下载所请求的对象。要让集群外的 Velero 客户端访问这些 URL就必须把 Minio 暴露到集群外。有两种方式将 Minio Service 类型从ClusterIP改为NodePort为集群配置 IngressMinio Service 保持ClusterIP不变。两种方式都可以进一步在BackupStorageLocation的配置中指定publicUrl字段用于生成预签名 URL。方式一NodePort ServiceMinio 部署默认为ClusterIP类型。如果从客户端可以直达集群节点可以改为NodePort轻松对外暴露服务。在 00-minio-deployment.yaml 中把 Service 的spec.type从ClusterIP改为NodePort。获取 Minio 的完整 URL如果使用 Minikubeminikube service minio --namespacevelero --url其他环境获取集群任意节点的对外 IP 或 DNS 名称确保 Velero 客户端能访问该地址追加 NodePort 端口号组成完整 URL端口号通过以下命令获取kubectl -n velero get svc/minio -o jsonpath{.spec.ports[0].nodePort}编辑BackupStorageLocationYAML在spec.config下添加publicUrl: 上一步获得的 URL。URL 必须包含http://或https://前缀。通过 HTTPS 端点访问日志如果使用 HTTPS 的 Miniovelero describe或velero logs的输出可能是一堆不可读的乱码。解决办法是为BackupStorageLocation添加公共 URLkubectl patch -n velero backupstoragelocation default --type merge -p {spec:{config:{publicUrl:https://a public IP for your Minio instance:9000}}}如果证书是自签名的请参考 自签名证书文档。方式二KinDKubernetes in Docker环境KinD 不支持 NodePort Service此时可以用端口转发访问 Minio bucket。在终端中执行MINIO_POD$(kubectl get pods -n velero -l componentminio -o jsonpath{.items[0].metadata.name}) kubectl port-forward $MINIO_POD -n velero 9000:9000然后在另一个终端编辑BackupStorageLocationkubectl edit backupstoragelocation default -n velero在spec.config部分添加publicUrl: http://localhost:9000。方式三Ingress为集群配置 Ingress 超出了 Velero 文档的范围但如果你已经配置好了 Ingress在跑 Minio 示例时继续沿用它也是合理的选择Service 类型保持ClusterIP编辑BackupStorageLocationYAML在spec.config下添加publicUrl: Ingress 的 URL 和端口。相关链接生产环境安装与平台定制自定义安装安装与配置问题排查安装问题调试文件系统备份本示例未启用可通过--use-node-agent开启File System Backup恢复问题排查Debugging Restores仓库内的示例资源Minio 部署清单、nginx 示例应用velero install命令实现与参数校验pkg/cmd/cli/install/install.go资源生成逻辑见 pkg/install/resources.go【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/7 22:00:18

电工证考题100题保姆级教程:证书过期了不知道怎么复审延期怎么办

电工证考题100题保姆级教程:证书过期了不知道怎么复审延期怎么办 证书过期了不知道怎么复审延期?别慌,这不是你的错,是很多人容易忽视的流程。尤其是特种作业证书,一旦过期,不仅影响日常工作,还可能面临法律风险。这篇文章就是你的 保姆级教程…

2026/11/7 22:00:18

电工作业管理规定值不值得考?新手避坑全攻略

电工作业管理规定值不值得考?新手避坑全攻略 不知道去哪报名怕被中介坑?电工作业证虽然听起来门槛高,但现实中很多新手被各种培训机构绕得晕头转向,最后花了钱还考不过,或者拿到的是假证。电工作业管理规定是国家对电工从业安全的硬性要求,值不值得考,…

2026/11/7 22:00:18

可以在外地办电工证吗证全国通用吗

电工证可以在外地办吗?学历不高怕报不上名?上岗必备攻略来了! 你是不是也这样想:学历不高,连个电工证都考不了,以后怎么上岗?别慌, 电工证可以在外地办吗? 这个问题其实很多人都问过,而且答案是—— 完全可以!…

2026/11/7 22:00:18

高压特种工实做保姆级教程:别让证书拖了你找工作的后腿

高压特种工实做保姆级教程:别让证书拖了你找工作的后腿 你是不是正愁没有高压特种作业操作证,找工作处处碰壁?别急,这篇保姆级教程就是为你量身打造,从报考到实做,从薪资到发展,全盘托出,让你不再被证书拦在门外。…

2026/11/7 22:00:18

沈飞技能操作岗电工证电子证书怎么复审?别等过期了才后悔

沈飞技能操作岗电工证电子证书怎么复审?别等过期了才后悔 证书过期了不知道怎么复审延期,这种情况在特种作业行业里太常见了,特别是像沈飞技能操作岗电工证这样的证书,一旦过期,不仅影响工作,还可能面临法律责任。别以为电子证书只是个“电子版”,它的…

2026/11/7 21:55:17

广东特种工培训项目官方报名入口在哪里找?学历不高怕报不上名?

广东特种工培训项目官方报名入口在哪里找?学历不高怕报不上名? 学历不高怕报不上名?别担心,广东特种工培训项目官方报名入口其实并不难找,关键是你得知道从哪儿下手。很多人觉得特种作业证只适合高学历或专业背景强的人报考,其实不然。只要你愿意学习,…

2026/11/7 14:54:47

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/7 14:50:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/7 0:03:08

郑州报考避坑指南:电工证和钳工证怎么选?实操考试心里没底怕挂科

郑州报考避坑指南:电工证和钳工证怎么选?实操考试心里没底怕挂科 实操考试心里没底怕挂科?你不是一个人。特别是在郑州这样的城市,很多施工企业负责人和一线作业人员在报考电工证和钳工证时都面临着同样的困惑。到底该考哪个证?哪个更适合自己?哪个证书…

2026/11/7 0:03:08

广西电工证办理流程全解析:外省证怎么转?在哪考最靠谱?

广西电工证办理流程全解析:外省证怎么转?在哪考最靠谱? 之前考的证在外省能不能转过来?这个问题我遇到太多了,今天就拿广西电工证办理流程来具体说说,别再走弯路了。广西电工证的报考、复审、继续教育这些环节,如果你不了解,真的会吃大亏,尤其对于从…

2026/11/7 0:03:08

电气电工证都有哪些保姆级教程

电气电工证都有哪些保姆级教程 你是不是正愁不知道去哪报名,怕被中介坑?别急,这篇保姆级教程专为河南初次报考人员准备,帮你搞清楚 电气电工证都有哪些 ,以及如何避开那些坑。 电气电工证都有哪些?别被五花八门的证书搞懵了…

2026/11/7 14:54:47

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/7 14:50:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑