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。