
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