Kubernetes集群在运行过程中,有可能因为配置失误、误操作或者异常关机等原因,导致集群崩溃,应用数据丢失。所以必须对整个集群的应用和数据进行备份,万一出现意外,可以及时恢复。

Velero可以对Kubernetes集群的资源和PV进行定期备份,避免损失。它也可以用来把整个集群的应用数据快速转移复制到其他集群上,减少迁移的工作量。

操作系统:Debian 12, Kubernetes 1.28.4

一、安装

1.安装MinIO

首先可以参考这篇文章,完成MinIO的安装和测试。

登录Minio管理界面,新建一个Bucket,名为velero。

2. 安装和设置Velero

在Kubernets集群的master主机上,运行下列命令

wget https://github.com/vmware-tanzu/velero/releases/download/v1.14.0/velero-v1.14.0-linux-amd64.tar.gz
tar zxvf velero-v1.14.0-linux-amd64.tar.gz
cd velero-v1.14.0-linux-amd64
mv velero /usr/local/bin/
wget https://github.com/vmware-tanzu/velero/releases/download/v1.14.0/velero-v1.14.0-linux-amd64.tar.gz
tar zxvf velero-v1.14.0-linux-amd64.tar.gz
cd velero-v1.14.0-linux-amd64
mv velero /usr/local/bin/

在master主机上,新建文件credentials-velero,内容如下

[default]
aws_access_key_id = <access-key>
aws_secret_access_key = <secret-key>

其中<access-key>和<secret-key>,是在MinIO中创建的access key和secret key,根据实际情况修改。

运行

velero install \
    --provider aws \
    --plugins velero/velero-plugin-for-aws:v1.2.1 \
    --bucket velero \
    --secret-file ./credentials-velero \
    --use-volume-snapshots=false \
    --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://<minio-server-ip>:9000

其中<minio-server-ip>是MinIO服务器的IP地址,根据实际情况修改。

二、运行和测试

1.部署测试资源

在master主机上,运行

kubectl create namespace velero-testing
kubectl create deployment nginx --image=nginx --namespace=velero-testing
kubectl get po -n velero-testing   

2. 对集群进行备份

运行

velero backup create test-backup

进行备份,可以运行

velero backup get

观察备份的进行情况。

3.删除测试资源

备份完成后,运行

kubectl delete namespace velero-testing

测试资源删除后,运行

kubectl get po -n velero-testing  

会提示pod不存在。

运行

kubectl get ns

可以看到命名空间velero-testing消失了。

4.恢复集群资源

运行

velero restore create --from-backup test-backup

进行恢复,运行

velero restore get

可以看到恢复的过程。

恢复完成后,运行

kubectl get po -n velero-testing  

可以看到命名空间velero-testing和pod nginx又回来了。

5.定期备份

运行

velero schedule create test-back-daily --schedule="0 1 * * *" 

会在每天的1:00进行定期备份,每次会生成一个名为test-back-daily-YYYYMMDDhhmmss的备份。

velero backup get

可以看到。

定时格式和cron是一样的。

三、其他命令

velero backup create test-backup --include-cluster-resources=true--include-namespaces kube-system 

除了备份应用和数据,还可以把Kubernetes集群本身的配置和资源也全都备份起来。

velero backup describe test-backup

可以看到每个备份的详细信息。

velero backup delete test-backup

可以删除单次备份数据。

在两个Kubernetes集群上安装Velero,连接到同一台MinIO服务器和bucket,那么就可以采取在一个集群上备份、另一个集群上恢复的方式,完成集群资源的迁移和复制。

参考

https://velero.io/docs/v1.14/contributions/minio

https://weng-albert.medium.com/k8s-backup-solution-velero-implementation-guide-en-ec06cb6b50dd

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注