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 #拉取镜像
3、 mkdir -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