velero k8s 集群资源备份还原

11
Nov

velero k8s 集群资源备份还原

velero k8s 集群资源备份还原

相关资料

  1. https://github.com/vmware-tanzu/velero
  2. https://velero.io/
  3. https://github.com/vmware-tanzu/velero-plugin-for-aws

简介

velero是vmware推出的一款开源的针对Kubernetes的集群资源备份还原的工具。一般而言可以有以下的作用

  1. 对k8s集群进行灾备以便于极端情况下进行还原
  2. 提取集群A资源导入到集群B
  3. 快速复制一个集群信息拉起新的集群

安装前提

注意: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客户端)

  1. 下载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

  1. 安装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

添加新评论