引言

在当今的云计算时代,数据的重要性不言而喻。对于运行在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

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐