k8s资源备份之velero备份
文章目录
一、备份的意义
在 Kubernetes 的日常运维中,资源对象(如 Deployment、Service、ConfigMap、Secret)和持久化数据(如 PVC)构成了业务系统运行的核心。当我们面对如下场景时:
- 误操作删除资源(如 kubectl delete 命名空间)
- 节点或存储故障导致数据丢失
- 需要跨环境复制资源配置
- 希望定期备份并支持恢复测试
这时,就需要一种能够灵活、自动化地备份和恢复 Kubernetes 中各种资源的解决方案。
二、velero是什么
Velero 是一个用于 Kubernetes 的开源备份与恢复工具,具备以下功能:
🔹 备份 Kubernetes 的资源对象(如 Namespaces、Deployments、Secrets)
🔹 备份并还原持久化数据(如 PVC 对应的挂载卷)
🔹 按需恢复指定资源或整个命名空间
🔹 支持定时备份任务(Schedule)
🔹 支持标签选择器过滤资源备份
🔹 支持对象存储(如 MinIO、S3)作为备份目标
三、为什么选择velero
✅ 无需关心底层 etcd 数据结构
✅ 支持跨集群/跨环境备份恢复
✅ 支持多种存储后端
✅ 与 Kubernetes 原生资源模型高度集成
✅ 备份粒度可控,支持自定义标签、命名空间筛选
四、velero备份
1. 部署minio作为存储程序
# 拉取minio镜像
docker pull minio/minio:latest
# 创建数据目录
mkdir -p /root/minio
# 运行Minio容器
docker run --net=host \
--name minio \
-d --restart=always \
-e "MINIO_ACCESS_KEY=admin" \ #设置Minio的访问账号
-e "MINIO_SECRET_KEY=Minio1234" \ #设置Minio的访问密钥
-v /root/minio/data:/data \ #挂载宿主机目录到容器
minio/minio:latest server \
/data \ #容器内使用/data目录作为存储后端
--console-address ":9090" \ #设置Web控制台监听在9090端口
-address ":9000" #设置API服务监听在9000端口
# 页面访问
http://192.168.1.201:9090 #账号密码:admin / Minio1234
创建s3存储桶,命名为velerodata
2. 安装velero客户端
# 下载地址
https://github.com/vmware-tanzu/velero/releases/download/v1.14.1/velero-v1.14.1-linux-amd64.tar.gz
# 解压复制
tar xf velero-v1.14.1-linux-amd64.tar.gz
cp -a /root/velero-v1.14.1-linux-amd64/velero /usr/local/bin/
# 查看版本
velero version #由于还没有安装服务端,只会显示客户端的版本
3. 安装velero服务端
# 创建Minio访问凭据文件
cat > /root/credentials-velero <<-EOF
[default]
aws_access_key_id = admin
aws_secret_access_key = Minio1234
EOF
# 提前下载Velero镜像文件
docker pull velero:v1.14.1
docker pull velero-plugin-for-aws:v.1.10.0
# velero命令部署
velero install \
--provider aws \ #使用AWS S3 API兼容存储(这里指 MinIO)
--image harbor.local/k8s/velero:v1.14.1 \ #这里两个镜像都用的内网仓库的镜像,根据情况修改
--plugins harbor.local/k8s/velero-plugin-for-aws:v1.10.0 \
--bucket velerodata \ #备份存储桶名称
--secret-file /root/credentials-velero \ #MinIO访问凭据
--use-node-agent \ #启用Velero Node Agent,提高备份效率
--use-volume-snapshots=false \ #关闭存储卷快照(仅备份K8s资源)
--namespace velero \ #Velero部署的命名空间
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://192.168.1.201:9000 \ #设定 MinIO 存储地址(MinIO 兼容 S3 API)
--wait #等待Velero部署完成
4. 测试备份
# 创建测试用的Pod
cd /root/velero-v1.14.1-linux-amd64
kubectl apply -f examples/nginx-app/base.yaml
# 查看命名空间下的所有资源
kubectl get all -n nginx-example
# 创建备份文件(指定备份命名空间为nginx-example下的资源)
velero backup create nginx-backup20250423 --include-namespaces nginx-example
到Minio-ui查看是否成功备份
5. 恢复备份
# 删除命名空间(删除命名空间会删除命名空间下的所有资源)
kubectl delete ns nginx-example
# 恢复备份数据
velero restore create --from-backup nginx-backup20250423
# 列出所有恢复任务
velero restore get
# 查看资源是否恢复
kubectl get all -n nginx-example
总结
通过本篇实战,我们完成了以下操作:
✅ 使用 MinIO 搭建兼容 S3 协议的对象存储服务
✅ 安装并配置 Velero 客户端与服务端
✅ 成功将 Kubernetes 命名空间中的资源进行备份
✅ 验证了资源在误删除后的恢复能力
Velero 提供了一种简洁、高效、支持自动化的 Kubernetes 备份与恢复机制,尤其适用于应对资源误删、环境迁移、集群故障等场景。结合定时任务、标签筛选等功能,可以灵活制定备份策略,提升集群的数据安全与可运维性。