velero k8s 集群资源备份还原
相关资料
- https://github.com/vmware-tanzu/velero
- https://velero.io/
- https://github.com/vmware-tanzu/velero-plugin-for-aws
简介
velero是vmware推出的一款开源的针对Kubernetes的集群资源备份还原的工具。一般而言可以有以下的作用
- 对k8s集群进行灾备以便于极端情况下进行还原
- 提取集群A资源导入到集群B
- 快速复制一个集群信息拉起新的集群
安装前提
注意:velero 需要选择一个存储介质,官网有说明支持的provider,例如 aws s3,Azure,GCP,Alibaba等,也可以使用兼容以上api的存储如minio等
本文使用兼容aws s3的cos对象存储
特别提示
因公司有多套k8s环境,同时因上线时间存在较大的间隔,分布在1.10.x、1.16.3、1.20.x三个不同的k8s版本。
velero以及对应的插件对不同k8s版本支持的也需要使用不同的velero版本。
官方的版本兼容性
| Velero version | Expected Kubernetes version compatibility | Tested on Kubernetes version |
| ----------- | ----------- | ----------- |
| 1.9 | 1.16-latest | 1.20.5, 1.21.2, 1.22.5, 1.23, and 1.24|
| 1.6.3-1.7.1 | 1.12-latest | |
| 1.60-1.6.2 | 1.12-1.21 | |
| 1.5 | 1.12-1.21 | |
| 1.4 | 1.10-1.21 | |
aws 插件兼容性
| Plugin Version | Velero Version |
| ----------- | ----------- |
| v1.5.x | v1.9.x
| v1.4.x | v1.8.x
| v1.3.x | v1.7.x
| v1.2.x | v1.6.x
| v1.1.x | v1.5.x
| v1.1.x | v1.4.x
| v1.0.x | v1.3.x
| v1.0.x | v1.2.0
实测
| Velero version | 验证支持 | 验证不支持 |
| ----------- | ----------- | ----------- |
| 1.9.2 | 1.16.3 (velero-plugin-for-aws:v1.5.0 ) | 1.20.x(只能备份default namespace,备份其他ns报错)|
| 1.5 | - | 1.10.x(install 报错 crd api不兼容) |
| 1.4 | - | 1.10.x(install 报错 crd api不兼容) |
| 1.3 | - | 1.10.x(install 报错 crd api不兼容) |
| 1.0.0 | 1.10.5 | |
客户端安装(本文基于linux,官方也提供mac、windows客户端)
- 下载velero客户端
https://github.com/vmware-tanzu/velero/releases
以当前最新版本为例 velero-v1.9.3
curl -O https://github.com/vmware-tanzu/velero/releases/download/v1.9.3-rc.3/velero-v1.9.3-rc.3-linux-amd64.tar.gz
tar -zxvf velero-v1.9.3-rc.3-linux-amd64.tar.gz
- 安装velero到k8s 集群(使用aws插件)
1)在velero目录下准备存储授权key信息
vim credentials-velero
[default]
aws_access_key_id = *
aws_secret_access_key = *
2)安装(需要保证配置好了kubectl的机器上,也可通过--kubeconfig指定kubecfg配置)
velero install --provider aws --plugins velero/velero-plugin-for-aws:v1.5.0 --bucket test \
--secret-file ./credentials-velero \
--use-volume-snapshots=false
--backup-location-config \
region=ap-shanghai,s3ForcePathStyle="true",s3Url=https://cos.ap-shanghai.myqcloud.com
velero相关命令
备份,查看,删除操作
查看备份存储信息
velero backup-loaction get
#备份集群default namespace下资源:
velero backup create default-backup --include-namespaces default
#查看备份结果
velero backup describe default-backup
velero backup logs default-backup
#删除备份
velero delete backup default-backup
#备份非default和test命名空间下的资源:
velero backup create k8s-full-test-backup --exclude-namespaces default,test
#备份特定资源类型
velero backup create kube-system-backup --include-resources pod,secret
#--confirm 直接删除备份,无需确认:
velero backup delete kube-system-backup --confirm
#备份带pv pod
velero backup create pvc-backup --snapshot-volumes --include-namespaces test-velero
注意:
–include-resources备份指定资源类型, –exclude-resources指定排除某些资源类型
定时备份:
# 每六个小时备份一次
velero create schedule ${SCHEDULE_NAME} --schedule="0 */6 * * *"
# 每六个小时使用every备份一次
velero create schedule ${SCHEDULE_NAME} --schedule="@every 6h"
# 创建一个web命名空间的天备份
velero create schedule ${SCHEDULE_NAME} --schedule="@every 24h" --include-namespaces web
# 创建一个周备份,持续时间为90天。
velero create schedule ${SCHEDULE_NAME} --schedule="@every 168h" --ttl 2160h0m0s
说明:–ttl可以指定backup的生存周期,在ttl超时后,backup会被定期清理,ttl默认30天
备份恢复
#从backup创建restore
velero restore create ${RESTORE_NAME} --from-backup ${BACKUP_NAME}
# 从backup创建restore,restore默认名为 ${BACKUP_NAME}-<timestamp>
velero restore create --from-backup ${BACKUP_NAME}
# 从schedule最新一次的backup创建restore
velero restore create --from-schedule ${SCHEDULE_NAME}
# 指定backup中的某些资源创建restore
velero restore create --from-backup backup-2 --include-resources pod,secret
# 恢复集群所有备份,(对已经存在的服务不会覆盖)
velero restore create --from-backup all-ns-backup
# 仅恢复default nginx-example命名空间
velero restore create --from-backup all-ns-backup --include-namespaces default,nginx-example
# 将test-velero 命名空间资源恢复到test-velero-1下面
velero restore create restore-for-test --from-backup everyday-1-20210203131802 --n
删除velero
高版本的velero可以通过velero uninstall卸载
kubectl delete namespace/velero clusterrolebinding/velero
kubectl delete crds -l component=velero