本文以最新版的velero1.14.1为例,分享部署指引及实战经验,备份和还原操作是简单,但是有些细节不了解清楚,有可能会造成大事故,本篇文章将带你了解需要注意的细节。
01、什么是 Velero?
Velero 是一个用Go语言开发的开源工具,用于 Kubernetes 集群的备份、恢复、灾难恢复和迁移。
02、Velero备份工作流程
当用户发起velero backup create时,会执行如下四个动作:
03、安装步骤
velero在卸载的时候会把所在命名空间的资源清空,所以需要独立部署,在实战中,我们会把minio和velero隔离命名空间进行部署。
下载地址
# velero
wget https://github.com/vmware-tanzu/velero/releases/download/v1.14.1/velero-v1.14.1-linux-amd64.tar.gz
# minio
git clone https://github.com/yilingyi/minio.git
minio安装
helm install minio ./ -f values.yaml -n minio --create-namespace
velero安装
[default]
aws_access_key_id=minioadmin
aws_secret_access_key=minioadmin
cd velero-v1.14.1-linux-amd64
cp velero /usr/bin/
velero install \
# 指定存储提供商,minio用的是s3,所以这里是aws
--provider aws \
# 指定aws插件
--plugins registry.cn-hangzhou.aliyuncs.com/yilingyi/velero-plugin-for-aws:v1.10.1 \
# 指定velero镜像
--image registry.cn-hangzhou.aliyuncs.com/yilingyi/velero:v1.14.1 \
# 限制agent CPU和内存资源
--node-agent-pod-cpu-limit 2 \
--node-agent-pod-mem-limit 2048Mi \
# 指定命名空间
--namespace velero \
# 指定bucket名称
--bucket velero \
# 默认以文件形式备份持久化卷
--default-volumes-to-fs-backup \
# 启用node agent 进行备份和恢复操作,--use-restic已启用,从v1.10开始默认使用kopia备份
--use-node-agent \
# 指定S3存储桶凭证
--secret-file ./credentials-velero \
# 禁用卷快照功能,只使用文件系统级别的备份
--use-volume-snapshots=false \
# 配置备份存储位置的详细信息,其中<minio-api-url>填写minio的api地址,如172.33.0.2:9000
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://<minio-api-url>
04、常用指令
备份
velero backup create <BACKUP_NAME>
示例
velero backup create my-buckup
--include-namespaces 备份指定的命名空间
--include-resources 备份指定的资源,常用的有deployment,pods,services,secrets,configmaps
--exclude-namespace 排除命名空间
--exclude-resources 排除资源
--ttl 备份过期时间,默认为720h,即30天
kubectl label pv my-pv velero.io/exclude-from-backup=true
velero get backups
velero backup describe <BACKUP_NAME> --detail
还原
velero restore create --from-backup <BACKUP_NAME>
--include-namespaces 备份指定的命名空间
--include-resources 备份指定的资源,常用的有deployment,pods,services,secrets,configmaps
--exclude-namespace 排除命名空间
--exclude-resources 排除资源
velero get restores
velero restore describe <RESTORE_NAME> --detail
定时任务
velero schedule create <SCHEDULE_NAME> --schedule="0 1 * * *" --include-namespaces <NAMESPACES> --ttl 240
示例
velero schedule create daily-backup --schedule="0 1 * * *" --include-namespaces argocd,blackbox,chaosblade --ttl 240
velero get schedules
其他指令
velero uninstall
05、k8s集群迁移
在目标集群安装velero,安装参数的s3url(“s3Url=http://<minio-api-url>”)指向源集群的minio,在完成部署后,方可进行备份浏览和还原,但需要注意以下两个细节:
将下面文件保存为velero-sc.yaml,将<target-sc>修改为目标集群的storageClass名称,并通过kubectl apply -f velero-sc.yaml执行映射,然后再进行数据还原。
apiVersion: v1
kind: ConfigMap
metadata:
name: change-storage-class-config
namespace: velero
labels:
velero.io/plugin-config: ""
velero.io/change-storage-class: RestoreItemAction
data:
cfs-v4: <target-sc>
06、结语
velero使kubernetes的备份、还原和迁移更加灵活和简单,本次分享就到这里,谢谢!
参考链接
https://min.io/docs/minio/linux/index.html
https://cloudcasa.io/blog/getting-to-know-velero-backup-and-important-velero-resources-that-you-can-utilise/