如何用Velero实现Kubernetes集群备份与恢复?

来源:Linux教程作者:葵司头衔:网络博主
导读:本期聚焦于小伙伴创作的《如何用Velero实现Kubernetes集群备份与恢复?》,敬请观看详情。集群误删命名空间或存储卷损坏时,原生etcd快照难以跨云迁移。Velero基于CRD对象模型,将资源与持久卷数据分别处理,支持定时备份、跨集群恢复和过滤规则。它利用Restic或CSI快照捕获卷内容,通过对象存储保存压缩文件。相比手工导出YAML,Velero能保留 ownerReference 与标签选择器,在灾难场景下可将业务回滚到指定时间点,并避免节点级操作风险。

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

如何用Velero实现Kubernetes集群备份与恢复?

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

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。