使用Velero备份、恢复的备份、恢复、迁移K8S集群上的资源
开源地址:GitHub - vmware-tanzu/velero: Backup and migrate Kubernetes applications and their persistent volumes
https://github.com/vmware-tanzu/velero
官网:https://velero.io/
Velero 的基本原理就是将Kubernetes 集群资源对象数据备份到对象存储中,并能从对象存储中拉取备份数据来恢复集群资源对象数据。不同于etcd 备份——将集群的全部资源备份起来——Velero 是对Kubernetes 集群内资源对象级别进行备份,可以通过对Type、Namespace、Label等对象进行分类备份或者恢复。
使用Velero备份k8S资源到Minio,阿里云oss,七牛云Kodo等对象储存(S3或兼容S3储存)
-
备份集群并在丢失时进行恢复
-
将集群资源迁移到其他集群。(将生产集群复制到开发和测试集群)
直接备份 Etcd 是将集群的全部资源备份起来,而 Velero 可以对 Kubernetes 集群内对象级别进行备份。
除了对 Kubernetes 集群进行整体备份外,Velero 还可以通过对 Type、Namespace、Label、Pod
等对象进行分类备份或者恢复。
velero备份流程
velero客户端调用kubernetes API Server创建backup任务 Backup控制器基于watch机制通过Api Server获取到备份任务 Backup控制器开始执行备份动作,会通过请求Api Server获取到需要备份的数据 Backup 控制器将获取到的数据备份到指定的对象存储server端
恢复工作流程
当你运行时 velero restore create: Velero 客户端调用 Kubernetes API 服务器来创建一个 Restore 对象。 RestoreController 通知新的 Restore 对象并执行验证。 从对象存储服务中 RestoreController 获取备份信息。然后它对备份的资源进行一些预处理,以确保这些资源可以在新集群上运行。例如,使用 备份的 API 版本来验证还原资源是否可以在目标集群上运行。 RestoreController 启动还原过程,一次还原每个符合条件的资源。 默认情况下,Velero 执行非破坏性恢复,这意味着它不会删除目标集群上的任何数据。如果备份中的资源已存在于目标集群中,Velero 将跳过该资源。您可以将 Velero 配置为使用更新策略,而不是使用 –existing-resource-policy 恢复标志。当此标志设置为 时 update,Velero 将尝试更新目标集群中的现有资源以匹配备份中的资源。
部署Minio 存储
# 使用docker 部署minio docker run -p 9000:9000 -p 9090:9090 --name minio -d --restart=always \ -e "MINIO_ACCESS_KEY=admin" \ -e "MINIO_SECRET_KEY=Lahmy1c!" \ -e MINIO_JAVA_OPTS="-Xms2g -Xmx4g" \ -v /home/minio/data:/data minio/minio server /data \ --console-address ":9090" --address ":9000"
在K8S master-01 安装 velero 客户端
wget https://mirror.ghproxy.com/https://github.com/vmware-tanzu/velero/releases/download/v1.14.0/velero-v1.14.0-linux-amd64.tar.gz tar -zxvf velero-v1.14.0-linux-amd64.tar.gz cp velero-v1.14.0-linux-amd64/velero /usr/local/bin/ velero version
创建velero 使用minio的密钥
[root@k8s-master-01 ~]# cat >>credentials-velero <EOF [default] aws_access_key_id = admin aws_secret_access_key = Lahmy1c! EOF
在K8S中安装 velero服务器端
velero install \ --image registry.aliyuncs.com/elvin/velero:v1.14.0 \ --plugins registry.aliyuncs.com/elvin/velero-plugin-for-aws:v1.9.2 \ --provider aws \ --bucket velero \ --use-volume-snapshots=false \ --secret-file /root/credentials-velero \ --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://192.168.61.233:9000
备份k8s test 命名空间
velero backup create data-backup --include-namespaces test -n velero
删除test命名空间,并且恢复
kubectl delete ns test #恢复 velero restore create --from-backup backup-test --wait
定时任务自动备份 [root@k8s-master-01 ~]# cat velero-k8s-backup.sh #!/bin/bash NS_NAME=$(kubectl get ns |awk '{if(NR>1){print $1}}') DATE=$(date +%Y%m%d%H%M%S) cd /data/velero/ for i in $NS_NAME;do /usr/local/bin/velero backup create ${i}-ns-backup-${DATE} \ --include-cluster-resources=true \ --include-namespaces ${i} \ --kubeconfig=/root/.kube/config \ --namespace velero-system done crontab -u root -e */5 * * * * /usr/bin/bash /data/velero/velero-k8s-backup.sh >> /data/velero/velero-k8s-backup.log 2>&1 #每五分钟备份一次 备份恢复 [root@k8s-master-01 ~]# velero restore create --from-backup myserver-backup-20240724202021 --wait --kubeconfig=/root/.kube/config --namespace velero-system Restore request "myserver-backup-20240724202021-20240724203424" submitted successfully. velero --kubeconfig /root/.kube/config uninstall --namespace velero-system You are about to uninstall Velero. Are you sure you want to continue (Y/N)? y Waiting for velero namespace "velero-system" to be deleted
备份命令:velero create backup NAME [flags]
backup选项:
--exclude-namespaces stringArray : 要从备份中排除的名称空间 --exclude-resources stringArray: 要从备份中排除的资源,如storageclasses.storage.k8s.io --include-cluster-resources optionalBool[=true]: 包含集群资源类型 --include-namespaces stringArray: 要包含在备份中的名称空间(默认'*') --include-resources stringArray: 备份中要包括的资源 --labels mapStringString: 给这个备份加上标签 -o, --output string: 指定输出格式,支持'table'、'json'和'yaml'; -l, --selector labelSelector: 对指定标签的资源进行备份 --snapshot-volumes optionalBool[=true]: 对 PV 创建快照 --storage-location string: 指定备份的位置 --ttl duration: 备份数据多久删掉 --volume-snapshot-locations strings: 指定快照的位置,也就是哪一个公有云驱动
作者:一毛
本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。
不管遇到了什么烦心事,都不要自己为难自己;无论今天发生多么糟糕的事,都不应该感到悲伤。记住一句话:越努力,越幸运。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏