一、velero简介
velero是一个有Vmware开源的工具,是一个云原生的灾难恢复和迁移工具,采用Go语言编写,用于安全的备份、恢复和迁移Kubernetes集群资源数据。
velero官网:https://velero.io/
1.1、velero的特性:
备份可以按集群资源的子集,按命名空间、资源类型标签选择器进行过滤,从而为备份和恢复的内容提供高度的灵活性
支持复制当前 Kubernetes 集群的资源到其它 Kubernetes 集群
通过聚合 API 服务器公开的资源可以轻松备份和恢复,即使它们存储在单独的 etcd 数据库中
Velero 可以帮助你:
对集群进行备份并在丢失的情况下进行恢复。
将集群资源迁移到其他集群。
将生产集群复制到开发和测试集群。
1.2、velero的组件:
velero由一个客户端和一个服务端组成
客户端:运行在本地的命令行工具,只要配置好kubectl和kubeconfig认证文件就可使用,非常简单
服务端:运行在Kubernetes集群之上,负责执行具体的备份和恢复操作
整体架构:
支持的对象存储:AWS S3 以及兼容 S3 的存储,比如:ceph存储、Google Cloud 存储 、Aliyun OSS 存储
1.3、工作流程:
基本工作原理:
Velero client 调用Kubernetes API服务器以创建Backup。
BackupController检测到新的backup,并验证。
BackupController开始backup,通过请求ApiServer获取资源来收集数据以进行备份。
BackupController将要备份的数据上传到一个对象存储服务器,如AMS S3。
默认情况下,velero backup create会生产每一个PV的磁盘快照。您可以通过指定其他参数来调整快照。运行velero backup create --help以查看可用的参数。可以使用选项禁用快照--snapshot-volumes=false。
二、minio环境准备
minio在这里是用来保存velero的备份数据,如果你有其它对象存储服务,也可以用它们来替换minio。
minio是一款高性能、分布式的对象存储系统,采用Go语言实现,兼容Amazon S3接口,客户端与存储服务器之间采用http/https通信协议。
minio官网:https://min.io/
minio中文网站:http://www.minio.org.cn/
minio支持单机部署和分布式部署,这里选择容器方式单机部署。
2.1、安装minio(安装与10.60.230.192服务器上):(要先安装好docker环境)
root@harbor01:~# mkdir -p /data/minio root@harbor01:~# docker pull minio/minio:RELEASE.2023-04-13T03-08-07Z RELEASE.2023-04-13T03-08-07Z: Pulling from minio/minio a9e23b64ace0: Pull complete 38b71301a1d9: Pull complete 160197c068e7: Pull complete ff6e4f6f8c20: Pull complete e95e0f7339c1: Pull complete 17f004107a95: Pull complete cb8e56fa8e8a: Pull complete Digest: sha256:e7983a527e9e5e7158c3644ef6cdc51dca453819f95facc25eb110478dd57b43 Status: Downloaded newer image for minio/minio:RELEASE.2023-04-13T03-08-07Z docker.io/minio/minio:RELEASE.2023-04-13T03-08-07Z # 创建minio容器,如果不指定,则默认用户名与密码为 minioadmin/minioadmin,可以通过环境变量自定义 root@harbor01:~# docker run --name minio \ > -p 9000:9000 \ > -p 9999:9999 \ > -d --restart=always \ > -e "MINIO_ROOT_USER=minio账号" \ > -e "MINIO_ROOT_PASSWORD=minio密码" \ > -v /data/minio/data:/data \ > minio/minio:RELEASE.2022-04-12T06-55-35Z server /data \ > --console-address '0.0.0.0:9999' 0a7f1752b59b9285df518bb048ab3b12bbd3829fbc51d87c21db5478aa6e1f59 root@harbor01:~# docker ps CONTAINER ID IMAGE COMMAND CRE STATUS PORTS NAMES 0a7f1752b59b minio/minio:RELEASE.2023-04-13T03-08-07Z "/usr/bin/docker-ent…" 26 Up 11 seconds 0.0.0.0:9000->9000/tcp, 0.0.0.0:9999->9999/tcp minio |
2.2、访问minio并创建bucket
浏览器访问:http://10.60.10.10:9000
三、部署velero
3.1、下载velero
3.2、配置velero认证环境
# 认证文件 root@ansible:/data/velero# cat velero-auth.txt [ default ] aws_access_key_id = admin aws_secret_access_key = 12345678 |
3.3、部署velero
创建namespace:
kubectl create ns velero-system |
执行安装:
velero --kubeconfig /data/k8s/cluster/kube_config_rancher-cluster_dcb.yml \ install \ --provider aws \ --plugins velero/velero-plugin- for -aws:v1.3.1 \ --bucket velerodata \ --secret-file /data/velero/velero-auth.txt \ -- use -volume-snapshots=false \ -- namespace velero-system \ --backup-location-config region=minio,s3ForcePathStyle= "true" ,s3Url=http: //10.10.10.10:9000/ |
验证部署:
kubectl get pod -n velero-system kubectl logs velero-578458fb6-9n7h9 -n velero --tail=1000 -f |
确保正常连接至minio
使用velero进行备份
[root@master1 ~]# DATE =` date +%Y%m%d%H%M%S` [root@master1 ~]# velero backup create default -backup-${ DATE } -- include -cluster-resources=tru -- include -namespaces kube-system --kubeconfig=/root/.kube/config -- namespace velero-system Backup request "default-backup-20230316213429" submitted successfully. Run `velero backup describe default -backup-20230316213429` or `velero backup logs default -bacup-20230316213429` for more details. [root@master1 ~]# velero backup create myserver-backup-${ DATE } -- include -cluster-resources=tre -- include -namespaces myserver --kubeconfig=/root/.kube/config -- namespace velero-system Backup request "myserver-backup-20230316213429" submitted successfully. Run `velero backup describe myserver-backup-20230316213429` or `velero backup logs myserver-bckup-20230316213429` for more details. |
查看备份
查看minio
从备份文件恢复
[root@master1 velero]# velero restore create --from-backup test-ns-backup-20230316213943 --wait --kubeconfig=/root/.kube/config -- namespace velero-system Restore request "test-ns-backup-20230316213943-20230316220740" submitted successfully. Waiting for restore to complete. You may safely press ctrl-c to stop waiting - your restore will continue in the background. .................. Restore completed with status: Completed. You may check for more information using the commands `velero restore describe test-ns-backup-20230316213943-20230316220740` and `velero restore logs test-ns-backup-20230316213943-20230316220740`. [root@master1 velero]# kubectl get pod NAME READY STATUS RESTARTS AGE test 1/1 Running 0 22s test2 1/1 Running 23 (134m ago) 116d test3 1/1 Running 23 (134m ago) 116d |
四、Velero常用命令
备份Backup
velero backup get :查看已备份的 velero backup create <backupname>:创建一个backup包含所有资源 velero backup create <backupname> -- include -namespaces ns1,ns2:为ns1,ns2命名空间下的资源备份 velero backup create <backupname> --exclude-namespaces ns1,ns2:排除掉ns1,ns2的命名空间,创建备份 velero backup create <backupname> -- include -resources resource1,resource2:为指定资源备份 velero backup create --exclude-resources resource1,resource2:不备份指定资源 --storage-location <localpath>:将创建的备份保存到本地路径下 -l,--selector:通过指定label来匹配要back up的资源
- Create a backup containing all resources:
velero backup create {{backup_name}}
velero backup get
velero backup delete {{backup_name}}
- Create a weekly backup,each living for 90 days (2160 hours):
velero schedule create {{schedule_name}} --schedules="{{@every 7d}}" --ttl {{2160h0m0s}}
- Create a restore from the latest successful backup triggered by specific schedule:
velero restore create --from-schedule {{schedule_name}} 除此以外还包括: delete 、describe、logs |
恢复Restore
velero restore get:查看已经restore的资源 velero restore create restore-1 --from-backup backup-1:从backup-1恢复 velero restore create --from-backup backup-2 -- include -resources persistentvolumeclaims,persistentvolumes:仅恢复指定资源,同样使用--exclude-resources:不恢复某资源 velero --kubeconfig=./kube_config_cluster_examination.yml restore create --from-backup dcb-k8s-all-backup-20230421145821 -- include -namespaces 15-minutes --wait -- namespace velero-system velero restore create --from-schedule schedule-1:从创建的schedule恢复 除此以外还包括: delete 、describe、logs |
五、Schedule定时备份
Schedule是针对backup的,是独立于backup之外的一种资源,但他本身也是一个backup只不过是具有了定时的功能,符合Cron规则。
注意事项
- 备份使用volumes 的Pod,需要给Pod加上注解
- 备份时禁用快照,可指定参数--snapshot-volumes=false
- 各云厂商Volumes快照插件: https://velero.io/plugins/
-
使用 Velero 跨集群迁移资源,确保如下检查工作
- 确保镜像资源在迁移后可以正常拉取。
- 确保两个集群的 K8S 版本的 API 兼容,最好是相同版本
- 绑定集群外部资源的无法迁移,例如 LoadBalancer 类型的service,创建备份建议忽略
原文地址:https://blog.csdn.net/weixin_42188217/article/details/130501184
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。