3. Velero 基础安装与配置
本章将深入讲解 Velero 的核心组件架构,并指导你完成使用 MinIO 作为备份存储后端的完整安装流程,包括 Velero CLI 工具与 Server 组件的部署。这是后续所有灾备与蓝绿发布故障切换实验的基础。
3.1 Velero 组件架构
Velero 采用典型的 Client-Server 架构,由运行在 Kubernetes 集群内的 Server 组件和用户操作的 CLI 客户端组成。理解其组件交互是配置和排错的关键。
velero CLI 发起备份/恢复请求 → Velero Server 的控制器监听 CRD 资源变化 → 调用 restic 或 kopia 进行卷快照 → 将备份数据上传至配置的存储后端(如 MinIO)。
3.2 使用 MinIO 作为备份存储后端
MinIO 是一个高性能、兼容 S3 协议的对象存储系统,非常适合在本地或私有云环境中作为 Velero 的备份存储后端。在生产环境中,你可以替换为 AWS S3、GCS 或 Azure Blob Storage。
3.2.1 部署 MinIO
以下步骤将在 Kubernetes 集群中部署 MinIO 实例,并创建用于 Velero 访问的 Access Key 和 Secret Key。
- 创建命名空间:
kubectl create namespace velero - 部署 MinIO 应用: 使用以下 YAML 部署一个单实例 MinIO。
# minio-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: minio
namespace: velero
spec:
replicas: 1
selector:
matchLabels:
app: minio
template:
metadata:
labels:
app: minio
spec:
containers:
- name: minio
image: minio/minio:latest
args:
- server
- /data
env:
- name: MINIO_ACCESS_KEY
value: "minioadmin"
- name: MINIO_SECRET_KEY
value: "minioadmin123"
ports:
- containerPort: 9000
volumeMounts:
- name: storage
mountPath: /data
volumes:
- name: storage
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: minio
namespace: velero
spec:
ports:
- port: 9000
targetPort: 9000
selector:
app: minio
emptyDir,重启后数据会丢失。生产环境应替换为 PersistentVolumeClaim 或使用外部 MinIO 集群。
3.2.2 创建 MinIO Bucket 与访问凭证
Velero 需要知道存储桶名称以及访问 MinIO 的密钥。我们将在 MinIO 中创建一个专用 Bucket,并将凭证存储为 Kubernetes Secret。
| 配置项 | 值 | 说明 |
|---|---|---|
| Bucket 名称 | velero-backup |
用于存储所有备份数据的容器 |
| Access Key | minioadmin |
MinIO 用户身份标识 |
| Secret Key | minioadmin123 |
MinIO 用户密码 |
| S3 Endpoint | http://minio.velero.svc.cluster.local:9000 |
集群内部访问 MinIO 的地址 |
使用 MinIO 客户端 mc 或直接通过 Web UI 创建 Bucket。然后,创建 Velero 所需的 Secret 文件:
# credentials-velero
[default]
aws_access_key_id = minioadmin
aws_secret_access_key = minioadmin123
将该文件保存为 credentials-velero,后续安装 Velero 时会用到。
3.3 安装 Velero CLI 与 Server
安装分为两步:首先在本地机器安装 velero CLI 工具,然后使用该 CLI 在 Kubernetes 集群中部署 Velero Server。
3.3.1 安装 Velero CLI
根据你的操作系统选择对应的安装方式:
- macOS (Homebrew):
brew install velero - Linux (二进制下载):
# 下载最新版本
wget https://github.com/vmware-tanzu/velero/releases/download/v1.13.0/velero-v1.13.0-linux-amd64.tar.gz
# 解压并移动到 PATH
tar -xzf velero-v1.13.0-linux-amd64.tar.gz
sudo mv velero-v1.13.0-linux-amd64/velero /usr/local/bin/
验证安装:velero version --client-only,应输出客户端版本信息。
3.3.2 使用 CLI 安装 Velero Server
执行以下命令,指定 MinIO 作为备份存储后端:
velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.9.0 \
--bucket velero-backup \
--secret-file ./credentials-velero \
--backup-location-config region=minio,s3ForcePathStyle=true,s3Url=http://minio.velero.svc.cluster.local:9000 \
--use-volume-snapshots=false \
--namespace velero
--provider aws:因为 MinIO 兼容 S3 协议,所以使用 AWS 插件。--plugins:指定用于 S3 兼容存储的插件镜像。--backup-location-config:必须设置s3ForcePathStyle=true以兼容 MinIO 的路径风格。--use-volume-snapshots=false:本课程初期暂不启用卷快照,后续章节会单独配置。
3.3.3 验证安装结果
安装完成后,检查 Velero 相关资源是否正常运行:
# 检查 Pod 状态
kubectl get pods -n velero
# 检查备份存储位置 (BackupStorageLocation)
velero backup-location get
# 检查 Velero Server 版本
velero version
预期输出应显示 velero Pod 处于 Running 状态,且 backup-location 状态为 Available。
3.4 配置检查清单
为确保后续实验顺利进行,请逐项核对以下配置:
| 检查项 | 命令/方法 | 预期结果 |
|---|---|---|
| MinIO Pod 运行中 | kubectl get pods -n velero -l app=minio |
Pod 状态为 Running |
| MinIO Service 可达 | kubectl run test --image=busybox --rm -it -- wget -O- http://minio.velero:9000 |
返回 MinIO 的 XML 响应 |
| Velero Pod 运行中 | kubectl get pods -n velero -l component=velero |
Pod 状态为 Running |
| 备份存储位置可用 | velero backup-location get |
STATUS 列为 Available |
| CLI 版本匹配 | velero version |
Client 与 Server 版本一致 |
backup-location 状态为 Unavailable,请检查 velero Pod 日志:kubectl logs -n velero deployment/velero。常见原因包括 Secret 凭证错误、MinIO 地址不可达或 Bucket 不存在。