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

发布时间:2026/9/17 10:24:28

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/9/17 11:24:43

蓝桥杯单片机编程笔记:从驱动库到高频模块的备考速查指南

简介:蓝桥杯单片机编程笔记是一份面向蓝桥杯单片机设计与开发赛项选手及单片机初学者的浓缩复习资料,围绕IO口扩展、数码管动态扫描、定时器中断、矩阵键盘、串口通讯、外部中断、实时时钟等高频考点展开,通过代码实例拆解编程思路&#xff0…

2026/9/17 11:24:43

SQL正则替换实战:REGEXP_REPLACE从清洗到脱敏的完整指南

前阵子接了一个客户数据清洗的活儿,几百条手机号里什么格式都有:86 138-1234-5678、138 1234 5678、(138)12345678,甚至还有汉字备注混在里面的。当时如果一个个用REPLACE去套,写出来的 SQL 能绕地球一圈。…

2026/9/17 11:24:43

Dynamics 365 FO开发入门:从零开始建表全流程解析

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

2026/9/17 11:24:43

深度学习驱动医疗化验单识别:PaddleOCR实战指南

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

2026/9/17 11:19:42

用Python拆解博士面试英语口语PDF:从语料到模拟的闭环训练

简介:申请攻读博士学位的考生在准备英语面试时,往往需要回答关于个人优势、实验技能、读博动机等高频提问。这份PDF指南即针对博士复试和申请考核中的常见英文提问,按个人素质、学习进展、实验能力、读博规划等模块整理中英文对照的面试问题集…

2026/9/16 12:52:37

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/17 0:03:13

WiFi密码安全测试:从原理到实战的字典暴力破解指南

1. 写在前面:我为什么要研究WiFi密码这件事先交代一下背景。我身边有不少朋友,家里的WiFi密码常年是"12345678"或者"88888888",问就是"好记"。直到有一次,隔壁邻居蹭网蹭到我家路由器后台都进不去&…

2026/9/17 0:03:13

redis-py服务控制与监控函数实战:从ping到slowlog的巡检指南

我用 redis-py 写了快五年的业务代码,坦白说,真正让我觉得这个客户端“像一个成熟工具箱”的,不是 get/set 那套基本操作,而是它那批专门做服务控制与状态监控的辅助函数。日常开发里,大家把redis.Redis(host..., deco…

2026/9/17 0:03:13

SpringBoot+Vue3实现中小企业设备管理系统开发实践

1. 项目概述与核心价值中小企业设备管理系统是制造业、服务业等领域的基础信息化工具。传统设备管理往往依赖Excel表格或纸质记录,存在数据孤岛、流程混乱、维护成本高等痛点。这套基于Java SpringBootVue3MyBatis的技术方案,通过前后端分离架构实现了设…

2026/9/16 22:55:57

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/16 22:56:09

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/16 22:56:16

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

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

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

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