Velero是一款开源的Kubernetes备份与迁移工具,由VMware主导维护,能够将集群中的API对象以及关联的持久化数据打包保存到外部对象存储中。它的核心设计理念是将“集群状态”与“底层基础设施”解耦,使运维人员可以在不改变节点结构的前提下完成灾难恢复、集群升级回滚以及跨云环境搬迁。

Velero的架构与核心组件
Velero的运行依赖于两个主要部分:部署在Kubernetes集群内的服务端控制器,以及位于集群外的对象存储桶。服务端以Deployment形式运行一个主进程,同时借助节点代理(node-agent)处理卷数据的备份。它定义了Backup、Restore、Schedule、BackupStorageLocation等一系列CRD,用户通过命令行工具提交这些自定义资源,控制器监听到变化后执行对应逻辑。
在对象存储方面,Velero支持AWS S3及兼容S3协议的最小化服务,例如MinIO。每次备份会生成一个包含资源清单的tar压缩包,以及描述备份元数据的JSON文件。对于持久卷,若集群支持CSI快照,Velero会调用快照接口;否则使用Restic对挂载目录进行文件级遍历。这种双通道机制让无状态应用和有状态应用都能被统一保护。
与直接拷贝etcd数据文件相比,Velero具备明显的过滤能力。你可以通过标签选择器只备份特定命名空间,或者在备份时排除某些ConfigMap。这种细粒度控制在多租户场景中尤为重要,因为不同团队对恢复点目标的要求差异很大,全量etcd恢复往往会造成无关业务也被强制回滚。
安装与配置实战
开始使用Velero前,需要先准备对象存储凭据。以MinIO为例,在本地临时集群中创建Bucket并获取AccessKey与SecretKey后,将其写入velero的credentials配置文件。随后通过官方提供的CLI执行安装命令,指定镜像版本与存储位置参数。安装完成后,系统中会出现名为velero的命名空间,以及相关的RBAC角色绑定。
下面展示一个典型的安装命令与凭据文件结构,注意其中的反斜杠仅用于命令行换行,实际执行时请合并为一行:
cat > credentials-velero <<EOF [default] aws_access_key_id = minioadmin aws_secret_access_key = minioadmin EOF velero install --provider aws --bucket velero-backup --secret-file ./credentials-velero --use-volume-snapshots=false --plugins velero/velero-plugin-for-aws:v1.7.0 --use-restic
配置完成后,建议立刻创建一个测试备份验证链路通畅。使用velero backup create命令并加上--include-namespaces参数,可以仅对演示命名空间生效。备份状态可通过velero backup get观察,当Phase显示为Completed时,说明资源清单与卷数据均已上传成功。
若环境位于离线网络,还需提前将容器镜像同步到私有仓库,并在安装时通过--image与--plugins指定内网地址。否则控制器会因拉取公网镜像失败而处于CrashLoopBackOff状态,这种故障在金融客户的隔离集群中十分常见。
恢复流程与常见避坑点
当集群发生误操作时,执行恢复只需一条velero restore create指令并关联已有备份名。Velero会按照备份时的资源顺序重建对象,先恢复Namespace与RBAC,再处理Workload与Service。如果原集群已存在同名资源,默认策略会尝试合并元数据,但镜像版本等字段以备份为准,这有助于快速回退有问题的发布。
在使用Restic备份卷时,一个容易忽略的坑是权限映射。容器以非root用户运行时,恢复后的目录owner可能变成数字ID,导致应用无法写入。此时应在备份前确认Pod的securityContext,或在恢复后手动执行chown。另一个常见问题是跨云恢复时StorageClass名称不一致,Velero提供--storage-class-mapping参数来解决这类映射,否则PVC会一直处于Pending。
对于需要周期性保护的业务,应当创建Schedule资源而非手动备份。下方代码展示了一个每天凌晨执行的备份策略,它保留了最近三份快照,并通过标签过滤掉临时作业:
apiVersion: velero.io/v1
kind: Schedule
metadata:
name: daily-backup
namespace: velero
spec:
schedule: "0 0 * * *"
template:
includedNamespaces:
- prod
excludedResources:
- jobs.batch
ttl: 720h
storageLocation: default
最后需要强调,Velero并非etcd的替代品。它无法备份集群CA证书与kube-apiserver自身配置,这些静态组件仍需配合传统主机级快照。只有将Velero的对象级恢复与基础设施层的容灾结合,才能构建完整的Kubernetes备份体系。
VeleroKubernetes_backupetcd_restore修改时间:2026-08-14 05:06:14