使用Velero备份Kubernetes集群
1. Velero 简介
Velero 是 heptio 团队(被 VMWare 收购)开源的 Kubernetes 集群备份、迁移工具。
Velero 使用对象存储保存集群资源。默认支持的对象存储有 AWS、Azure、GCP ,兼容 S3 协议,也可以通过插件来扩展到其他平台,比如 Aliyun OSS。
目前,Velero 不具备版本管理功能,只能进行增量恢复,不会进行删除或覆盖操作。
2. Velero 工作原理
Velero 首先会在集群中创建各种 CRD 以及相关的控制器,通过对 CRD 对象的操作完成备份、恢复行为。Velero 的工作原理图如下:
- Velero 客户端调用 Kubernetes API 服务器创建 Backup 对象。
- BackupController 监听 Backup 对象变化,以执行备份过程。
- 备份时,BackupController 通过 API Server 查询相关数据。
- 备份后,BackupController 将数据上传到对象存储。
运维拓扑图如下:
在所有集群上安装 Velero,运维人员通过 Velero Client 给 Velero Server 发送备份、恢复请求。Velero Server 推拉指定的 Kubernetes 对象的数据。这些数据以 Json 格式压缩存储在对象存储服务中。
下图是备份数据的目录结构:
3. 安装 Velero
3.1 下载文件
二进制文件下载地址:Github。
这里以 CentOS 操作系统、Velero 1.6.0 为例:
下载二进制文件,然后复制到 /user/local/bin
目录下。
1、下载压缩包并解压
1 2 | wget https://github.com/vmware-tanzu/velero/releases/download/v1.6.0/velero-v1.6.0-linux-amd64.tar.gz tar -zxvf velero-v1.6.0-linux-amd64.tar.gz && cd velero-v1.6.0-linux-amd64/ |
2、查看目录结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | [root@m-master126 velero-v1.6.0-linux-amd64]# tree . ├── examples │ ├── minio │ │ └── 00-minio-deployment.yaml │ ├── nginx-app │ │ ├── base.yaml │ │ ├── README.md │ │ └── with-pv.yaml │ └── README.md ├── LICENSE └── velero 3 directories, 7 files |
3.2 配置对象存储服务
考虑到可能没有直接可用的对象存储服务,本文使用 Velero 提供的 minio 搭建一个对象存储服务。如果是公有云服务,这里部署 minio 的步骤可以省略,只需要创建 credentials-velero 文件。
1、创建 minio 服务
- 设置为 NodePort 类型
1 | sed -i "/type: /s#ClusterIP#NodePort#" examples/minio/00-minio-deployment.yaml |
- 创建 minio 服务
1 | kubectl apply -f examples/minio/00-minio-deployment.yaml |
- 查看 service 访问端口
1 2 3 | [root@m-master126 velero-v1.6.0-linux-amd64]# kubectl get svc -n velero NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE minio NodePort 10.233.11.92 < none > 9000:32304/TCP 60s |
这里的 {minio_service_ip}:32304 服务将被用于存储 Velero 的备份数据。
访问的话:直接浏览器输入 http://{NodeIP:32304} 默认账户信息: minio/minio123
2、创建 minio 的访问密钥文件 credentials-velero
1 2 3 4 5 | cat <<'EOF' > credentials-velero [default] aws_access_key_id = minio aws_secret_access_key = minio123 EOF |
ls查看下创建的访问密钥文件
1 2 | [root@m-master126 velero-v1.6.0-linux-amd64]# ls credentials-velero examples LICENSE velero |
3.3 安装 Velero 客户端
拷贝可执行文件 velero
1 | cp velero /usr/local/bin/ |
3.4 安装 Velero 服务端
执行安装命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | velero install \ --plugins harbor.openserver.cn:443/library/velero/velero-plugin-for-aws:v1.0.0 \ --provider aws \ --bucket velero \ --namespace velero \ --secret-file ./credentials-velero \ --velero-pod-cpu-request 200m \ --velero-pod-mem-request 200Mi \ --velero-pod-cpu-limit 1000m \ --velero-pod-mem-limit 1000Mi \ --use-volume-snapshots=false \ --use-restic \ --restic-pod-cpu-request 200m \ --restic-pod-mem-request 200Mi \ --restic-pod-cpu-limit 1000m \ --restic-pod-mem-limit 1000Mi \ --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://{NodeIp}:32304 |
值得注意的是use-restic
开启了 PV 备份的支持。执行安装命令,会有回显日志。下面继续查看新创建的相关资源:
1 2 3 4 5 6 7 8 9 10 11 12 | [root@m-master126 velero-v1.6.0-linux-amd64]# kubectl get crd|grep velero backups.velero.io 2021-05-31T12:54:19Z backupstoragelocations.velero.io 2021-05-31T12:54:19Z deletebackuprequests.velero.io 2021-05-31T12:54:19Z downloadrequests.velero.io 2021-05-31T12:54:19Z podvolumebackups.velero.io 2021-05-31T12:54:19Z podvolumerestores.velero.io 2021-05-31T12:54:19Z resticrepositories.velero.io 2021-05-31T12:54:19Z restores.velero.io 2021-05-31T12:54:19Z schedules.velero.io 2021-05-31T12:54:19Z serverstatusrequests.velero.io 2021-05-31T12:54:19Z volumesnapshotlocations.velero.io 2021-05-31T12:54:19Z |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | [root@m-master126 velero-v1.6.0-linux-amd64]# kubectl get all -n velero NAME READY STATUS RESTARTS AGE pod/minio-7b4ff54f67-kx259 1/1 Running 0 14h pod/minio-setup-mx8d5 0/1 Completed 0 14h pod/restic-c6hkt 1/1 Running 0 14h pod/restic-gfkwq 1/1 Running 0 14h pod/restic-j5bjr 1/1 Running 0 14h pod/restic-zrkzn 1/1 Running 0 14h pod/velero-df6dcd97-6qjj4 1/1 Running 0 14h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/minio NodePort 10.233.11.92 < none > 9000:32304/TCP 14h NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/restic 4 4 4 4 4 < none > 14h NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/minio 1/1 1 1 14h deployment.apps/velero 1/1 1 1 14h NAME DESIRED CURRENT READY AGE replicaset.apps/minio-7b4ff54f67 1 1 1 14h replicaset.apps/velero-df6dcd97 1 1 1 14h NAME COMPLETIONS DURATION AGE job.batch/minio-setup 1/1 3s 14h |
可以看到相关服务已经正常运行,Job 任务正常完成退出,大量 CRD 被创建。
3.5 卸载 Velero 服务端
1 2 | kubectl delete namespace/velero clusterrolebinding/velero kubectl delete crds -l component=velero |
参考:
https://blog.csdn.net/weixin_47003048/article/details/114006959
https://www.chenshaowen.com/blog/backup-kubernetes-cluster-using-velero.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构