Velero 企业备份与异集群恢复

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。
本文缩写(英文全称与中文含义)
缩写 英文全称/名称 中文含义
AWS Amazon Web Services 亚马逊云服务
CLI Command-Line Interface 命令行接口
CPU Central Processing Unit 中央处理器
CRD Custom Resource Definition Kubernetes 自定义资源定义
CSI Container Storage Interface 容器存储接口
DNS Domain Name System 域名系统
GitOps GitOps 以 Git 保存期望状态、由自动化持续协调实际状态的运维方式
I/O Input/Output 输入/输出
IAM Identity and Access Management 身份与访问管理
IRSA IAM Roles for Service Accounts 通过 Kubernetes 服务账号关联 AWS IAM 角色
KMS Key Management Service 密钥管理服务
PVC Persistent Volume Claim 持久卷申领
RDS Relational Database Service AWS 关系型数据库服务
RPO Recovery Point Objective 恢复点目标,可接受的数据丢失时间范围
RTO Recovery Time Objective 恢复时间目标,可接受的恢复耗时
S3 Simple Storage Service AWS 对象存储服务
SA Service Account 服务账号,供程序或工作负载使用的身份
SQL Structured Query Language 结构化查询语言
SQS Simple Queue Service AWS 消息队列服务
VPC Virtual Private Cloud 虚拟私有云网络

场景:保护 orders 的对象和 CSI 卷,将卷数据移到独立 S3 备份存储,并在隔离集群恢复。前置:基线、CSI、VolumeSnapshot、已建目标集群。外部 RDS/Cloud SQL、SQS/Pub/Sub、DNS、IAM 和镜像仓库另外备份/重建。

先区分保护范围#

  • 只备份对象:不能恢复卷中的业务文件。
  • CSI snapshot:数据可能仍在原云账户/区域,不能当成 S3 中已有完整副本。
  • CSI snapshot data movement:把快照数据搬到 backup storage,需 node-agent、目标存储和恢复验证。

本例选择第三种。Velero 1.14+ CSI 已并入核心,不再额外装旧 CSI 插件;固定 Velero/AWS plugin/CLI 的兼容组合。CSI、Data movement

Hands-on:安装与首份备份#

备份桶独立于业务资源,开启加密/版本控制、限制访问;跨账户复制/不可变保留由企业备份策略实施并验证与 Velero 清理行为兼容。创建 velero/velero IRSA:仅备份 prefix 的对象读写/必要删除、桶查询和指定 KMS;CSI 云快照权限由 CSI 角色承担。参考 AWS plugin 权限。

export VELERO_VERSION='vREPLACE_VERSION'
export AWS_PLUGIN_IMAGE='velero/velero-plugin-for-aws:REPLACE_COMPATIBLE_VERSION'
export BACKUP_BUCKET='REPLACE_BUCKET'
export AWS_REGION='REPLACE_REGION'
export VELERO_ROLE_ARN='REPLACE_ROLE_ARN'
# Velero CLI 需与 server 对齐;首先渲染,审阅 RBAC、镜像、资源和身份。
velero install --provider aws --image "velero/velero:$VELERO_VERSION" --plugins "$AWS_PLUGIN_IMAGE" --bucket "$BACKUP_BUCKET" --prefix orders-staging --backup-location-config "region=$AWS_REGION" --no-secret --sa-annotations "eks.amazonaws.com/role-arn=$VELERO_ROLE_ARN" --use-node-agent --features=EnableCSI --use-volume-snapshots=false --dry-run -o yaml > velero-install.yaml
kubectl apply -f velero-install.yaml
velero backup-location get

--use-volume-snapshots=false 不配置 provider 原生 VolumeSnapshotLocation,本例走 CSI。核对所选版本支持的参数。node-agent 的 hostPath/特权需求与 Autopilot 等限制要提前确认;专用 namespace 安全例外只给必要组件。给队列、缓存/PVC、CPU/内存和备份并发设置上限,不能让备份把业务 I/O 压满。

将所选快照 Class 标记为该 driver 的唯一 Velero 默认;先按应用一致性流程完成静止写入或原生备份水位:

kubectl label volumesnapshotclass orders-retained velero.io/csi-volumesnapshot-class=true --overwrite
export BACKUP_NAME="orders-$(date -u +%Y%m%d%H%M%S)"
velero backup create "$BACKUP_NAME" --include-namespaces orders --snapshot-move-data --ttl 720h --wait
velero backup describe "$BACKUP_NAME" --details
velero backup logs "$BACKUP_NAME"
kubectl -n velero get datauploads

名称只能用 Kubernetes 允许的小写字符。要求 Backup phase 为 Completed(PartiallyFailed 不通过)、DataUpload 完成、无资源跳过、桶中可见对象;记录卷数、数据大小、水位、耗时。对账文件静止期间较长,可先在可确认快照完成时解除静止,再等待搬运完成;必须有自动超时解除/告警,不能无限停业务。

异集群恢复演练#

目标集群预先安装兼容 CRD/controller/CSI/StorageClass,恢复密钥访问权限。禁止 GitOps、ExternalDNS、CronJob、worker 自动接入原业务;目标 VPC/网络和身份从基础设施层阻断生产队列/支付,不能只靠应用约定。

目标 Velero 使用恢复专用身份和同一 bucket/prefix,BackupStorageLocation 配为 ReadOnly,防止恢复端创建/删除备份;它不是云 IAM 只读策略。仓库访问权限按固定版本的数据搬运器要求验证,KMS 解密、目标卷创建另授权。操作参照 Velero 灾备流程。等待备份同步可见:

# 已切换到隔离恢复集群;再次确认 context。
kubectl config current-context
kubectl -n velero patch backupstoragelocation default --type merge -p '{"spec":{"accessMode":"ReadOnly"}}'
velero backup get
export RESTORE_NAME="${BACKUP_NAME}-dr"
velero restore create "$RESTORE_NAME" --from-backup "$BACKUP_NAME" --namespace-mappings orders:orders-dr --wait
velero restore describe "$RESTORE_NAME" --details
kubectl -n velero get datadownloads
kubectl -n orders-dr get pods,pvc

命名空间映射不会重写所有应用内 hostname、SA trust、ExternalSecret、webhook 引用和外部系统地址;恢复前用资源过滤/restore modifier 定义这些映射,并先在隔离目标验证。存储 driver/StorageClass 改变时另配置映射,不能期待跨云快照直接挂载。

恢复成功不以 Pod Running 为准:验证实际文件校验和、业务批次/金额/数据库水位,运行读写和幂等测试,记录实测 RPO/RTO;不合格则回到备份设计修复。

调度、告警、清理#

首份恢复通过后,创建同样 include/filter/data-movement 的 Schedule,频率按数据 RPO 和成本测算;别把手工一致性步骤遗漏在定时备份外。告警覆盖最后成功备份时间、Partial/Failed、DataUpload 卡住、仓库维护和容量。

Velero 删除/过期备份可能清理其 CSI 快照,不能仅凭 Class Retain 认定永久保留。演练删除前确认合规保留和独立副本;灾难中先只读恢复,避免新集群错误清理旧备份。不要用全量恢复覆盖仍在写入的生产 namespace。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭