Kubernetes 默认不会替你保管数据。没有备份策略的集群,遇到误删或故障基本无解。本文用最常见、最稳的组合 Velero + MinIO 完成备份与恢复,覆盖安装、验证、备份与回滚,并补充数据卷备份的关键注意点。
一、为什么选 Velero + MinIO?
- 完全开源,不依赖云厂商对象存储。
- MinIO 部署轻量,Docker 一条命令即可启动。
- Velero 功能齐全:备份、恢复、迁移、定时任务都支持。
- 数据可控,备份落在自建对象存储,便于合规与成本管理。
二、整体架构与流程
Velero 负责采集 Kubernetes 资源清单与(可选)数据卷快照,并将备份写入 MinIO。恢复时从 MinIO 拉取备份并重建资源。
三、部署 MinIO(Docker 方式)
准备数据目录:
mkdir -p /data/minio/data
chmod -R 777 /data/minio/data
启动 MinIO:
docker run -d --name minio \
--restart=always \
-p 9000:9000 -p 9001:9001 \
-e MINIO_ROOT_USER=miniouser \
-e MINIO_ROOT_PASSWORD='Manager@2025' \
-v /data/minio/data:/data \
minio/minio server /data --console-address ":9001"
访问控制台:http://服务器IP:9001,创建 bucket:velero-backups。
四、安装 Velero
4.1 下载 Velero 客户端
下载地址:https://github.com/vmware-tanzu/velero/releases
先核对兼容矩阵,示例:K8s 1.33.5 可选 Velero 1.17.x。
tar -xvf velero-v1.17.1-linux-amd64.tar.gz
cp velero-v1.17.1-linux-amd64/velero /usr/local/bin/
velero version
4.2 准备 MinIO 凭证
cat > user-minio << EOF
[default]
aws_access_key_id=miniouser
aws_secret_access_key=Manager@2025
EOF
4.3 安装 Velero 服务端
velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.13.1 \
--bucket velero-backups \
--secret-file ./user-minio \
--use-volume-snapshots=false \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://10.0.0.207:9000 \
--namespace velero
参数说明:
--provider aws:MinIO 兼容 S3 协议,因此使用 AWS provider。--plugins velero-plugin-for-aws:S3 兼容插件。--bucket velero-backups:MinIO 中创建的桶名。--use-volume-snapshots=false:此处仅备份元数据,数据卷备份见下文。s3Url:MinIO API 地址(9000 端口)。
4.4 验证服务端状态
kubectl get pod -n velero
kubectl get deploy -n velero
kubectl get BackupStorageLocation -n velero
velero version
当 BackupStorageLocation 状态为 Available 即部署成功。
五、备份与恢复
5.1 备份整个集群
velero backup create cluster-backup
velero backup get
5.2 备份指定命名空间
velero backup create nginx-backup --include-namespaces nginx
velero backup describe nginx-backup --details
5.3 执行恢复
velero restore create --from-backup cluster-backup
velero restore get
六、数据卷备份的关键点
默认情况下(use-volume-snapshots=false)只备份资源元数据。如果需要真正的数据备份,需要启用以下方案之一:
- CSI Snapshot:存储支持快照时使用。
- Velero Node Agent:文件级备份,适合本地存储或不支持快照的场景。
只恢复元数据不等于恢复业务数据,这一点很容易被忽略。
七、常见问题排查
- BackupStorageLocation 不可用:检查 MinIO 地址、凭证、网络连通性。
- 备份失败:查看
velero backup logs <backup-name>。 - 恢复后数据丢失:确认是否启用了数据卷备份机制。
总结
Velero + MinIO 是中小团队最容易落地、稳定性足够的 Kubernetes 备份组合。建议先跑通元数据备份,再逐步引入数据卷备份与定时任务,形成可持续的备份闭环。