基于Velero+minio实现Kubernetes业务数据备份与恢复

Velero介绍:

在这里插入图片描述
Velero是vmware开源的一个云原生的灾难恢复和迁移工具,采用go语言编写。可用于安全地备份、恢复和迁移 Kubernetes 集群和持久卷。它可以在本地和公有云中运行。Velero 由一个在您的 Kubernetes 集群中作为部署运行的服务器进程和一个命令行界面 (CLI) 组成,DevOps 团队和平台操作员可通过该界面配置计划备份、触发临时备份、执行恢复等。

是什么让 Velero 脱颖而出?

与直接访问 Kubernetes etcd 数据库以执行备份和恢复的其他工具不同,Velero 使用 Kubernetes API 来捕获集群资源的状态并在必要时恢复它们。这种 API 驱动的方法具有许多关键优势:

  • 备份可以捕获集群资源的子集,按命名空间、资源类型和/或标签选择器进行过滤,从而为备份和恢复的内容提供高度的灵活性。
  • 托管 Kubernetes 产品的用户通常无法访问底层 etcd 数据库,因此无法直接备份/恢复它。
  • 支持ceph、oss等对象存储,etcd快照是一个本地文件。
  • 通过聚合 API 服务器公开的资源可以轻松备份和恢复,即使它们存储在单独的 etcd 数据库中。

velero备份流程

在这里插入图片描述

  • Velero 客户端调用Kubernetes API Server创建backup任务。
  • backup 控制器基于watch 机制通过API Server获取到备份任务。
  • backup 控制器开始执行备份动作,其会通过请求API Server获取需要备份的数据。
  • backup 控制器获取到的数据备份到指定的对象存储server端。

部署minio

1、部署docker环境
2、docker pull minio/minio:RELEASE.2022-04-12T06-55-35Z #拉取镜像
3mkdir -p /data/minio
4、运行minio容器
docker run --name minio \
-p 9000:9000 \
-p 9999:9999 \
-d --restart=always \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=admin@123" \
-v /data/minio/data:/data \
minio/minio:RELEASE.2022-04-12T06-55-35Z server /data \
--console-address '0.0.0.0:9999'
http://ip:9999 #访问方式

创建bucket

部署velero

wget https://github.com/vmware-tanzu/velero/releases/download/v1.8.1/velero-v1.8.1-linux-amd64.tar.gz
tar xvf velero-v1.8.1-linux-amd64.tar.gz 
cp velero-v1.8.1-linux-amd64/velero  /usr/local/bin/
velero  --help

velero配置

#使用安装集群创建的证书即可
#创建认证文件
cd /root/.kube/
vim velero-auth.txt
[default]
aws_access_key_id = admin
aws_secret_access_key = admin@123
#创建namespace:
kubectl create ns velero-system

安装velero

velero --kubeconfig  /root/.kube/config \
	install \
    --provider aws \
    --plugins velero/velero-plugin-for-aws:v1.3.1 \
    --bucket velerodata  \
    --secret-file ./velero-auth.txt \
    --use-volume-snapshots=false \
	--namespace velero-system \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://192.168.2.131:9000

验证安装

root@ubuntu01:~/.kube# kubectl get pods -n velero-system
NAME                      READY   STATUS    RESTARTS   AGE
velero-858b9459f9-w7nzz   1/1     Running   0          2m6s
注意:pod状态为running表示安装成功

指定命名空间备份及恢复

指定application命名空间备份

velero backup create application-ns-backup-20220801 \
--include-cluster-resources=true \
--include-namespaces application \
--kubeconfig=/root/.kube/config \
--namespace velero-system

Backup request "application-ns-backup-20220801" submitted successfully.
Run `velero backup describe application-ns-backup-20220801` or `velero backup logs application-ns-backup-20220801` for more details.

登录minio查看备份结果:
在这里插入图片描述
minio验证备份数据
在这里插入图片描述

备份恢复

删除pod并验证数据恢复

kubectl delete deploy myserver-busybox-deployment myserver-centos-deployment myserver-nginx-deployment -n application
 #验证application已删除
root@ubuntu01:~# kubectl get pods -A
NAMESPACE       NAME                                         READY   STATUS    RESTARTS       AGE
default         mytomcat-54fb758f49-dhh9r                    1/1     Running   1 (15h ago)    39h
kube-system     calico-kube-controllers-5c8bb696bb-8ksj2     1/1     Running   10 (15h ago)   6d11h
kube-system     calico-node-2479h                            1/1     Running   17 (15h ago)   9d
kube-system     calico-node-5ctxt                            1/1     Running   18 (16h ago)   9d
kube-system     calico-node-ll9rb                            1/1     Running   15 (15h ago)   9d
kube-system     coredns-84b58f6b4-mjv7q                      1/1     Running   6 (15h ago)    9d
kube-system     dashboard-metrics-scraper-864d79d497-p4dp4   1/1     Running   4 (15h ago)    6d11h
kube-system     kubernetes-dashboard-5fc74cf5c6-p858p        1/1     Running   35 (15h ago)   9d
kube-system     metrics-server-69797698d4-8rzkv              1/1     Running   19 (15h ago)   6d11h
velero-system   velero-858b9459f9-69mwf                      1/1     Running   0              15h

恢复命令

velero restore create --from-backup application-ns-backup-20220801 --kubeconfig=/root/.kube/config --namespace velero-system

验证恢复后的pod是否存在

root@ubuntu01:~# kubectl get pods -A
NAMESPACE       NAME                                           READY   STATUS    RESTARTS       AGE
application     myserver-busybox-deployment-785fdb785f-wkbsn   1/1     Running   0              34s
application     myserver-centos-deployment-5564dff7bb-jf7rs    1/1     Running   0              34s
application     myserver-nginx-deployment-56f4ccb9bd-q44ch     1/1     Running   0              34s
default         mytomcat-54fb758f49-dhh9r                      1/1     Running   1 (16h ago)    39h
kube-system     calico-kube-controllers-5c8bb696bb-8ksj2       1/1     Running   10 (16h ago)   6d11h
kube-system     calico-node-2479h                              1/1     Running   17 (15h ago)   9d
kube-system     calico-node-5ctxt                              1/1     Running   18 (16h ago)   9d
kube-system     calico-node-ll9rb                              1/1     Running   15 (16h ago)   9d
kube-system     coredns-84b58f6b4-mjv7q                        1/1     Running   6 (16h ago)    9d
kube-system     dashboard-metrics-scraper-864d79d497-p4dp4     1/1     Running   4 (16h ago)    6d11h
kube-system     kubernetes-dashboard-5fc74cf5c6-p858p          1/1     Running   35 (16h ago)   9d
kube-system     metrics-server-69797698d4-8rzkv                1/1     Running   19 (16h ago)   6d11h
velero-system   velero-858b9459f9-69mwf                        1/1     Running   0              15h

备份指定资源对象

备份指定namespace中的pod或特定资源

velero backup create pod-backup-20220804 --include-cluster- resources=true --ordered-resources 'pods=application/myserver-busybox-deployment,defafut/mytomcat' --namespace velero-system --include-namespaces=application,defafut

批量备份所有namespace

vim /data/velero/ns-backup.sh 

# !/bin/bash
NS_NAME=` kubectl get ns | awk '{if (NR>1){print}}' | awk '{print $1 }'` DATE=`date +%Y%m%d%H%M%S` 
cd /data/velero/
for i in ${NS_NAME};do
 velero backup create ${i}-ns-backup-${DATE} \
--include-cluster-resources=true \
--include-namespaces ${i} \
--kubeconfig=/root/.kube/config \
--namespace velero-system
done
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值