找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

458

积分

0

好友

66

主题
发表于 3 天前 | 查看: 5| 回复: 0

在Kubernetes的实际应用中,集群自身并不负责用户数据的持久化保管,这使得为集群部署一套可靠的备份恢复方案至关重要。

本文将详细介绍如何搭建Velero + MinIO这一经典的Kubernetes备份组合,并演示其核心的备份与恢复操作流程。

1 为什么选择 Velero + MinIO?

对于大多数团队而言,该方案具有以下几个显著优势:

  • 完全开源,避免厂商锁定:无需依赖AWS S3或阿里云OSS等商业服务。
  • MinIO部署简易快速:使用Docker可秒级启动,对现有环境无侵入。
  • Velero功能强大全面:支持备份(Backup)、恢复(Restore)、集群迁移、定时任务及存储卷快照等。
  • 生产环境级安全可控:所有备份数据均存储在自主管理的MinIO对象存储中。

核心价值:这是一套易于落地且稳定可靠的Kubernetes数据保护方案。

2 搭建MinIO服务

我们使用Docker快速部署一个MinIO实例。当然,你也可以选择将其部署在Kubernetes集群内部。Velero后续会将备份文件上传至此。

# 创建数据目录(请确保执行节点已安装Docker)
mkdir -p /data/minio/data && chmod -R 777 /data/minio/data

# 启动MinIO容器
docker run -d \
   -p 9000:9000 \
   -p 9001:9001 \
   --name velero-minio \
   -v /data/minio/data:/data \
   -e "MINIO_ROOT_USER=miniouser" \
   -e "MINIO_ROOT_PASSWORD=Manager@2025" \
   quay.io/minio/minio server /data --console-address ":9001"

MinIO Docker部署 关键参数解析:

  • 9000端口:MinIO对象存储的API端口(兼容S3协议),Velero将通过此端口与MinIO通信。
  • 9001端口:MinIO控制台(Web UI)端口,用于管理存储桶。
  • MINIO_ROOT_USER / MINIO_ROOT_PASSWORD:MinIO的管理员账号和密码。
  • --console-address:指定控制台服务的监听端口。
  • server /data:以Server模式启动,并使用/data目录作为存储后端。

3 创建S3兼容的存储桶

通过浏览器访问MinIO控制台(例如:http://<你的服务器IP>:9001),使用上一步设置的管理员账号密码登录。

MinIO登录界面

在控制台中,点击 Create Bucket 按钮创建一个新的存储桶。

创建存储桶入口 创建存储桶表单

Velero的所有备份文件都将被写入这个Bucket中,建议为其命名一个具有标识性的名称,例如velero-backups

4 安装 Velero

4.1 下载Velero客户端

访问Velero的GitHub发布页面下载客户端。请务必根据你的Kubernetes集群版本选择合适的Velero版本。例如,针对K8s 1.33.5版本,可以选择Velero 1.17.1。

Velero版本选择

同时,由于我们需要对接S3兼容存储,需记录对应版本的AWS插件信息(该插件使Velero能够与MinIO通信),无需单独下载插件包。

AWS插件版本

4.2 安装Velero客户端

将下载的安装包上传至Kubernetes集群的Master节点,并执行以下步骤进行客户端安装:

# 解压安装包
cd /data/velero/
tar -xvf velero-v1.17.1-linux-amd64.tar.gz

# 将velero二进制文件移至系统PATH目录
cp velero-v1.17.1-linux-amd64/velero /usr/local/bin/
chmod +x /usr/local/bin/velero

# 验证客户端安装
velero version

此时,输出会显示客户端版本信息,并提示无法获取服务端版本(因为服务端尚未部署),这属于正常现象。

4.3 部署Velero服务端

首先,创建一个凭证文件,其中包含访问MinIO所需的密钥(需与部署MinIO时设置的账号密码一致):

cat > user-minio << EOF
[default]
aws_access_key_id=miniouser
aws_secret_access_key=Manager@2025
EOF

执行以下命令,在Kubernetes集群中安装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:指定用于连接S3兼容存储的插件及其版本。
  • --bucket:指定在MinIO中创建的存储桶名称。
  • --secret-file:指定包含MinIO访问凭证的文件。
  • --backup-location-config
    • region=minio:区域名称,可自定义但必须提供。
    • s3ForcePathStyle="true"连接MinIO必须启用此项
    • s3Url:指向MinIO服务API地址(端口9000)。

Velero服务端安装过程

安装完成后,验证相关资源状态:

# 检查Velero Pod运行状态
kubectl get po -n velero

# 检查部署状态
kubectl get deploy -n velero

# 检查备份存储位置是否就绪
kubectl get BackupStorageLocation -n velero

# 再次查看版本,此时应显示客户端和服务端版本
velero version

当所有资源状态正常,且velero version命令能正确输出服务端信息时,表明Velero服务端已成功部署。

5 执行备份操作

以下是Velero进行备份恢复的简易架构示意图:

Velero备份恢复架构简图

现在,我们来创建一个完整的集群备份:

# 创建名为 cluster-backup 的备份
velero backup create cluster-backup

# 查看备份任务列表及状态
velero backup get

备份状态查看

当状态(Status)显示为 Completed 时,表示备份已完成。此时,登录MinIO控制台,可以在之前创建的Bucket中看到Velero生成的备份文件结构。

MinIO中的备份文件

6 执行恢复操作

当发生误删除等事故时,即可利用备份进行恢复。我们通过一个简单的测试来演示:

假设在default命名空间中有一个名为nginx-test的Pod,现将其删除:

kubectl delete pod nginx-test

随后,使用之前创建的备份进行恢复:

velero restore create --from-backup cluster-backup

恢复执行完毕后,再次查看Pod,可以发现nginx-test已被成功恢复。

恢复后查看Pod

Velero能够自动化恢复多种资源,包括Deployment、Service、Ingress、PVC/PV数据以及相关的Kubernetes元数据,是保障数据库及有状态应用数据安全的关键组件。

总结

本文完成了Velero与MinIO备份环境的基础搭建,并验证了其核心的备份与恢复功能。Velero还支持更精细化的操作,例如按命名空间备份、资源过滤、定时备份策略制定等,这些高级功能将有助于构建更完善的企业级运维备份体系。




上一篇:SpringBoot异常处理最佳实践:7个技巧构建清晰可维护的异常体系
下一篇:Elasticsearch集群性能优化实战:索引设计、查询调优与四大场景架构方案
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区(YunPan.Plus) ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-7 02:33 , Processed in 0.094909 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 CloudStack.

快速回复 返回顶部 返回列表