文章目录
- velero 集群备份实战
- velero 架构
- velero 安装
- 备份mysql集群
- 备份命令
- 查看备份列表
- 如何恢复?
- 如何卸载?
- 报错处理
velero 集群备份实战
velero 架构
vmware 的产品。velero 是一个CS架构,服务端是一堆CRD, 监听客户端发来的请求。
优势:
- 份集群数据,并在集群故障的情况下进行还原
- 将集群资源迁移到其他集群
- 将生产集群复制到开发和测试集群
- 支持restic
velero 安装
- Helm Chart 来进行安装
- velero client安装
这里使用velero client安装,下载地址
使用 minio 来作为对象存储,minio 是兼容 S3 的,所以这里我们配置的 provider(声明使用的 Velero 插件类型)是 aws
,--secret-file
用来提供访问 minio 的密钥,--use-restic
表示使用开源免费备份工具 restic 备份和还原持久卷数据,启用该参数后会部署一个名为 restic 的 DaemonSet 对象,--plugins
使用的 velero 插件,这里使用 AWS S3 兼容插件。
velero install \
--provider aws \
--bucket velero \
--image 10.50.10.185/velero/velero:v1.9.7 \
--plugins 10.50.10.185/velero/velero-plugin-for-aws:v1.5.5 \
--namespace velero \
--secret-file ./credentials-velero \
--use-volume-snapshots=false \
--use-restic \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://chot-minio-api.prod.com:32111
注意点
- credentials-velero 的内容
# minio 的秘钥信息
[default]
aws_access_key_id=<access key id>
aws_secret_access_key=<secret access key>
- minio 的api 地址进行本地host解析( 请思考为何写svc不可以?)
安装完成后 velero 的服务端就部署成功了。
- 执行完之后在minio console 确认bucket是否创建成功
- 确认安装log
kubectl logs deployment/velero -n velero
备份mysql集群
mysql 一共两个节点
k get po -n mysql-velero
NAME READY STATUS RESTARTS AGE
mysql-0 2/2 Running 0 5m32s
mysql-1 2/2 Running 1 (4m45s ago) 5m20s
在mysql中创建一个数据库
mysql> create database velero_test;
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> show databases;
+------------------------+
| Database |
+------------------------+
| velero_test |
+------------------------+
这个ns等会备份完之后直接干掉。
备份命令
$ velero backup create mysql-velero-backup --include-namespaces mysql-velero --default-volumes-to-restic
Backup request "mysql-velero-backup" submitted successfully.
Run `velero backup describe mysql-velero-backup` or `velero backup logs mysql-velero-backup` for more details.
查看备份列表
elero backup get
$ velero backup get
NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR
mysql-velero-backup InProgress 0 0 2023-06-28 15:49:08 +0800 CST 29d default <none>
稍等片刻就备份好了,因为没啥数据。
此时minio 应该就有备份数据了。
如何恢复?
直接删除 mysql-velero 这个ns。然后恢复。
如何卸载?
首次安装的时候minio 的秘钥写错了,需要重新部署,卸载后重新部署
velero uninstall --force -n velero
Waiting for velero namespace "velero" to be deleted
.....................................................................
Velero namespace "velero" deleted
Velero uninstalled ⛵
报错处理
- minio 的svc地址报错
s3Url=http://chot-minio.minio.svc.cluster.local:9000 minio使用这个地址,备份报错
velero backup logs mysql-backup
An error occurred: Get "http://chot-minio.minio.svc.cluster.local:9000/velero/backups/mysql-backup/mysql-backup-logs.gz?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=wPZ0tVrD0Kdm1K4U%2F20230627%2Fminio%2Fs3%2Faws4_request&X-Amz-Date=20230627T084946Z&X-Amz-Expires=600&X-Amz-SignedHeaders=host&X-Amz-Signature=40edf68d0f72dbfafae2be6321c19d08259e07b53f8249efc9c868f4a3fb83f7":
dial tcp: lookup chot-minio.minio.svc.cluster.local on 10.0.2.3:53: no such host
minio 的svc如下,使用 chot-minio.minio.svc:9000
# 9000是minio 的api端口, 9001是web console 端口
k get svc -n minio
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
chot-minio NodePort 10.96.96.43 <none> 9000:32111/TCP,9001:30559/TCP 109d
服务端的安装使用的是celero客户段命令,这个velero命令是在宿主机,域名也是先走宿主机,宿主机当然不认识和这个集群内的域名了,所以这里应该使用nodeport + 本地hosts解析 访问minio api.
改成这个s3Url=http://chot-minio-api.prod.com:32111即可。宿主机本地需要解析这个域名。
- 备份报错
还是用ip地址吧,这个域名解析好像又跑到k8s内部去了。 10.96.2.53 这个IP 是coreDNS 的svc ip。
caused by: Head
"http://chot-minio-api.prod.com:32111/velero/backups/mysql-backup-new20230628/velero-backup.json":
dial tcp: lookup chot-minio-api.prod.com on 10.96.0.2:53: no such host
换成ip 就没有问题了。
- 恢复报错
恢复的时候需要和这个helper镜像。