2. 环境准备:Kubernetes集群搭建要求、Velero CLI与Helm安装、MinIO对象存储部署

本章聚焦于搭建一套可用于生产级蓝绿发布与灾备演练的完整实验环境。我们将依次完成Kubernetes集群的规格选型与配置、Velero命令行工具与Helm Chart的安装,以及MinIO对象存储的部署。这套环境将作为后续所有回滚策略与灾备流程的底层基础设施。

2.1 Kubernetes集群搭建要求

Velero对Kubernetes集群的版本与存储后端有明确依赖。以下表格列出了推荐的生产级配置与最低实验配置,请根据实际资源选择。

配置项 生产推荐 实验/开发环境
Kubernetes版本 v1.27+ (稳定API) v1.25+
控制平面节点 3台 (高可用) 1台
工作节点 ≥3台 (8C/16G) ≥2台 (4C/8G)
容器运行时 containerd 1.6+ containerd 或 Docker
CSI驱动 必选 (快照支持) 可选 (文件系统备份)
网络插件 Calico / Cilium Flannel / Weave
DNS CoreDNS (默认) CoreDNS
关键检查点: 在部署Velero之前,务必确认集群已启用 DefaultStorageClass,并且所有工作节点可以访问MinIO或S3兼容存储的网络端点。使用 kubectl cluster-info 和 kubectl get nodes 验证集群健康状态。

2.2 Velero CLI与Helm安装

Velero提供两种安装方式:CLI二进制(用于日常管理)和 Helm Chart(用于声明式部署与版本管理)。建议两者都安装,CLI用于快速操作,Helm用于生产级持续部署。

2.2.1 安装Velero CLI

以下步骤适用于Linux/macOS环境。Windows用户请使用WSL2或下载对应exe文件。

# 下载最新稳定版Velero CLI
wget https://github.com/vmware-tanzu/velero/releases/download/v1.14.0/velero-v1.14.0-linux-amd64.tar.gz

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

# 验证安装
velero version --client-only
输出示例:
Client:
    Version: v1.14.0
    Git commit: xxxxxxx

2.2.2 使用Helm部署Velero服务端

Helm方式更适合GitOps流程。首先添加Velero官方Helm仓库,然后创建命名空间并部署。

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

# 创建命名空间
kubectl create namespace velero-system

# 使用Helm安装Velero(需提前准备好MinIO凭证)
helm install velero vmware-tanzu/velero \
  --namespace velero-system \
  --set configuration.provider=aws \
  --set configuration.backupStorageLocation.name=default \
  --set configuration.backupStorageLocation.bucket=velero-backups \
  --set configuration.backupStorageLocation.config.region=minio \
  --set configuration.backupStorageLocation.config.s3Url=http://minio.minio-system.svc:9000 \
  --set configuration.backupStorageLocation.config.publicUrl=http://minio.example.com:9000 \
  --set configuration.volumeSnapshotLocation.name=default \
  --set configuration.volumeSnapshotLocation.config.region=minio \
  --set initContainers[0].name=velero-plugin-for-aws \
  --set initContainers[0].image=velero/velero-plugin-for-aws:v1.9.0 \
  --set initContainers[0].volumeMounts[0].mountPath=/target \
  --set initContainers[0].volumeMounts[0].name=plugins \
  --set credentials.useSecret=true \
  --set credentials.secretContents.cloud="[default]\naws_access_key_id=minioadmin\naws_secret_access_key=minioadmin"
注意: 上述命令中的 s3Url 和 publicUrl 必须根据你的MinIO实际部署地址修改。生产环境中,secretContents 应通过外部密钥管理服务注入,避免明文写在Helm命令中。

2.3 MinIO对象存储部署

MinIO作为S3兼容的对象存储,是Velero备份与快照的核心后端。我们使用Helm Chart在Kubernetes集群内部署一个高可用的MinIO实例。

2.3.1 部署架构图

下图展示了MinIO在集群中的部署拓扑,以及Velero与MinIO之间的数据流关系。

MinIO部署架构与Velero数据流 MinIO部署架构与Velero数据流 Kubernetes 集群 Velero Pod velero-server (备份/恢复控制器) MinIO StatefulSet minio-0 / minio-1 (端口 9000 / 9001) S3 API (备份/恢复) PVC (持久卷) 存储桶数据 说明: • Velero通过S3兼容API将备份数据写入MinIO的指定存储桶。 • MinIO使用StatefulSet + PVC保证数据持久性,支持多副本高可用。

2.3.2 使用Helm部署MinIO

我们采用Bitnami的MinIO Helm Chart,它提供了生产级的高可用配置。

# 添加Bitnami仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

# 创建命名空间
kubectl create namespace minio-system

# 部署MinIO(单节点模式,适合实验环境)
helm install minio bitnami/minio \
  --namespace minio-system \
  --set mode=standalone \
  --set auth.rootUser=minioadmin \
  --set auth.rootPassword=minioadmin \
  --set persistence.size=20Gi \
  --set service.type=ClusterIP \
  --set service.ports.api=9000 \
  --set service.ports.console=9001
生产环境建议: 将 mode 改为 distributed,并设置 statefulset.replicaCount=4,同时配置 persistence.storageClass 为高性能SSD。此外,务必通过Ingress暴露MinIO Console(端口9001)用于管理。

2.3.3 验证MinIO与Velero连通性

部署完成后,执行以下步骤确认端到端连通性。

  1. 检查MinIO Pod状态:
kubectl get pods -n minio-system -l app.kubernetes.io/name=minio
  1. 创建Velero备份存储位置(BSL)测试:
velero backup-location create default \
  --provider aws \
  --bucket velero-backups \
  --config region=minio,s3Url=http://minio.minio-system.svc:9000 \
  --access-mode=ReadWrite
  1. 执行一次测试备份:
velero backup create test-backup --include-namespaces default --ttl 24h
  1. 查看备份状态:
velero backup get

如果备份状态显示 Completed,则说明环境准备成功。若出现 Failed,请检查MinIO的 s3Url 是否可达,以及凭证是否正确。

2.4 环境验证清单

在进入下一章之前,请逐项确认以下环境就绪状态。

检查项 验证命令 预期结果
集群节点就绪 kubectl get nodes 所有节点状态为 Ready
Velero CLI版本 velero version --client-only 显示v1.14.0或更高
Velero服务端运行 kubectl get pods -n velero-system velero Pod状态为 Running
MinIO服务运行 kubectl get pods -n minio-system minio Pod状态为 Running
备份存储位置可用 velero backup-location get 状态为 Available
测试备份成功 velero backup get test-backup 状态为 Completed
环境就绪标志: 当上述所有检查项均通过时,你的环境已完全具备执行蓝绿发布与灾备回滚实验的条件。接下来,我们将基于这套基础设施,设计并实施基于回滚策略的Velero蓝绿发布方案。