Velero(原名Heptio Ark) 是一个专为 Kubernetes 设计的开源备份恢复工具

Velero(原名Heptio Ark) 是一个专为 Kubernetes 设计的开源备份恢复工具,核心功能包括集群资源(如 Deployment、PV)的全量/增量备份、跨集群恢复及定时备份,支持云存储(AWS/Azure/GCP)和本地存储(如 MinIO),通过插件架构兼容多种存储后端,适用于灾难恢复、环境迁移及开发测试场景,具备高可用设计和监控能力,能有效保障 Kubernetes 数据的安全性与可移植性。
简单来说,Velero 是一个开源的工具,用于安全地备份、恢复和在 Kubernetes 集群之间迁移资源和持久化卷。
您可以把它理解为 Kubernetes 生态中的“备份与灾难恢复”解决方案。
以下是 Velero 的核心概念和您链接中 v1.8 版本兼容性的关键信息总结:
Velero 的核心功能
备份和恢复:对整个 Kubernetes 集群或按标签选择的部分资源进行备份,并在需要时进行恢复。
灾难恢复:在集群发生故障时,能够快速将应用和数据恢复到另一个集群。
数据迁移:将应用及其数据从一个集群迁移到另一个集群(例如,从本地迁移到云上,或在云服务商之间迁移)。
集群复制:为开发、测试环境复制生产集群的数据和配置。
根据您提供的文档,v1.8 版本的主要兼容性信息如下:
Kubernetes 版本支持
支持:v1.16 到 v1.22
v1.22 支持情况:从 Velero v1.8 开始,正式支持 Kubernetes v1.22。
重要提示:Kubernetes 的 API 会随着版本更新而废弃。Velero 通常支持当前版本及之前的几个版本。对于更新的 Kubernetes 版本(如 v1.23+),您需要查阅更高版本的 Velero 文档。
云提供商/存储支持
Velero 通过插件系统与不同的存储后端和云平台集成。
对象存储插件:用于存储备份数据。
AWS S3 及兼容服务(如 MinIO)
Google Cloud Storage (GCS)
Microsoft Azure Blob Storage
卷快照插件:用于对持久化卷创建快照。
AWS EBS
Google Cloud Persistent Disk
Azure Managed Disks
VMware vSphere (通过 CSI 驱动或原生插件)
Portworx
Ceph CSI 等
其他关键兼容性信息
操作系统:支持 Velero 客户端和服务器运行的 Linux 和 macOS。
容器存储接口 (CSI):从 v1.8 开始,对 CSI 快照的支持趋于稳定,这意味着它可以更好地与各种 CSI 驱动的存储系统协同工作,进行卷的快照和恢复。
数据移动器:引入了对“数据移动器”功能的支持(可能作为 Alpha 或 Beta 功能),它允许使用 Restic 或 Kopia 进行文件系统备份,作为原生快照的替代方案,这在存储平台不支持快卷快照时非常有用。
相比之下,我们之前所有的传统备份方案往往存在操作复杂、兼容性差、恢复效率低等问题,一旦发生集群故障,可能导致业务长时间中断。
可以这么说,它是一款革命性的K8S集群恢复工具!
Velero 的架构
Velero 的架构主要由客户端工具、服务端组件和插件系统三大部分构成。Velero 的组件间通过 Kubernetes API 进行通信,采用事件驱动的架构模式。
客户端工具
Velero CLI:作为整个备份恢复系统的控制中枢,提供了丰富的命令行接口来管理 Kubernetes 集群的备份、恢复、迁移等操作。它采用分层命令结构,基于 Cobra 框架构建,设计简洁直观,遵循 kubectl 类似的使用模式,让用户能够快速上手。
服务端组件
Velero Server:以 Deployment 形式运行在 Kubernetes 集群中,是整个备份恢复系统的核心组件。它通过控制器模式监听和管理备份、恢复等核心资源,采用模块化设计,包含多个关键子系统协同工作,确保数据的一致性和可靠性。
主控制器:Velero Server 的大脑,负责协调所有备份和恢复操作。它通过 Kubernetes 的控制器模式监听自定义资源的变化,并触发相应的处理逻辑。
备份控制器:处理 Backup 资源的创建、更新和删除操作,协调整个备份流程。
恢复控制器:处理 Restore 资源,负责从备份中恢复应用和数据。
备份同步控制器:定期同步备份存储位置中的备份元数据,确保集群中的备份状态与存储位置一致。
插件系统
Velero 采用高度可扩展的插件架构,支持多种存储后端和卷类型。插件系统是其架构设计的核心亮点,通过扩展机制支持多种存储后端和云平台。
对象存储插件:实现备份数据的存储和读取,支持多种对象存储服务,如 AWS S3、Azure Blob、Google Cloud Storage、Aliyun OSS 等。
卷快照插件:通过与云厂商的 Volume Snapshot API 集成,实现持久卷的快照备份。
备份项操作插件:对 PV、Pod、StorageClass 等资源的操作进行抽象,扩展了备份和恢复的功能。
Velero 核心功能与优势
全量与增量备份
Velero 支持按需或定时备份整个集群或指定命名空间资源(如 Deployment、Service、ConfigMap 等),并可通过 CSI 插件或 Restic 工具实现持久卷(PV)数据的高效备份。其增量备份机制可减少存储开销,提升备份效率。
快速恢复与迁移
集群重建:在集群崩溃时,Velero 可从备份中快速恢复资源定义和配置,结合持久卷数据,实现一键重建。
跨集群迁移:支持将应用从一个 Kubernetes 集群迁移到另一个,适用于环境升级或多云部署场景。
环境复制:可将生产环境克隆到开发/测试集群,简化环境一致性管理。
灵活的备份策略
按对象筛选:支持按命名空间、资源类型(如 Deployment、PVC)或标签(Label)筛选备份对象,避免全量备份的冗余。
自动化任务:基于 Cron 表达式设置自动化备份策略(如每日 1 点备份),并支持保留策略(如仅保留最近 7 天备份)。
高兼容性与扩展性
存储适配:自动处理不同集群间存储类(StorageClass)的差异,例如将 AWS EBS 卷迁移到阿里云 OSS。
插件化架构:通过插件支持多种云厂商存储服务(如 AWS S3、阿里云 OSS)和 CSI 快照功能。
Velero 的工作原理
备份流程
用户通过 Velero 客户端发起备份请求,服务端 BackupController 创建 Backup 资源并触发备份任务。
BackupController 收集需要备份的资源元数据(如 Kubernetes 对象定义)和持久卷数据(通过 CSI 或 Restic 插件)。
数据被存储到指定的对象存储(如 MinIO、AWS S3),备份任务完成后生成备份记录。
恢复流程
用户通过 Velero 客户端发起恢复请求,服务端 RestoreController 创建 Restore 资源并触发恢复任务。
RestoreController 从对象存储中读取备份数据,重建 Kubernetes 资源和持久卷。
默认执行非破坏性恢复,即跳过目标集群中已存在的资源;可通过 --existing-resource-policy=update 参数更新现有资源。
Velero 适用场景
集群迁移:将应用从一个 Kubernetes 集群迁移到另一个。
子集备份恢复:基于命名空间或标签备份恢复特定资源。
多 API 资源对象升级:升级前备份,失败时快速恢复。
无 etcd 访问权限:如托管 Kubernetes 服务(GKE、EKS)。
Velero 部署与使用
安装方式
Velero 支持多种安装方式,可根据环境需求选择:
CLI 安装(推荐)
下载 Velero CLI:从 GitHub 发布页(https://github.com/vmware-tanzu/velero/releases) 下载对应操作系统的二进制文件(如 Linux 示例):wget https://github.com/vmware-tanzu/velero/releases/download/v1.17.0/velero-v1.17.0-linux-amd64.tar.gz
tar -xzf velero-v1.17.0-linux-amd64.tar.gz
sudo mv velero-v1.17.0-linux-amd64/velero /usr/local/bin/
配置云凭证:创建 credentials-velero 文件,填写云平台访问密钥(如 AWS 示例):
[default]
aws_access_key_id = YOUR_ACCESS_KEY
aws_secret_access_key = YOUR_SECRET_KEY
安装 Velero 服务端
使用 velero install 命令,指定云提供商、存储桶和插件(以 AWS 为例):
velero install \--provider aws \--plugins velero/velero-plugin-for-aws:v1.7.0 \--bucket my-backup-bucket \--secret-file ./credentials-velero \--backup-location-config region=us-west-2 \--use-volume-snapshots=false
Helm 安装(生产环境推荐)
添加 Helm 仓库并安装:
helm repo add vmware-tanzu https://vmware-tanzu.github.io/helm-charts
helm install velero vmware-tanzu/velero \--namespace velero --create-namespace \--set configuration.provider=aws \--set configuration.backupStorageLocation.bucket=my-backup-bucket \--set credentials.existingSecret=cloud-credentials
配置要求
Kubernetes 版本兼容性
Velero 与 Kubernetes 版本需匹配,例如 Velero v1.17.0 支持 Kubernetes v1.24+。建议参考官方兼容性矩阵(https://velero.io/docs/v1.8/compatibility/)。
| Velero 版本 | 预期 Kubernetes 版本兼容性 | 已在以下 Kubernetes 版本上测试 |
|---|---|---|
| 1.17 | 1.18-latest | 1.31.7、1.32.3、1.33.1 和 1.34.0 |
| 1.16 | 1.18-latest | 1.31.4、1.32.3 和 1.33.0 |
| 1.15 | 1.18-latest | 1.28.8、1.29.8、1.30.4 和 1.31.1 |
| 1.14 | 1.18-latest | 1.27.9、1.28.9 和 1.29.4 |
| 1.13 | 1.18-latest | 1.26.5、1.27.3、1.27.8 和 1.28.3 |
| 1.12 | 1.18-latest | 1.25.7、1.26.5、1.26.7 和 1.27.3 |
| 1.11 | 1.18-latest | 1.23.10、1.24.9、1.25.5 和 1.26.1 |
存储后端配置
云存储:支持 AWS S3、Azure Blob、GCP 等,需配置访问密钥和区域。
本地存储:推荐使用 MinIO,部署示例:
docker run -d -p 10087:9000 --name minio \-e "MINIO_ROOT_USER=admin" -e "MINIO_ROOT_PASSWORD=password" \minio/minio server /data
存储桶权限:确保 Velero 有读写权限(如 AWS S3 的 s3:PutObject、s3:GetObject)。
资源限制
生产环境建议为 Velero Pod 分配足够资源(如 CPU 1000m、内存 1Gi),避免因资源不足导致备份失败。
基本使用–创建备份
全量备份:
velero backup create k8s-backup --include-namespaces=default
过滤资源:仅备份 Deployment
velero backup create deploy-backup --include-namespaces=kube-system --include-resources=deployment
文件系统备份(PV 数据):
velero backup create fs-backup --include-namespaces=nginx-example \--include-volumes=all --volume-backup-mode=filesystem
恢复备份–从备份恢复:
velero restore create --from-backup=k8s-backup
跨集群恢复:导出备份元数据后,在目标集群导入:
velero backup download k8s-backup --output-dir=./backup-export
velero backup upload --from-dir=./backup-export
velero restore create --from-backup=k8s-backup
定时备份
创建每日备份计划:
velero schedule create daily-backup --schedule="0 2 * * *" --ttl=24h
实战案例
使用 Velero 重建崩溃的 Kubernetes 集群!
安装 Velero 客户端和服务端,配置对象存储(如 MinIO)作为备份后端。部署测试应用(如 Nginx),并创建持久卷(PVC)存储数据。
创建备份
velero backup create nginx-backup --include-namespaces nginx-example
该命令备份 nginx-example 命名空间下的所有资源,包括 Deployment、Service 和 PVC。
Velero 自动创建 PV 快照(通过 CSI 插件)并收集资源元数据,存储到对象存储。
模拟集群崩溃与恢复
#删除应用
kubectl delete namespace nginx-example
#执行恢复
velero restore create --from-backup nginx-backup
#验证结果
kubectl get pods -n nginx-example
若 Nginx Pod 正常运行且 PVC 数据完整,则恢复成功。
高级功能
文件系统备份(PV)
优势:兼容所有文件系统(ext4/xfs),无需存储厂商驱动,支持细粒度控制(如排除 /tmp 目录)。
启用方式:在 Velero 部署中配置 features.EnableFileSystemBackup=true。
多云环境支持
支持 AWS、Azure、GCP 等云平台,通过插件实现跨云备份。例如 Azure 配置:
velero install \--provider azure \--plugins velero/velero-plugin-for-microsoft-azure:v1.7.0 \--bucket velero-backups \--backup-location-config resourceGroup=VeleroBackups,storageAccount=velerobackups123
监控与告警
集成 Prometheus 监控备份状态,配置告警规则(如备份失败时触发通知)。
最佳实践
生产环境建议
启用高可用:通过 Leader 选举和状态持久化确保备份服务连续性。
定期测试恢复流程,验证备份完整性。
性能优化
调整并发数:设置 VELERO_FILESYSTEM_BACKUP_CONCURRENCY=4 提高备份速度。
使用增量备份:启用 Kopia 算法减少重复数据传输。
成本优化
配置 S3 对象过期规则(如保留 30 天),设置压缩(如 compression: zstd)。
Velero 高可用性设计
Velero 服务端支持高可用部署,确保备份服务的连续性。
领导者选举:多个 Velero 实例通过 Kubernetes 的 Lease 资源进行领导者选举,确保只有一个实例在处理备份和恢复操作,避免冲突和重复执行。
状态持久化: 所有操作状态都持久化到 etcd 中,确保在实例故障或重启后能够恢复操作状态,继续执行未完成的备份或恢复任务。
重试机制:操作失败时自动重试,支持指数退避策略,避免因临时性问题导致操作永久失败。
操作幂等性:所有关键操作都设计为幂等,即多次执行同一操作不会产生不同的结果,避免重复执行问题。
