3. Velero 安装与配置:Helm安装、MinIO/S3兼容存储配置、RBAC权限设置、Velero CLI安装
Velero 的安装与配置是灾备体系落地的第一步。本章围绕生产级部署所需的核心组件展开:使用 Helm 进行声明式安装、对接 MinIO 作为 S3 兼容的后端存储、配置最小权限的 RBAC 策略,以及安装 Velero CLI 用于日常操作。以下内容按实际部署顺序组织,确保每一步都可独立验证。
3.1 整体架构与组件关系
在开始安装之前,理解 Velero 各组件的协作关系至关重要。下图展示了 Velero 在 Kubernetes 集群中的部署架构,包括控制平面组件、存储后端以及 CLI 工具的交互路径。
3.2 部署 MinIO 作为 S3 兼容存储后端
MinIO 是生产环境中广泛使用的 S3 兼容对象存储,适合在本地或私有云环境中为 Velero 提供后端存储。以下步骤在 Kubernetes 集群内部署 MinIO。
3.2.1 创建 MinIO 部署与 Service
# 创建命名空间
kubectl create namespace minio
# 创建 MinIO 部署
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: minio
namespace: minio
spec:
replicas: 1
selector:
matchLabels:
app: minio
template:
metadata:
labels:
app: minio
spec:
containers:
- name: minio
image: quay.io/minio/minio:latest
args:
- server
- /data
- --console-address
- ":9001"
env:
- name: MINIO_ROOT_USER
value: "admin"
- name: MINIO_ROOT_PASSWORD
value: "password123"
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: minio
namespace: minio
spec:
type: ClusterIP
ports:
- port: 9000
targetPort: 9000
name: api
- port: 9001
targetPort: 9001
name: console
selector:
app: minio
EOF
3.2.2 创建 Bucket 与访问凭证
MinIO 启动后,需要创建 Velero 专用的 Bucket 和访问密钥。使用 MinIO Client(mc)或直接通过 API 完成初始化。
# 使用 mc 客户端配置 MinIO
kubectl run mc --image=minio/mc --rm -it --restart=Never -- \
/bin/sh -c "
mc alias set myminio http://minio.minio.svc.cluster.local:9000 admin password123
mc mb myminio/velero
mc admin user add myminio velero-user velero-secret-key
mc admin policy set myminio readwrite user=velero-user
"
3.3 使用 Helm 安装 Velero
Helm 是部署 Velero 的推荐方式,支持参数化配置和版本管理。以下步骤使用 Helm 3 安装 Velero,并配置 MinIO 作为后端存储。
3.3.1 添加 Helm 仓库并准备配置
# 添加 Velero Helm 仓库
helm repo add vmware-tanzu https://vmware-tanzu.github.io/helm-charts
helm repo update
# 创建 Velero 命名空间
kubectl create namespace velero
# 创建存储凭证 Secret
kubectl create secret generic velero-minio-credentials \
--namespace velero \
--from-literal=aws_access_key_id=velero-user \
--from-literal=aws_secret_access_key=velero-secret-key
3.3.2 使用 Helm 安装 Velero
helm install velero vmware-tanzu/velero \
--namespace velero \
--set-file credentials.secretContents.cloud=velero-minio-credentials \
--set configuration.provider=aws \
--set configuration.backupStorageLocation.name=default \
--set configuration.backupStorageLocation.bucket=velero \
--set configuration.backupStorageLocation.config.region=minio \
--set configuration.backupStorageLocation.config.s3Url=http://minio.minio.svc.cluster.local:9000 \
--set configuration.backupStorageLocation.config.publicUrl=http://minio.minio.svc.cluster.local:9000 \
--set configuration.backupStorageLocation.config.kmsKeyId= \
--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
provider=aws:Velero 使用 AWS S3 API 协议与 MinIO 通信,MinIO 完全兼容 S3 接口。s3Url:指定 MinIO 服务的内部 DNS 地址,确保集群内网络可达。initContainers:加载 Velero 的 AWS 插件,使 Velero 能够识别 S3 兼容存储。backupStorageLocation:定义备份数据的存储位置,可配置多个 Location 实现异地灾备。
3.4 RBAC 权限设置
Velero 需要访问 Kubernetes API 资源来执行备份和恢复操作。Helm 安装时会自动创建 ServiceAccount 和 ClusterRole,但生产环境中建议按最小权限原则进行定制。
3.4.1 默认 RBAC 资源清单
| 资源类型 | 名称 | 作用域 | 权限说明 |
|---|---|---|---|
| ServiceAccount | velero | velero 命名空间 | Velero 控制器使用的身份 |
| ClusterRole | velero-server | 集群级别 | 对 Pod、PVC、Namespace 等资源的读写权限 |
| ClusterRoleBinding | velero-server | 集群级别 | 将 velero ServiceAccount 绑定到 velero-server ClusterRole |
| Role | velero-server | velero 命名空间 | 对 Velero 自身 ConfigMap、Secrets 的管理权限 |
| RoleBinding | velero-server | velero 命名空间 | 命名空间级别的权限绑定 |
3.4.2 自定义 RBAC 配置示例
如果需要对 Velero 的权限进行限制(例如仅允许备份特定命名空间),可以创建自定义 ClusterRole 并绑定。
# 创建限制范围的 ClusterRole
cat <<EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: velero-restricted
rules:
- apiGroups: [""]
resources: ["pods", "persistentvolumeclaims", "namespaces"]
verbs: ["get", "list", "watch", "create", "delete"]
- apiGroups: ["velero.io"]
resources: ["backups", "restores", "schedules"]
verbs: ["*"]
EOF
# 绑定到 velero ServiceAccount
kubectl create clusterrolebinding velero-restricted-binding \
--clusterrole=velero-restricted \
--serviceaccount=velero:velero
kubectl auth can-i --list --as=system:serviceaccount:velero:velero 命令检查 Velero 的实际权限范围,确保最小权限原则得到落实。
3.5 安装 Velero CLI
Velero CLI 是管理员执行备份、恢复和状态检查的主要工具。CLI 通过 kubeconfig 与集群通信,不直接依赖 Velero 控制器。
3.5.1 下载与安装
# Linux 环境安装
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/
rm -rf velero-v1.14.0-linux-amd64*
# macOS 环境安装
brew install velero
# 验证安装
velero version
3.5.2 CLI 配置与验证
CLI 默认使用当前 kubeconfig 的上下文连接集群。安装完成后,可以通过以下命令验证 Velero 控制器的状态和存储后端配置。
# 查看 Velero 控制器状态
velero get backup-locations
# 查看备份存储位置详情
velero backup-location get default -o yaml
# 查看 Velero 控制器日志
kubectl logs -n velero deployment/velero --tail=50
3.6 安装后验证清单
完成所有安装步骤后,建议按照以下清单进行验证,确保每个组件都正常工作。
| 验证项 | 验证命令 | 预期结果 |
|---|---|---|
| MinIO 服务可用 | kubectl get svc -n minio |
minio 服务 ClusterIP 正常,端口 9000 和 9001 就绪 |
| Velero Pod 运行 | kubectl get pods -n velero |
velero Pod 状态为 Running,READY 为 1/1 |
| Node Agent 运行 | kubectl get pods -n velero -l app.kubernetes.io/name=node-agent |
每个节点上有一个 Running 状态的 Pod |
| 备份存储位置就绪 | velero get backup-locations |
default 状态为 Available |
| CLI 版本匹配 | velero version |
Client 和 Server 版本一致 |
| RBAC 权限正确 | kubectl auth can-i list backups -n velero --as=system:serviceaccount:velero:velero |
返回 yes |
- 备份存储位置状态为 Unavailable:检查 MinIO 服务地址是否正确,以及 Secret 中的凭证是否匹配。使用
kubectl describe backupstoragelocation default -n velero查看错误详情。 - Velero Pod 启动失败:查看日志
kubectl logs -n velero deployment/velero,常见原因包括插件版本不兼容或存储后端连接超时。 - CLI 无法连接集群:确认 kubeconfig 上下文正确,且当前用户有权限访问 velero 命名空间。