4. Velero 安装配置:使用 Helm 部署 Velero、配置 MinIO 作为备份存储、验证安装状态
本章将指导你使用 Helm 3 在生产环境中部署 Velero,并配置 MinIO 作为 S3 兼容的备份后端。完成部署后,通过一系列验证命令确认组件运行正常、存储连接可用,为后续的蓝绿发布灾备演练奠定基础。
4.1 环境准备与前置检查
在部署 Velero 之前,请确保集群满足以下条件:
| 检查项 | 要求 | 验证命令 |
|---|---|---|
| Kubernetes 版本 | ≥ 1.16 | kubectl version --short |
| Helm 版本 | ≥ 3.8.0 | helm version |
| 集群节点 | ≥ 3 个 worker 节点 | kubectl get nodes |
| MinIO 服务 | 已部署且可访问 | curl -I http://minio-endpoint:9000 |
| DNS 解析 | 集群内可解析 MinIO 域名 | kubectl run -it --rm dns-test --image=busybox -- nslookup minio.minio.svc.cluster.local |
推荐实践:建议在独立的
velero-system 命名空间中部署 Velero,与业务命名空间隔离,便于权限管理和灾备策略的独立运维。
4.2 使用 Helm 部署 Velero
Velero 官方 Helm Chart 托管在 VMware Tanzu 仓库。以下是完整的部署步骤:
4.2.1 添加 Helm 仓库并更新
# 添加 Velero Helm 仓库
helm repo add vmware-tanzu https://vmware-tanzu.github.io/helm-charts
# 更新仓库索引
helm repo update
# 查看可用的 Velero Chart 版本
helm search repo vmware-tanzu/velero --versions
4.2.2 创建 MinIO 访问凭证 Secret
Velero 需要访问 MinIO 的 Access Key 和 Secret Key。创建一个包含凭证的 Secret 文件:
# 创建 MinIO 凭证文件(示例值,生产环境请替换为实际密钥)
cat > credentials-velero <<EOF
[default]
aws_access_key_id = minioadmin
aws_secret_access_key = minioadmin
EOF
# 在 velero-system 命名空间中创建 Secret
kubectl create namespace velero-system
kubectl create secret generic cloud-credentials \
--namespace velero-system \
--from-file=cloud=credentials-velero
安全提醒:切勿将 MinIO 凭证硬编码在 Helm values 文件中。始终使用 Kubernetes Secret 管理敏感信息,并考虑使用 Sealed Secrets 或 External Secrets Operator 进行加密存储。
4.2.3 准备 Helm Values 配置文件
创建 velero-values.yaml 文件,配置 MinIO 作为备份存储:
# velero-values.yaml
namespace: velero-system
configuration:
provider: aws
backupStorageLocation:
- name: default
provider: aws
bucket: velero-backups
config:
region: minio
s3ForcePathStyle: "true"
s3Url: http://minio.minio.svc.cluster.local:9000
publicUrl: http://minio.minio.svc.cluster.local:9000
volumeSnapshotLocation:
- name: default
provider: aws
config:
region: minio
s3ForcePathStyle: "true"
s3Url: http://minio.minio.svc.cluster.local:9000
credentials:
useSecret: true
name: cloud-credentials
initContainers:
- name: velero-plugin-for-aws
image: velero/velero-plugin-for-aws:v1.7.0
volumeMounts:
- mountPath: /target
name: plugins
deployNodeAgent: true
nodeAgent:
podVolumePath: /var/lib/kubelet/pods
privileged: true
metrics:
enabled: true
serviceMonitor:
enabled: false
schedules:
# 可选:创建默认备份计划
# daily-backup:
# schedule: "0 2 * * *"
# template:
# ttl: "720h"
4.2.4 执行 Helm 安装
# 使用 Helm 安装 Velero
helm install velero vmware-tanzu/velero \
--namespace velero-system \
--values velero-values.yaml \
--version 5.1.0
# 查看部署状态
helm status velero -n velero-system
4.3 验证安装状态
部署完成后,通过以下步骤全面验证 Velero 组件运行状态和存储连接:
4.3.1 检查 Pod 运行状态
# 查看 Velero 相关 Pod
kubectl get pods -n velero-system -l app.kubernetes.io/name=velero
# 预期输出示例:
# NAME READY STATUS RESTARTS AGE
# velero-7d8b9c6f8f-abc12 1/1 Running 0 2m
# node-agent-5x4k7 1/1 Running 0 2m
# node-agent-9m2n3 1/1 Running 0 2m
# node-agent-3p1q8 1/1 Running 0 2m
4.3.2 验证 Backup Storage Location
# 查看 Velero 备份存储位置状态
velero backup-location get
# 预期输出示例:
# NAME PROVIDER BUCKET/PATH PHASE LAST VALIDATED
# default aws velero-backups Available 2024-01-15 10:30:00 +0000 UTC
关键指标:PHASE 字段必须为
Available,表示 Velero 成功连接到 MinIO 并验证了存储桶的可读写性。如果显示 Unavailable,请检查网络连通性和凭证配置。
4.3.3 验证 Volume Snapshot Location
# 查看卷快照位置状态
velero snapshot-location get
# 预期输出示例:
# NAME PROVIDER PHASE
# default aws Available
4.3.4 执行测试备份验证端到端连通性
# 创建一个测试备份(不包含实际卷快照)
velero backup create test-backup --include-namespaces default --ttl 24h
# 查看备份状态
velero backup get
# 查看备份日志(确认无错误)
velero backup logs test-backup | tail -20
# 清理测试备份
velero backup delete test-backup --confirm
4.4 Velero 组件架构与数据流
下图展示了 Velero 部署后的核心组件及其与 MinIO 的交互关系:
4.5 常见问题排查
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| BackupLocation 显示 Unavailable | MinIO 网络不可达或凭证错误 | 检查 s3Url 是否正确;验证 Secret 中的凭证与 MinIO 一致;使用 kubectl exec 进入 Velero Pod 测试连通性 |
| Velero Pod CrashLoopBackOff | 插件版本不兼容或配置错误 | 查看 Pod 日志 kubectl logs -n velero-system velero-xxxx;确认 initContainers 中的插件版本与 Velero 版本匹配 |
| 备份成功但恢复失败 | 卷快照存储位置未正确配置 | 执行 velero snapshot-location get 确认状态;检查 MinIO 桶是否存在且可写 |
| Node Agent 未就绪 | 特权模式未启用或卷挂载路径错误 | 确认 deployNodeAgent: true;检查 podVolumePath 是否匹配集群 kubelet 路径 |
4.6 部署后配置检查清单
完成部署后,使用以下清单逐项确认配置正确性:
- 命名空间隔离:Velero 组件运行在
velero-system命名空间,与业务资源分离。 - 存储桶存在性:MinIO 中已创建
velero-backups桶,且权限正确。 - 凭证安全:MinIO 凭证存储在 Kubernetes Secret 中,未明文出现在 ConfigMap 或 Helm values 中。
- 插件加载:AWS 插件作为 initContainer 成功加载,Velero 日志中无插件相关错误。
- 备份位置可用:
velero backup-location get输出 PHASE 为Available。 - 快照位置可用:
velero snapshot-location get输出 PHASE 为Available。 - 测试备份通过:执行测试备份后,
velero backup get显示状态为Completed。 - 日志无异常:检查 Velero 主控制器和 Node Agent 的日志,无 ERROR 或 FATAL 级别输出。
生产建议:将上述检查清单集成到 CI/CD 流水线中,每次 Velero 升级或配置变更后自动执行验证,确保灾备基础设施始终处于健康状态。