利用Velero对K8S备份还原与集群迁移实战 您所在的位置:网站首页 应用备份和恢复 利用Velero对K8S备份还原与集群迁移实战

利用Velero对K8S备份还原与集群迁移实战

2024-07-09 10:10| 来源: 网络整理| 查看: 265

一、简介

Velero 是一款云原生时代的灾难恢复和迁移工具,采用 Go 语言编写,并在 github 上进行了开源,利用 velero 用户可以安全的备份、恢复和迁移 Kubernetes 集群资源和持久卷。

开源地址:https://github.com/vmware-tanzu/velero 官方文档:https://velero.io/docs/v1.11/ 1.1 支持的版本列表

1.2 Velero组件

Velero 组件一共分两部分,分别是服务端和客户端。

服务端:运行在你 Kubernetes 的集群中 客户端:是一些运行在本地的命令行的工具,需要已配置好 kubectl 及集群 kubeconfig 的机器上 1.3 velero备份流程 velero客户端调用kubernetes API Server创建backup任务 Backup控制器基于watch机制通过Api Server获取到备份任务 Backup控制器开始执行备份动作,会通过请求Api Server获取到需要备份的数据 Backup 控制器将获取到的数据备份到指定的对象存储server端

1.4 Velero后端存储

Velero支持两种关于后端存储的CRD,分别是BackupStorageLocation和VolumeSnapshotLocation。

1.4.1 BackupStorageLocation

主要用来定义 Kubernetes 集群资源的数据存放位置,也就是集群对象数据,不是 PVC 的数据。主要支持的后端存储是 S3 兼容的存储,比如:Mino 和阿里云 OSS 等。

1.4.2 VolumeSnapshotLocation

主要用来给 PV 做快照,需要云提供商提供插件。阿里云已经提供了插件,这个需要使用 CSI 等存储机制。你也可以使用专门的备份工具 Restic,把 PV 数据备份到阿里云 OSS 中去(安装时需要自定义选项)。

Restic 是一款 GO 语言开发的数据加密备份工具,顾名思义,可以将本地数据加密后传输到指定的仓库。支持的仓库有 Local、SFTP、Aws S3、Minio、OpenStack Swift、Backblaze B2、Azure BS、Google Cloud storage、Rest Server。

二、准备存储插件

Velero支持很多种存储插件,可查看:https://velero.io/docs/v1.10/supported-providers/获取插件信息,我们这里使用minio作为S3兼容的对象存储提供程序。您也可以在任意地方部署Minio对象存储,只需要保证K8S集群可以访问到即可。

2.1 准备minio清单 --- apiVersion: v1 kind: Service metadata: name: minio namespace: velero labels: app: minio spec: selector: app: minio ports: - name: api port: 9000 protocol: TCP - name: console port: 9001 protocol: TCP --- apiVersion: apps/v1 kind: StatefulSet metadata: name: minio namespace: velero labels: app: minio spec: replicas: 1 serviceName: minio selector: matchLabels: app: minio template: metadata: labels: app: minio spec: containers: - name: minio image: docker.io/bitnami/minio:2023.3.22 imagePullPolicy: IfNotPresent ports: - containerPort: 9000 name: api protocol: TCP - containerPort: 9001 name: console protocol: TCP env: - name: MINIO_ROOT_USER value: "minio" - name: MINIO_ROOT_PASSWORD value: "minio123" - name: MINIO_DEFAULT_BUCKETS value: "velero" volumeMounts: - name: data mountPath: /data volumeClaimTemplates: - metadata: name: data spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 50Gi 2.2 创建minio应用 # 创建velero命名空间 $ kubectl create namespace velero # 创建minio资源 $ kubectl apply -f minio.yaml # 查看部署状态 $ kubectl get sts,pod,svc -n velero NAME READY AGE statefulset.apps/minio 1/1 66s NAME READY STATUS RESTARTS AGE pod/minio-0 1/1 Running 0 65s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/minio ClusterIP 10.99.223.162 9000/TCP,9001/TCP 66s # 开放NodePort端口 $ kubectl patch svc minio -n velero -p '{"spec": {"type": "NodePort"}}' $ kubectl patch svc minio -n velero --type='json' -p='[{"op": "replace", "path": "/spec/ports/0/nodePort", "value":9000},{"op": "replace", "path": "/spec/ports/1/nodePort", "value":9001}]' $ kubectl get svc -n velero NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE minio NodePort 10.99.223.162 9000:9000/TCP,9001:9001/TCP 140m

通过浏览器访问服务器IP:9001,并使用账号minio密码minio123登入验证。

三、安装velero v1.10.2

版本列表:https://github.com/vmware-tanzu/velero/releases

3.1 安装velero命令程序 $ wget https://github.com/vmware-tanzu/velero/releases/download/v1.10.2/velero-v1.10.2-linux-amd64.tar.gz $ tar zxf velero-v1.10.2-linux-amd64.tar.gz $ mv velero-v1.10.2-linux-amd64/velero /usr/bin/ $ velero -h # 启用命令补全 $ source /etc/bash_completion.d/velero 3.2 创建密钥 $ cat > credentials-velero


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有