searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

基于 Velero 的k8s集群备份与迁移

2023-02-24 02:05:48
270
0

Velero 是什么

Velero ,音标:[be'leɾo] 发音 ,  是西班牙语,意思是帆船,非常符合 Kubernetes 社区的命名风格。是 VMWare 开源的 k8s 集群备份、迁移工具。可以帮助我们完成 k8s 的例行备份工作,以便在出现问题的时候可以快速进行恢复。同时也提供了集群迁移功能,可以将 k8s 资源迁移到其他 k8s 集群的功能。

 

使用场景

  • 灾备场景:提供备份恢复k8s集群的能力
  • 迁移场景:提供拷贝集群资源到其他集群的能力(复制同步开发,测试,生产环境的集群配置,简化环境配置)

工作原理

Velero Docs - How Velero Works

1. 本地 Velero 客户端发送备份指令。 
2. Kubernetes 集群内就会创建一个 Backup 对象。
3. BackupController 监测 Backup 对象并开始备份过程。
4. BackupController 会向 API Server 查询相关数据。
5. BackupController 将查询到的数据备份到远端的对象存储。
6. Velero 在 Kubernetes 集群中创建了很多 CRD 以及相关的控制器,进行备份恢复等操作实质上是对相关 CRD 的操作。

 

支持的后端存储


Velero 支持两种关于后端存储的 CRD,分别是 BackupStorageLocation 和 VolumeSnapshotLocation。

  1. BackupStorageLocation    主要用来定义 Kubernetes 集群资源的数据存放位置,也就是集群对象数据,不包含 PVC 的数据。主要支持的后端存储是 S3 兼容的存储,比如:Mino 和阿里云 OSS 等。

  2. VolumeSnapshotLocation 主要用来给 PV 做快照,需要云提供商提供插件。

 

备份类型

  1. 按需备份 , 也就是立马备份

  2. 定时备份 , 也就是周期备份( 基于cron表达式)

 

最佳实践

前提条件:  已经部署了k8s集群

1. 部署minio

下载minio部署文件

https://github.com/vmware-tanzu/velero/blob/main/examples/minio/00-minio-deployment.yaml

kubectl apply -f  00-minio-deployment.yaml

该文件中设置默认的mino的 MINIO_ACCESS_KEY 和 MINIO_SECRET_KEY

如果要修改 MINIO_SECRET_KEY 的 值,请记住 下面标红的部分也要同步修改

 

2. 下载 velero 组件

从github下压缩包:

https://github.com/vmware-tanzu/velero/releases/download/v1.9.1/velero-v1.9.1-linux-amd64.tar.gz  

chmod +x velero

cp velero /usr/local/bin/

 

3. 安装 velero 组件

在当前目录下 创建minio鉴权文件 credentials-velero

# cat credentials-velero

[default]
aws_access_key_id = minio
aws_secret_access_key = minio123
 
注意这里的AK 和 SK 一定要和 MINIO_ACCESS_KEY 和 MINIO_SECRET_KEY 保持一致, 因为 velero 在访问minIO 时要使用AK和SK 。
 
执行安装命令

4. 查看部署状态

包括 pod 和 crd 

 

5. 测试按需备份

1. 创建一个测试Pod

kubectl run nginx --image ehub.ctcdn.cn/eck/nginx -l app=nginx

2. 创建备份

这里只备份label app=nginx的应用 , velero backup create nginx-backup --selector app=nginx

执行 velero get backup 查看备份状态,看到状态为Completed则表示备份完成。

 

6.测试恢复(按需备份)

1. 删除创建的nginx pod

2. 执行备份恢复命令

velero restore create --from-backup nginx-backup

3. 查看被删除的Pod已经恢复
 
 
 

7.测试定时备份

kubectl create deployment my-nginx --image=ehub.ctcdn.cn/eck/nginx
 

这里的定时备份,相当于每隔1分钟,执行一次备份任务。

8. 测试恢复( 定时备份)

执行恢复任务时,可以从历史备份记录中选择一个backup进行恢复。

进一步执行下,扩容操作,看看是否也备份了:   kubectl scale --replicas=3 deployment/my-nginx 

过一分钟后删除该deployment ,kubectl delete deployment my-nginx 

在执行下恢复命令  velero restore create --from-backup=deploy-nginx-20230220080323 , 可见恢复成功

 

9. VPC 备份

底层的volume需要实现CSI接口,这里缺乏环境,待有环境了再补充

实现csi-dirver接口的 driver组件

https://kubernetes-csi.github.io/docs/drivers.html

具体的例如:

https://github.com/kubernetes-csi/csi-driver-nfs

 

如何卸载

官网有说明:   https://velero.io/docs/v1.10/uninstalling/

kubectl delete namespace/velero clusterrolebinding/velero
kubectl delete crds -l component=velero
 
补充,也可以基于helm安装
helm repo add vmware-tanzu https://vmware-tanzu.github.io/helm-charts
helm search repo vmware-tanzu
helm pull vmware-tanzu/velero
 
 
0条评论
0 / 1000
Top123
10文章数
3粉丝数
Top123
10 文章 | 3 粉丝