3. Velero 基础安装与配置

本章将深入讲解 Velero 的核心组件架构,并指导你完成使用 MinIO 作为备份存储后端的完整安装流程,包括 Velero CLI 工具与 Server 组件的部署。这是后续所有灾备与蓝绿发布故障切换实验的基础。

3.1 Velero 组件架构

Velero 采用典型的 Client-Server 架构,由运行在 Kubernetes 集群内的 Server 组件和用户操作的 CLI 客户端组成。理解其组件交互是配置和排错的关键。

核心组件交互流程: 用户通过 velero CLI 发起备份/恢复请求 → Velero Server 的控制器监听 CRD 资源变化 → 调用 restic 或 kopia 进行卷快照 → 将备份数据上传至配置的存储后端(如 MinIO)。
Velero 组件架构图 Velero 组件架构与数据流 velero CLI K8s API Server Velero Server (Deployment + Controller) Backup / Restore CRDs MinIO (S3) 节点卷 (PV/CSI) 说明: Velero 通过 CRD 扩展 Kubernetes API,所有操作声明式定义。 卷快照支持 CSI 和内置的 restic/kopia 两种模式。

3.2 使用 MinIO 作为备份存储后端

MinIO 是一个高性能、兼容 S3 协议的对象存储系统,非常适合在本地或私有云环境中作为 Velero 的备份存储后端。在生产环境中,你可以替换为 AWS S3、GCS 或 Azure Blob Storage。

3.2.1 部署 MinIO

以下步骤将在 Kubernetes 集群中部署 MinIO 实例,并创建用于 Velero 访问的 Access Key 和 Secret Key。

  1. 创建命名空间: kubectl create namespace velero
  2. 部署 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。

Velero 安装验证流程图 Velero 安装验证流程 1. 部署 MinIO 2. 安装 CLI 3. 安装 Server 4. 验证 Pod & BSL 验证通过后,即可进行首次备份测试。确保 velero backup-location get 显示 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 不存在。