Velero 安装步骤

客户端

https://github.com/vmware-tanzu/velero/releases

下载并安装最新版本二进制客户端。

1cp velero /usr/local/bin && chmod +x /usr/local/bin/velero
2
3velero version
4Client:
5        Version: v1.13.2
6        Git commit: 4d961fb6fec384ed7f3c1b7c65c818106107f5a6
7<error getting server version: no matches for kind "ServerStatusRequest" in version "velero.io/v1">

服务端

  1. 准备好秘钥文件 credentials-velero ,即 MinIO 的用户名密码。
1[default]
2aws_access_key_id=<access key id>
3aws_secret_access_key=<secret access key>
  1. 使用 velero install 安装服务端
 1velero install \
 2  --provider aws \
 3  --image velero/velero:v1.13.2 \
 4  --plugins velero/velero-plugin-for-aws:v1.9.2 \
 5  --bucket velero \
 6  --secret-file ./credentials-velero \
 7  --use-node-agent \
 8  --use-volume-snapshots=false \
 9  --namespace velero \
10  --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://10.101.6.118:9000 \
11  --wait
1velero  version
2Client:
3        Version: v1.13.2
4        Git commit: 4d961fb6fec384ed7f3c1b7c65c818106107f5a6
5Server:
6        Version: v1.13.2

Velero 使用

备份

1velero 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: 指定快照的位置,也就是哪一个公有云驱动

通常,直接使用默认命令即可。

1velero backup create <name>

查看备份列表

1velero backup get

定时备份

1# 创建定时备份计划
2velero schedule create k8s-daily --schedule="0 1 * * *"
3
4# 查看定时备份计划
5velero schedule get

恢复

velero restore 的行为不是覆盖,是恢复,不会覆盖已有的资源,只恢复当前集群中不存在的资源。已有的资源不会回滚到之前的版本,如需要回滚,需在restore之前提前删除现有的资源。

1velero restore create --from-backup <name>

其他命令

 1# 查看备份位置
 2velero get backup-locations
 3
 4NAME      PROVIDER   BUCKET/PREFIX   PHASE       LAST VALIDATED                  ACCESS MODE   DEFAULT
 5default   aws        finley007       Available   2022-03-10 22:23:28 +0800 CST   ReadWrite     true
 6
 7# 查看已有恢复
 8velero get restores
 9
10# 查看 velero 插件
11velero get plugins
12
13# 删除 velero 备份
14velero backup delete nginx-backup
15
16# 持久卷备份
17velero backup create nginx-backup-volume --snapshot-volumes --include-namespaces nginx-example
18
19# 持久卷恢复
20velero restore create --from-backup nginx-backup-volume --restore-volumes
21
22# 创建集群所有namespaces备份,但排除 velero,metallb-system 命名空间
23velero backup create all-ns-backup --snapshot-volumes=false --exclude-namespaces velero,metallb-system
24
25# 周期性定时备份
26# 每日3点进行备份
27velero schedule create <SCHEDULE NAME> --schedule "0 3 * * *"
28
29# 每日3点进行备份,备份保留48小时,默认保留30天
30velero schedule create <SCHEDULE NAME> --schedule "0 3 * * *" --ttl 48
31
32# 每6小时进行一次备份
33velero create schedule <SCHEDULE NAME> --schedule="@every 6h"
34
35# 每日对 web namespace 进行一次备份
36velero create schedule <SCHEDULE NAME> --schedule="@every 24h" --include-namespaces web

迁移

1# 在集群1上做一个备份:
2$ velero backup create <BACKUP-NAME> --snapshot-volumes
3
4# 在集群2上做一个恢复:
5$ velero restore create --from-backup <BACKUP-NAME> --restore-volumes
6
7# velero 清理
8$ kubectl delete namespace/velero clusterrolebinding/velero
9$ kubectl delete crds -l component=velero

参考资料

  1. https://www.cnblogs.com/wubolive/p/17345716.html
  2. https://mafeifan.com/DevOps/K8s/k8s-%E5%9F%BA%E7%A1%80-%E4%BD%BF%E7%94%A8Velero%E5%A4%87%E4%BB%BD%E6%81%A2%E5%A4%8D%E9%9B%86%E7%BE%A4.html