veleo备份原理
-
本地
Velero
客户端发送备份指令。 -
Kubernetes
集群内就会创建一个Backup
对象。 -
BackupController
监测Backup
对象并开始备份过程。 -
BackupController
会向API Server
查询相关数据。 -
BackupController
将查询到的数据备份到远端的对象存储。
Velero
在 Kubernetes
集群中创建了很多 CRD
以及相关的控制器,进行备份恢复等操作实质上是对相关 CRD
的操作。
Velero 支持的后端存储
Velero
支持两种关于后端存储的 CRD
,分别是 BackupStorageLocation
和 VolumeSnapshotLocation
。
-
BackupStorageLocation
BackupStorageLocation
主要用来定义 Kubernetes
集群资源的数据存放位置,也就是集群对象数据,不是 PVC
的数据。主要支持的后端存储是 S3
兼容的存储,比如:Mino
和阿里云 OSS
等。
使用 Minio
apiVersion: velero.io/v1
kind: BackupStorageLocation
metadata:
name: default
namespace: velero
spec:
# 只有 aws gcp azure
provider: aws
# 存储主要配置
objectStorage:
# bucket 的名称
bucket: myBucket
# bucket内的
prefix: backup
# 不同的 provider 不同的配置
config:
#bucket地区
region: us-west-2
# s3认证信息
profile: "default"
# 使用 Minio 的时候加上,默认为 false
# AWS 的 S3 可以支持两种 Url Bucket URL
# 1 Path style URL:http://s3endpoint/BUCKET
# 2 Virtual-hosted style URL:http://oss-cn-beijing.s3endpoint 将 Bucker Name 放到了 Host Header中
# 3 阿里云仅仅支持 Virtual hosted 如果下面写上 true, 阿里云 OSS 会报错 403
s3ForcePathStyle: "false" # s3的地址,格式为 http://minio:9000 s3Url: http://minio:9000
使用阿里云的 OSS
apiVersion: velero.io/v1
kind: BackupStorageLocation
metadata:
labels:
component: velero
name: default
namespace: velero
spec:
config:
region: oss-cn-beijing
s3Url: http://oss-cn-beijing.aliyuncs.com
s3ForcePathStyle: "false"
objectStorage:
bucket: build-jenkins
prefix: ""
provider: aws
-
VolumeSnapshotLocation
VolumeSnapshotLocation 主要用来给 PV 做快照,需要云提供商提供插件。阿里云已经提供了插件,这个需要使用 CSI 等存储机制。你也可以使用专门的备份工具 Restic
,把 PV 数据备份到阿里云 OSS 中去(安装时需要自定义选项)。
# 安装时需要自定义选项
--use-restic
# 这里我们存储 PV 使用的是 OSS 也就是 BackupStorageLocation,因此不用创建 VolumeSnapshotLocation 对象
--use-volume-snapshots=false
安装veleo
1、下载
wget https://github.com/vmware-tanzu/velero/releases/tag/v1.4.0 tar zxvf velero-v1.4.0-linux-amd64.tar.gz cd velero-v1.4.0-linux-amd64
mv velero /usr/local/bin/
2、安装miniio
创建minio凭证
vi examples/minio/credentials-velero
[default] aws_access_key_id = minio aws_secret_access_key = minio123
3、创建minio对象存储
kubectl create -f examples/minio/00-minio-deployment.yaml
namespace/velero created deployment.apps/minio created service/minio created job.batch/minio-setup created
4、开放端口
kubectl expose deployment minio -n velero --type=NodePort --name=minio-nodeport --target-port=9000
[root@master velero-v1.4.0-linux-amd64]# kubectl get svc -n velero NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE minio ClusterIP 10.254.155.172 <none> 9000/TCP 5m24s minio-nodeport NodePort 10.254.203.212 <none> 9000:32027/TCP 2s [root@master velero-v1.4.0-linux-amd64]#
5、登录minio,地址:宿主机IP:32152,查看buckets(已创建名为velero的bucket)
6. 安装velero (使用本地集群minio作为备份存储)
velero install \
--provider aws \
--bucket velero \
--secret-file examples/minio/credentials-velero \
--use-volume-snapshots=false \
--plugins velero/velero-plugin-for-aws:v1.0.0 \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://192.178.7.5:32027
provider 只有 aws gcp azure
bucket 备份位置,之前minio页面只有velero这一个,所以使用它做备份位置
[root@master velero-v1.4.0-linux-amd64]# kubectl get pod -n velero NAME READY STATUS RESTARTS AGE minio-557f9875fd-8g65x 1/1 Running 0 107m minio-setup-wbgtn 0/1 Completed 3 107m velero-6fb968d5cc-v7t6s 1/1 Running 0 34s [root@master velero-v1.4.0-linux-amd64]#
7、对某个namespace备份
[root@master velero-v1.4.0-linux-amd64]# kubectl get po -n test NAME READY STATUS RESTARTS AGE centos-5f9b47d65-nrjvc 1/1 Running 4 9d [root@master velero-v1.4.0-linux-amd64]#
8、备份test namespace
velero backup create test-backup --include-namespaces test #执行备份
velero backup describe test-backup #查看备份
备份完毕后,登录minio页面可以看到数据已经在了
9、备份验证恢复
kubectl delete ns test
velero restore create --from-backup test-backup #指定对应的备份名称
再次查看,可以看到已经恢复了
[root@master velero-v1.4.0-linux-amd64]# kubectl get po -n test NAME READY STATUS RESTARTS AGE centos-5f9b47d65-nrjvc 1/1 Running 4 9d [root@master velero-v1.4.0-linux-amd64]#
此时登录minio页面可以看到执行恢复后,minio中创建了对应恢复目录及文件
10、定期备份
# 每日1点进行备份 velero create schedule <SCHEDULE NAME> --schedule="0 1 * * *" # 每日1点进行备份,备份保留72小时 velero create schedule <SCHEDULE NAME> --schedule="0 1 * * *" --ttl 72h # 每5小时进行一次备份 velero create schedule <SCHEDULE NAME> --schedule="@every 5h" # 每日对 指定 namespace 进行一次备份 (如panshi-qtc-dev) velero create schedule <SCHEDULE NAME> --schedule="@every 24h" --include-namespaces panshi-qtc-dev
11、资源查看
velero backup get #备份查看
velero schedule get #查看定时备份
velero restore get #查看可恢复备份
https://blog.csdn.net/weixin_41476014/article/details/106800677?%3E
https://zhuanlan.zhihu.com/p/92853124
https://blog.csdn.net/easylife206/article/details/102927512