使用Velero和Restic进行Kubernetes持久卷备份
Velero是一个用于Kubernetes集群的灾难恢复工具。它提供了一组CRD(自定义资源定义),用于定义备份和恢复策略。Velero能够捕获集群的状态,并在需要时恢复到特定的状态。Restic是一个开源的备份工具,它使用增量备份策略来节省存储空间,同时提供了端到端加密,确保数据安全。Restic通过快照技术来跟踪文件系统的变化,仅备份变化的部分。1.K8S 版本v:1.24.0(可以看一键部署
引言
在当今的云计算时代,数据的重要性不言而喻。对于运行在Kubernetes集群中的应用,保护数据通常意味着要对持久卷(Persistent Volumes, PV)进行备份。Velero是一个流行的开源工具,用于备份和恢复Kubernetes集群资源和持久卷。而Restic提供了一个高效的方式来备份文件系统,并且与Velero紧密集成,使得备份过程更加强大和灵活。
在本文中,我们将探讨如何配置和使用Velero结合Restic来备份Kubernetes中的持久卷。我们将从安装和配置Velero开始,然后介绍如何添加Restic插件,并最终执行备份操作。
前提条件
- 一个运行中的Kubernetes集群。
- 对Kubernetes和Velero的基础知识了解。
- Helm用于安装Velero(可选,但推荐)。
- 对Restic的基本概念了解。
Velero简介
Velero是一个用于Kubernetes集群的灾难恢复工具。它提供了一组CRD(自定义资源定义),用于定义备份和恢复策略。Velero能够捕获集群的状态,并在需要时恢复到特定的状态。
Restic简介
Restic是一个开源的备份工具,它使用增量备份策略来节省存储空间,同时提供了端到端加密,确保数据安全。Restic通过快照技术来跟踪文件系统的变化,仅备份变化的部分。
需要准备的 有关于软件和镜像我都打包好了可以自行下载测试:
https://download.csdn.net/download/m0_59744084/89432430
1.K8S 版本v:1.24.0
(可以看一键部署https://download.csdn.net/download/m0_59744084/89397853)
2.velero 版本v:3.1.6
3.minio 最新的版本
4.OpenEBS软件
5.helm
第一步:安装 OPENEBS
地址:https://openebs.github.io/charts/openebs-operator.yaml (也可以直接下我的打包)
kubectl apply -f openebs-operator.yaml
检查pod是否都启动了:
OK成功了
第二步:安装测试的项目我这里以mysql为例(我也打包好了也可以直接复制)
在之前先创建一个mysql的命名空间:kubectl create ns mysql
apiVersion: v1
kind: ReplicationController
metadata:
name: mysql
namespace: mysql
labels:
name: mysql
spec:
replicas: 1
selector:
name: mysql
template:
metadata:
labels:
name: mysql
spec:
containers:
- name: mysql
image: nacos/nacos-mysql:5.7
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "root"
- name: MYSQL_DATABASE
value: "nacos_devtest"
- name: MYSQL_USER
value: "nacos"
- name: MYSQL_PASSWORD
value: "nacos"
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
subPath: mysql
readOnly: false
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-dynamic-pvc
---
apiVersion: v1
kind: Service
metadata:
namespace: mysql
name: mysql
labels:
name: mysql
spec:
type: NodePort
ports:
- port: 3306
targetPort: 3306
selector:
name: mysql
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
namespace: mysql
name: mysql-dynamic-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: openebs-hostpath
resources:
requests:
storage: 5Gi
kubectl create -f mysql-ceph.yaml构建
查看
kubectl get pod -n mysql
成功了远程端口试一下(这里我使用DBserver远程可以根据自己需要用其他客户端工具)
kubectl get svc -n mysql
远程32505端口成功了随便改一下数据做测试:
改成:
保存。
第三步安装minio(我用docker安装为了测试):
docker run -p 9000:9000 -p 9090:9090 --name minio \
-d --restart=always \
-e MINIO_ACCESS_KEY=minio \
-e MINIO_SECRET_KEY=minio@123 \
-v /usr/local/minio/data:/data \
-v /usr/local/minio/config:/root/.minio \
minio/minio server /data --console-address ":9000" --address ":9090"
安装好了创建一个存储桶比如叫ceshi(访问地址是9000,API是9090)用户名密码对应了MINIO_ACCESS_KEY 和 MINIO_SECRET_KEY两个字段:
点这个就可以创建到这里就算结束了
第四步:安装velero可以根据helm网上选用的版本来下载也可以直接下我的:
解压下来后需要更改values.yaml
主要是这个几个参数:
启用插件:
S3存储位置:
S3用户名密码
这个字段必须启用不然会报错守护进程:
启用全备份不加注解:
这是定时任务我设置的每五分钟进行mysql命名空间的备份:
然后就执行helm install velero . -n velero安装
成功了检查一下pod:
没问题了这个时候应该也触发了一次备份任务检查一下:
有了备份了然后minio也应该是这样的结构
然后进行测试把mysql删除进行还原:
先删命名空间
kubectl delete -f mysql-ceph.yaml
kubectl delete ns mysql
然后把openebs的pv删了应该是node的路径下/var/openebs/local/这个目录
然后就还原:
命令是:velero restore create --from-backup velero-mybackup-你的备份名 --restore-volumes
最后检查一下是否正常:
kubectl get pod -n mysql
上客户端远程测试看看pv是否还原回来了:
成功了整个命名空间都还原回来了!
有需要yaml文件可以直接下我的https://download.csdn.net/download/m0_59744084/89432430
更多推荐
所有评论(0)