4. Velero 安装与配置:CLI、Helm Chart 与 MinIO/S3 存储后端

本章聚焦 Velero 在生产环境中的完整安装链路:CLI 工具用于日常运维与手动触发备份,Helm Chart 用于声明式部署控制平面组件,MinIO/S3 兼容存储作为备份数据的持久化后端。三者协同构成灾备准入测试的基础设施层。

4.1 Velero CLI 安装

Velero CLI 是操作备份/恢复任务的核心客户端,支持 Linux、macOS 与 Windows。以下以 Linux amd64 为例:

# 下载最新稳定版(v1.14.x 系列)
wget https://github.com/vmware-tanzu/velero/releases/download/v1.14.1/velero-v1.14.1-linux-amd64.tar.gz

# 解压并安装到系统路径
tar -xzf velero-v1.14.1-linux-amd64.tar.gz
sudo mv velero-v1.14.1-linux-amd64/velero /usr/local/bin/

# 验证安装
velero version --client-only
版本对齐建议:CLI 版本必须与后续 Helm Chart 部署的 server 版本一致,否则可能出现 API 不兼容。建议统一使用 v1.14.x 系列。

4.2 Helm Chart 部署 Velero 控制平面

使用 Helm 3 部署 Velero 到目标集群,推荐将配置参数写入 values 文件以便版本化管理。

4.2.1 添加 Helm 仓库

helm repo add vmware-tanzu https://vmware-tanzu.github.io/helm-charts
helm repo update

4.2.2 创建命名空间与存储密钥

MinIO 访问凭证以 Secret 形式注入 Velero 部署:

kubectl create namespace velero

# 创建 MinIO 访问密钥 Secret(示例凭据,生产环境需替换)
kubectl -n velero create secret generic velero-minio-credentials \
  --from-literal=aws_access_key_id=minioadmin \
  --from-literal=aws_secret_access_key=minioadmin

4.2.3 准备 values 文件

以下为生产级 values.yaml 核心配置片段:

configuration:
  provider: aws
  backupStorageLocation:
    - name: default
      provider: aws
      bucket: velero-backups
      config:
        region: us-east-1
        s3ForcePathStyle: "true"
        s3Url: http://minio.minio-system.svc:9000
  volumeSnapshotLocation:
    - name: default
      provider: aws
      config:
        region: us-east-1
  extraEnvVars:
    - name: AWS_SHARED_CREDENTIALS_FILE
      value: /credentials/cloud

credentials:
  useSecret: true
  secretContents:
    cloud: |
      [default]
      aws_access_key_id = minioadmin
      aws_secret_access_key = minioadmin

initContainers:
  - name: velero-plugin-for-aws
    image: velero/velero-plugin-for-aws:v1.10.0
    volumeMounts:
      - mountPath: /target
        name: plugins

serviceAccount:
  server:
    create: true
    name: velero-server

4.2.4 执行部署

helm upgrade --install velero vmware-tanzu/velero \
  --namespace velero \
  --values values.yaml \
  --version 7.1.0
关键检查点:部署完成后,务必确认 velero Pod 处于 Running 状态,且 velero backup-location get 返回的存储后端状态为 Available。

4.3 MinIO/S3 存储后端配置

MinIO 作为 S3 兼容对象存储,是 Velero 最常用的本地测试后端。以下为部署与对接要点。

4.3.1 MinIO 部署(Kubernetes 内)

# 使用 Helm 部署 MinIO 到 minio-system 命名空间
helm repo add minio https://charts.min.io/
helm upgrade --install minio minio/minio \
  --namespace minio-system --create-namespace \
  --set rootUser=minioadmin,rootPassword=minioadmin \
  --set persistence.size=50Gi \
  --set buckets[0].name=velero-backups,buckets[0].policy=public

4.3.2 存储后端参数对照表

参数 MinIO 值 AWS S3 值 说明
provider aws aws Velero 统一使用 aws 插件
s3Url http://minio.minio-system.svc:9000 https://s3.amazonaws.com MinIO 需显式指定 endpoint
s3ForcePathStyle true false MinIO 必须启用 path-style
region us-east-1 实际区域 MinIO 忽略 region 值
bucket velero-backups 自定义桶名 需提前创建

4.3.3 验证存储后端连通性

# 创建测试备份以验证后端写入
velero backup create test-backup --include-namespaces default

# 查看备份状态
velero backup get

# 预期输出:test-backup 状态为 Completed
架构要点:MinIO 部署在同一集群内时,建议使用 ClusterIP Service 通信,避免网络延迟与安全策略干扰。跨集群场景则需暴露 NodePort 或 Ingress,并配置 TLS。

4.4 安装架构总览

下图展示 Velero 控制平面、MinIO 存储后端与目标集群之间的组件关系与数据流:

Velero 安装架构:控制平面与 MinIO 存储后端 velero CLI Helm Chart Velero Server (Deployment in velero NS) MinIO (StatefulSet in minio NS) 目标集群 (被备份的 K8s 资源) kubectl/API 部署/升级 S3 API K8s API 读取 数据流说明: 1. CLI/Helm 将 Velero Server 部署到集群 velero 命名空间 2. Velero Server 通过 K8s API 读取目标集群资源清单 3. 备份数据通过 S3 兼容协议写入 MinIO 桶 velero-backups

4.5 安装后验证清单

完成部署后,按以下清单逐项确认:

检查项 验证命令 预期结果
Pod 状态 kubectl -n velero get pods velero-xxx 为 Running
存储后端可用 velero backup-location get STATUS 列为 Available
快照位置可用 velero snapshot-location get STATUS 列为 Available
测试备份 velero backup create test --ttl 1h 备份状态为 Completed
MinIO 对象存在 MinIO Console 或 mc 客户端 velero-backups 桶内有备份数据
生产建议:MinIO 应配置 persistence.storageClass 为高可用存储类,并设置 replicas: 4 以保障数据冗余。Velero 的 backupSyncPeriod 建议设为 30s,以快速感知新备份。