Velero备份k8s全流程

什么是Velero

Velero(以前称为 Heptio Ark)提供备份和恢复 Kubernetes 集群资源和持久卷的工具。
可以在公有云平台上或本地运行 Velero。

Velero功能:
  备份集群并在丢失时进行恢复。
  集群资源迁移到其他集群。
  生产集群复制到开发和测试集群。

Velero的工作原理

Velero的基本原理就是将Kubernetes 集群资源对象数据备份到对象存储中,
并能从对象存储中拉取备份数据来恢复集群资源对象数据。
不同于etcd 备份——将集群的全部资源备份起来,Velero 是对Kubernetes 集群内资源对象级别进行备份,
可以通过对Type、Namespace、Label等对象进行分类备份或者恢复。


Velero备份流程  
1.velero客户端调用kubernetes API Server创建backup任务
2.Backup控制器基于watch(监控)机制通过Api Server获取到备份任务
3.Backup控制器开始执行备份动作,会通过请求Api Server获取到需要备份的数据
4.Backup 控制器将获取到的数据备份到指定的对象存储server端
5.BAckup 通过API快照磁盘   数据成功存放到对象存储中

1.velero客户端输入命令,请求到达 k8s的api server 跟Backup 控制器进行连接
2.Backup 控制器向api server请求查询数据 api server将请求转发到etcd,Backup 控制器收到进行备份
3.Backup 控制器将获取到的数据备份到指定的对象存储server端
4.BAckup 通过API快照磁盘   数据成功存放到对象存储中


Velero恢复流程
1.Velero 客户端调用 Kubernetes API 服务器来创建一个 Restore 对象。
2.RestoreController 通知新的 Restore 对象并执行验证。
3.从对象存储服务中 RestoreController 获取备份信息。
  然后它对备份的资源进行一些预处理,以确保这些资源可以在新集群上运行。
  例如,使用备份的 API 版本来验证还原资源是否可以在目标集群上运行。
4.RestoreController 启动还原过程,一次还原每个符合条件的资源。
5.默认情况下,Velero 执行非破坏性恢复,这意味着它不会删除目标集群上的任何数据。
如果备份中的资源已存在于目标集群中,Velero将跳过该资源。
您可以将 Velero 配置为使用更新策略,而不是使用–existing-resource-policy 恢复标志。
当此标志设置为 时 update,Velero 将尝试更新目标集群中的现有资源以匹配备份中的资源。

Velero安装 

Velero使用Go语言编写   用的是sc架构 

Velero的客户端:一般搭配定时任务在业务低谷期进行备份 
Velero的服务端:他其实就是个pod  我们一般叫Backup控制器 
对象存储:这里用minio来做对象存储   也可以用oss等其他云产品存储

Minio的安装

1. docker官网拉去镜像到本地
2. docker run 一键部署
docker run -p 9000:9000 -p 9090:9090 --name minio -d --restart=always \
-e "MINIO_ACCESS_KEY=admin" \
-e "MINIO_SECRET_KEY=12345678" \
-e MINIO_JAVA_OPTS="-Xms2g -Xmx4g" \
-v /home/minio/data:/data minio/minio server /data \
--console-address ":9090" --address ":9000"

3.webui页面登录   如果没有指定密码 默认密码是:minioadmin minioadmin
4.创建buckets存储桶 起名 创建 见下图

 

 安装 velero

客户端安装

需要在有kubectl的k8s集群安装 velero客户端
官网文档       https://github.com/vmware-tanzu/velero
根据相应版本进行下载
1.wget https://mirror.ghproxy.com/https://github.com/vmware-tanzu/velero/releases/download/v1.14.0/velero-v1.14.0-linux-amd64.tar.gz
2.tar -zxvf  velero-v1.14.0-linux-amd64.tar.gz
3.将文件传到usr目录下
cp velero-v1.14.0-linux-amd64/velero /usr/local/bin/
4.检查版本 (可能会报没有下载服务端的错)因为本来就没下载
velero version    

 服务端安装

1. 创建 认证目录
mkdir -p /data/velero

2.在k8s端配置minio的账号密码文件
cat > credentials-velero <<EOF
[default]
aws_access_key_id = admin
aws_secret_access_key = 12345678
EOF

3.服务端配置部署
velero install \
  --image registry.aliyuncs.com/elvin/velero:v1.14.0 \
  --plugins registry.aliyuncs.com/elvin/velero-plugin-for-aws:v1.9.2 \
  --provider aws \
  --bucket velero \
  --use-volume-snapshots=false \
  --secret-file /root/credentials-velero \
  --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://10.0.0.210:9090

这里可能镜像拉去失败 教你一个排错技巧  以后可以经常使用
1. 首先先检查对应pod
[root@master231 ~]# kubectl get pods -n velero
NAME                      READY   STATUS         RESTARTS   AGE
velero-6d9c796655-2qgx8   0/1     ErrImagePull   0          12s

2.查看他的详细信息
[root@master231 ~]# kubectl describe pod -n velero velero-6d9c796655-2qgx8
(找到最底下Events)检查failed字段  这里是镜像拉去失败
Events:
  Type     Reason     Age                 From               Message
  ----     ------     ----                ----               -------
  Normal   Scheduled  109s                default-scheduler  Successfully assigned velero/velero-6d9c796655-2qgx8 to worker233
  Normal   Pulling    109s                kubelet            Pulling image "registry.aliyuncs.com/elvin/velero-plugin-for-aws:v1.9.2"
  Normal   Pulled     101s                kubelet            Successfully pulled image "registry.aliyuncs.com/elvin/velero-plugin-for-aws:v1.9.2" in 8.336905959s (8.336913987s including waiting)
  Normal   Created    101s                kubelet            Created container elvin-velero-plugin-for-aws
  Normal   Started    100s                kubelet            Started container elvin-velero-plugin-for-aws
  Warning  Failed     58s (x3 over 99s)   kubelet            Error: ErrImagePull
  Normal   BackOff    21s (x5 over 99s)   kubelet            Back-off pulling image "registry.aliyuncs.com/elvin/velero:v1.14.0"
  Warning  Failed     21s (x5 over 99s)   kubelet            Error: ImagePullBackOff
  Normal   Pulling    10s (x4 over 100s)  kubelet            Pulling image "registry.aliyuncs.com/elvin/velero:v1.14.0"
  Warning  Failed     9s (x4 over 99s)    kubelet            Failed to pull image "registry.aliyuncs.com/elvin/velero:v1.14.0": rpc error: code = Unknown des

3.手动测试拉去镜像  
docker pull registry.aliyuncs.com/elvin/velero:v1.14.0

4.发现拉取失败  检查服务器是否翻墙
[root@master231 ~]# ping google.com
PING google.com (28.0.0.23) 56(84) bytes of data.
64 bytes from 28.0.0.23 (28.0.0.23): icmp_seq=1 ttl=128 time=0.348 ms

5.可以翻墙 那可能就是这个镜像源的问题  修改成官方源镜像拉取
[root@master231 ~]# docker pull velero/velero:v1.14.0

6.编辑资源清单的镜像拉取
[root@master231 ~]# kubectl edit deployment velero -n velero

修改 spec.template.spec.containers.image 字段,替换为官方镜像:
image: velero/velero:v1.14.0

7.等待加载镜像拉去成功
接下来就可以备份了

Velero的使用 

 一些Velero的常用命令
创建备份  velero backup create    
velero backup create data-backup --include-namespaces test -n velero    
创建备份                          

 未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值