用Velero给K8s集群搬个家,跨云迁移竟然这么简单!

Kubernetes跨云迁移听起来复杂?Velero开源工具让你像搬家一样简单。本文从实战出发,手把手教你使用Velero备份、迁移、恢复K8s资源与持久卷,覆盖AWS、阿里云、腾讯云等多云场景,附避坑指南。

用Velero给K8s集群搬个家,跨云迁移竟然这么简单!
封面图:ZuCDN · ZuCDN 原创

为什么我们需要跨云迁移?

实际操作要点

随着多云战略成为企业常态,Kubernetes集群的跨云迁移需求日益频繁。无论是为了降低成本、规避供应商锁定,还是为了灾备与合规,将K8s应用从A云平滑迁移到B云,都是一个技术痛点。传统方式——手动导出YAML、重建存储、重新配置网络——耗时且易出错。而Velero的出现,让这一过程变得像“搬家”一样只需三步:打包、运输、复原。

Velero是什么?

先看关键判断

Velero(原名Heptio Ark)是一个由VMware维护的开源工具,专门用于Kubernetes集群的备份、恢复和迁移。它支持将K8s资源(Deployment、Service、ConfigMap等)以及持久卷(PV)的数据备份到对象存储(如AWS S3、阿里云OSS、MinIO),并能将备份恢复到同一集群或不同的目标集群。其核心能力包括:

  • 资源备份:通过API获取集群对象快照,支持按命名空间、标签筛选。
  • 卷快照:集成CSI、插件、或原生云存储快照,备份PV数据。
  • 迁移:备份到标准格式后,在目标集群恢复,实现跨集群、跨云。
  • 调度策略:支持CronJob定时备份。

跨云迁移的核心逻辑

容易忽略的细节

Velero的跨云迁移原理并不复杂:在源集群上创建备份(包含资源和卷快照),将备份数据上传至对象存储;然后在目标集群上安装Velero并指向同一存储,执行恢复命令。关键在于:

  • 对象存储必须被两个集群都能访问(如公网S3或内网互通)。
  • 卷快照依赖云提供商的快照API,跨云时需使用文件级备份(Restic/Kopia)或CSI通用快照。
  • 目标集群的StorageClass需兼容,或通过存储映射自动转换。

实战:三步完成跨云迁移

第一步:在源集群安装并配置Velero

假设源集群运行在阿里云ACK上,目标集群运行在腾讯云TKE上。我们需要一个共用的对象存储桶——这里以AWS S3为例(也可用MinIO自建)。

# 安装velero命令行工具
wget https://github.com/vmware-tanzu/velero/releases/download/v1.14.0/velero-v1.14.0-linux-amd64.tar.gz
tar -xvf velero-*.tar.gz
sudo mv velero /usr/local/bin/

# 配置凭证(S3的access key)
export AWS_ACCESS_KEY_ID=xxx
export AWS_SECRET_ACCESS_KEY=xxx

# 安装Velero服务器,并启用Kopia(文件级备份)
velero install 
    --provider aws 
    --bucket your-bucket-name 
    --backup-location-config region=us-east-1 
    --snapshot-location-config region=us-east-1 
    --use-volume-snapshots=false 
    --use-node-agent 
    --plugins velero/velero-plugin-for-aws:v1.9.0

注意:关闭卷快照(–use-volume-snapshots=false)并启用node-agent(–use-node-agent),让Velero通过文件拷贝(Kopia)备份PV数据,从而摆脱云厂商快照API的限制——这是跨云迁移的关键技巧。

第二步:备份整个命名空间

假设我们要迁移production命名空间下的所有应用:

velero backup create my-backup --include-namespaces production --default-volumes-to-fs-backup --wait

参数解释:

  • --include-namespaces production:只备份production命名空间。
  • --default-volumes-to-fs-backup:对所有PVC启用文件级备份(Kopia)。
  • --wait:等待备份完成显示结果。

备份完成后,检查状态:velero backup describe my-backup。如果成功,你会看到Volume Backups状态为Completed。

第三步:在目标集群恢复

在腾讯云TKE上安装Velero(同样的版本),指向同一S3桶:

# 安装,注意使用不同的凭证(TKE节点可通过IAM授权)
velero install 
    --provider aws 
    --bucket your-bucket-name 
    --backup-location-config region=us-east-1 
    --use-node-agent 
    --plugins velero/velero-plugin-for-aws:v1.9.0

# 查看可用的备份列表
velero backup get

# 开始恢复,并自动调整StorageClass
velero restore create --from-backup my-backup --namespace-mappings production:production --storage-class-mappings aws-ebs:tke-ssd --wait

关键参数:

  • --namespace-mappings:如果目标集群的命名空间不同,可重映射。
  • --storage-class-mappings:将源集群的StorageClass(如aws-ebs)映射为目标集群的StorageClass(如tke-ssd)。Velero会自动转换PV的StorageClass名称。

恢复完成后,检查Pod状态:kubectl get pods -n production。若一切正常,应用已成功在目标集群运行。

验证与常见问题

如何验证迁移完整性?

  • 资源对比:用velero backup describe查看备份的资源列表,与目标集群对比。
  • 数据校验:进入Pod检查PV内的文件是否与源一致,或通过数据库工具验证。
  • 平滑割接:恢复前暂停源集群的写入,恢复后更新DNS指向目标集群。

常见问题处理

  • 备份慢:文件级备份依赖节点上的Kopia容器,遇到大量小文件时较慢。建议先排除不必要的数据(如临时日志)。
  • 恢复后Pod CrashLoopBackOff:可能是StorageClass映射错误或PVC名称冲突。检查PV的AccessMode、容量是否一致。
  • 跨云网络延迟:S3桶若在海外,备份恢复速度可能受限于公网带宽。建议在源和目标集群就近区域创建存储桶,或使用对象存储的跨区域复制功能。

总结:Velero让跨云迁移不再头疼

容易忽略的细节

通过本文的实战演示,可以看到跨云迁移不再是高不可攀的挑战。Velero通过文件级备份加存储映射的方式,优雅地解决了云厂商之间的不兼容问题。只需一个公共对象存储桶,就能将整个K8s应用连同数据搬到任何Kubernetes集群。当然,生产环境迁移仍需谨慎,建议先在测试集群演练,确保业务无感知切换。

如果你还在为多云迁移方案发愁,不妨试试Velero——简单、强大、开源,值得加入你的运维工具箱。按这个顺序复查,跨云迁移遇到异常时也更容易定位。

延伸阅读