velero备份恢复k8s集群
参考文档:
https://blog.51cto.com/kaliarch/4919159
https://blog.csdn.net/john1337/article/details/123335046
一、什么是velero?
Velero 是一个云原生的灾难恢复和迁移工具,它本身也是开源的, 采用 Go 语言编写,可以安全的备份、恢复和迁移Kubernetes集群资源和持久卷。
Velero 是西班牙语,意思是帆船,非常符合 Kubernetes 社区的命名风格。Velero 的开发公司 Heptio,之前已被 VMware 收购,其创始人2014就职于Google,当时被认为是 Kubernetes 核心成员。
Velero 是一种云原生的Kubernetes优化方法,支持标准的K8S集群,既可以是私有云平台也可以是公有云。除了灾备之外它还能做资源移转,支持把容器应用从一个集群迁移到另一个集群。
Heptio Velero ( 以前的名字为 ARK) 是一款用于 Kubernetes 集群资源和持久存储卷(PV)的备份、迁移以及灾难恢复等的开源工具。
使用velero可以对集群进行备份和恢复,降低集群DR造成的影响。velero的基本原理就是将集群的数据备份到对象存储中,在恢复的时候将数据从对象存储中拉取下来。可以从官方文档查看可接收的对象存储,本地存储可以使用Minio
1.1 特性
支持 Kubernetes 集群数据备份和恢复
支持复制当前 Kubernetes 集群的资源到其它 Kubernetes 集群
支持复制生产环境到开发以及测试环境
注意: 备份过程中创建的对象是不会被备份的。
1.2 与ETCD备份的区别
与 Etcd 备份相比,直接备份 Etcd 是将集群的全部资源备份起来。而 Velero 就是可以对 Kubernetes 集群内对象级别进行备份。除了对 Kubernetes 集群进行整体备份外,Velero 还可以通过对 Type、Namespace、Label 等对象进行分类备份或者恢复。
二、流程图
三、现在开始
3.1 安装velero二进制命令
wget https://github.com/vmware-tanzu/velero/releases/download/v1.4.2/velero-v1.4.2-linux-amd64.tar.gz
tar -zxvf velero-v1.4.2-linux-amd64.tar.gz
3.2 初始化velero
创建credentials-velero文件填入minio的信息,文件内容如下
[default]
aws_access_key_id = minioadmin
aws_secret_access_key = minioadmin
使用install命令安装velero
velero install
--provider aws
--plugins velero/velero-plugin-for-aws:v1.0.0
--bucket velero
--secret-file ./credentials-velero
--use-volume-snapshots=false
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://58.56.21.14:9000
注释:http://58.56.21.14:9000 这个地址是公司内网部署的minio,通过防火墙映射,用于公网环境下的备份存储
参数详解
--provider:声明使用的 Velero 插件类型。
--plugins:使用 S3 API 兼容插件 “velero-plugin-for-aws ”。
--bucket:在腾讯云 COS 创建的存储桶名。
--secret-file:访问 COS 的访问凭证文件,见上面创建的 “credentials-velero”凭证文件。
--use-restic:使用开源免费备份工具 restic 备份和还原持久卷数据。
(尝试过备份pv数据,但是没有成功,感兴趣的同事可以再试一下 =_=)
--default-volumes-to-restic:使用 restic 来备份所有Pod卷,前提是需要开启 --use-restic 参数。
--backup-location-config:备份存储桶访问相关配置。
--region:兼容 S3 API 的 COS 存储桶地区,例如创建地区是广州的话,region 参数值为“ap-guangzhou”。
--s3ForcePathStyle:使用 S3 文件路径格式。
--s3Url:COS 兼容的 S3 API 访问地址
--use-volume-snapshots=false 来关闭存储卷数据快照备份。
安装完成后,会自动创建velero的namespace
[root@k8s-master velero]# kubectl get pod -n velero
NAME READY STATUS RESTARTS AGE
velero-59b956f6b5-pj57n 1/1 Running 0 7s
3.3 创建备份任务
手动发起备份任务
velero backup create nginx-example --include-namespaces nginx-example
指定备份排除某些命名空间下面的资源
velero backup create ${BACKUP_NAME} --exclude-namespaces ${NAMESPACE1},$
--include-resources选项可以指定备份哪些资源类型;--exclude-resources`可以指定排除某些资源类型
velero backup create ${BACKUP_NAME} --include-resources pod,secret
每日1点进行备份
velero create schedule --schedule="0 1 * * *"
每日1点进行备份,备份保留72小时
velero create schedule --schedule="0 1 * * *" --ttl 72h
每5小时进行一次备份
velero create schedule --schedule="@every 5h"
每日对 指定 namespace 进行一次备份 (如panshi-qtc-dev)
velero create schedule --schedule="@every 24h" --include-namespaces panshi-qtc-dev
3.4 查看备份资源
velero get backup #备份查看
velero get schedule #查看定时备份
velero get restore #查看已有的恢复
velero get plugins #查看插件
velero restore create --from-backup all-ns-backup #恢复集群所有备份,(对已经存在的服务不会覆盖)
velero restore create --from-backup all-ns-backup --include-namespaces default,nginx-example #仅恢复 default nginx-example namespace
Velero可以将资源还原到与其备份来源不同的命名空间中。为此,请使用--namespace-mappings标志
velero restore create RESTORE_NAME --from-backup BACKUP_NAME --namespace-mappings old-ns-1:new-ns-1,old-ns-2:new-ns-2
例如下面将test-velero 命名空间资源恢复到test-velero-1下面
velero restore create restore-for-test --from-backup everyday-1-20210203131802 --namespace-mappings test-velero:test-velero-1
3.5 恢复
velero restore create --from-backup $(BACKUP_NAME)
四、注意事项
在velero备份的时候,备份过程中创建的对象是不会被备份的。
velero restore 恢复不会覆盖已有的资源,只恢复当前集群中不存在的资源。已有的资源不会回滚到之前的版本,如需要回滚,需在restore之前提前删除现有的资源。
后期可以讲velero作为一个crontjob来运行,定期备份数据。
在高版本1.16.x中,报错error: unable to recognize "filebeat.yml": no matches for kind "DaemonSet" in version "extensions/v1beta1" ,将yml配置文件内的api接口修改为 apps/v1 ,导致原因为之间使用的kubernetes 版本是1.14.x版本,1.16.x 版本放弃部分API支持!