3. Velero安装与配置

3.1 安装前准备:环境与权限检查

在部署 Velero 之前,需要确认 Kubernetes 集群版本、kubectl 上下文以及 Helm 版本均满足要求。以下为最低环境要求清单:

组件 最低版本 推荐版本 备注
Kubernetes 1.16 1.24+ 需支持 CSI 快照
Helm 3.2 3.10+ 需支持 OCI 仓库
kubectl 1.18 1.24+ 与集群版本匹配
对象存储 — MinIO / AWS S3 需提前创建 Bucket
操作前确认:执行 kubectl cluster-info 确认集群可达;执行 helm version 确认 Helm 版本;确保目标对象存储 Bucket 已创建且网络可达。

3.2 添加 Helm 仓库与更新索引

Velero 官方 Helm Chart 托管在 VMware 维护的仓库中。使用以下命令添加并更新:

# 添加 Velero Helm 仓库
helm repo add vmware-tanzu https://vmware-tanzu.github.io/helm-charts

# 更新本地索引
helm repo update

# 搜索可用版本(可选)
helm search repo vmware-tanzu/velero --versions
版本锁定建议:生产环境应指定 Chart 版本号,例如 --version 5.1.0,避免自动升级导致配置不兼容。

3.3 配置对象存储凭证

Velero 需要访问对象存储的凭证才能读写备份数据。根据存储后端类型,凭证文件格式不同。

3.3.1 MinIO 凭证配置

MinIO 使用兼容 S3 的 Access Key / Secret Key。创建 credentials-velero 文件:

[default]
aws_access_key_id = minioadmin
aws_secret_access_key = minioadmin

将凭证文件创建为 Kubernetes Secret:

kubectl create namespace velero
kubectl create secret generic cloud-credentials \
  --namespace velero \
  --from-file=cloud=credentials-velero

3.3.2 AWS S3 凭证配置

对于 AWS S3,推荐使用 IAM 用户或 IAM Role for Service Account(IRSA)。凭证文件格式相同:

[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
安全警告:切勿将生产环境密钥硬编码在脚本中。使用 IRSA 或外部密钥管理服务(如 Vault)是更安全的选择。

3.4 使用 Helm 安装 Velero

根据存储后端不同,Helm 安装命令的参数有所差异。以下分别给出 MinIO 和 AWS S3 的典型配置。

3.4.1 安装至 MinIO

helm install velero vmware-tanzu/velero \
  --namespace velero \
  --create-namespace \
  --set configuration.provider=aws \
  --set configuration.backupStorageLocation.name=default \
  --set configuration.backupStorageLocation.bucket=velero-backup \
  --set configuration.backupStorageLocation.config.region=minio \
  --set configuration.backupStorageLocation.config.s3Url=http://minio.minio:9000 \
  --set configuration.backupStorageLocation.config.publicUrl=http://minio.minio:9000 \
  --set configuration.backupStorageLocation.config.s3ForcePathStyle=true \
  --set snapshotsEnabled=false \
  --set initContainers[0].name=velero-plugin-for-aws \
  --set initContainers[0].image=velero/velero-plugin-for-aws:v1.7.0 \
  --set initContainers[0].volumeMounts[0].mountPath=/target \
  --set initContainers[0].volumeMounts[0].name=plugins

3.4.2 安装至 AWS S3

helm install velero vmware-tanzu/velero \
  --namespace velero \
  --create-namespace \
  --set configuration.provider=aws \
  --set configuration.backupStorageLocation.name=default \
  --set configuration.backupStorageLocation.bucket=my-velero-bucket \
  --set configuration.backupStorageLocation.config.region=us-west-2 \
  --set snapshotsEnabled=true \
  --set deployNodeAgent=true \
  --set initContainers[0].name=velero-plugin-for-aws \
  --set initContainers[0].image=velero/velero-plugin-for-aws:v1.7.0 \
  --set initContainers[0].volumeMounts[0].mountPath=/target \
  --set initContainers[0].volumeMounts[0].name=plugins
参数说明:s3ForcePathStyle=true 是 MinIO 等非 AWS 兼容存储的必需参数;snapshotsEnabled 控制是否启用卷快照功能,需要集群支持 VolumeSnapshotClass。

3.5 验证安装状态

安装完成后,通过以下步骤验证 Velero 组件是否正常运行。

3.5.1 检查 Pod 状态

kubectl get pods -n velero

# 期望输出示例:
# NAME                     READY   STATUS    RESTARTS   AGE
# velero-7d8b6f8b9c-abc12   1/1     Running   0          2m

3.5.2 检查 BackupStorageLocation 状态

kubectl get backupstoragelocation -n velero

# 期望输出示例:
# NAME      PHASE       LAST VALIDATED   AGE
# default   Available   10s              2m

如果 Phase 为 Available,表示 Velero 已成功连接到对象存储。

3.5.3 执行测试备份

velero backup create test-backup --include-namespaces default

# 查看备份状态
velero backup describe test-backup
验证要点:备份完成后,登录 MinIO 控制台或 AWS S3 控制台,确认 Bucket 中已生成 backups/test-backup/ 目录及对应的 JSON 和 tar 文件。

3.6 安装架构与数据流

下图展示了 Velero 安装后的核心组件关系及备份数据流:

Velero 安装架构与备份数据流 Kubernetes 集群 Velero Server (控制器) Node Agent (卷快照) Plugin Init (AWS/MinIO) kubectl / velero CLI 对象存储后端 MinIO (S3 兼容) AWS S3 (云原生) Bucket 备份文件 数据流方向 实线:控制流 / 虚线:数据流

3.7 常见安装问题与排查

问题现象 可能原因 排查命令 / 解决方案
Pod 处于 CrashLoopBackOff 凭证 Secret 未正确挂载或格式错误 kubectl logs -n velero velero-xxx 查看日志;检查 Secret 名称与挂载路径
BackupStorageLocation 状态为 Unavailable 对象存储网络不可达或 Bucket 不存在 kubectl describe backupstoragelocation -n velero 查看错误信息;测试网络连通性
备份失败:InvalidAccessKeyId 凭证密钥错误或过期 重新生成密钥并更新 Secret;检查 IAM 权限策略
卷快照未创建 VolumeSnapshotClass 未配置或 CSI 驱动未安装 kubectl get volumesnapshotclass 检查;安装对应 CSI 驱动
生产环境建议:安装完成后立即执行一次测试备份与恢复,验证整个数据链路的完整性。不要等到真正需要恢复时才发现配置错误。