K8s灾备利器:Velero部署与备份还原演示

K8s 备份与恢复利器:Velero 实战指南

Velero 是K8s 专用备份、恢复、迁移工具,由 VMware 开源、CNCF 托管。对 Kubernetes 集群里的应用配置、存储卷数据做备份;支持误删回滚、集群灾备、跨集群迁移。

核心作用

对 Kubernetes 集群里的应用配置、存储卷数据做备份;支持误删回滚、集群灾备、跨集群迁移。

工作方式

  • 把 Deployment、Service、ConfigMap 等 K8s 资源打包;

  • 搭配 Restic 可同步备份容器持久卷(PVC)里的文件 / 数据库数据;

  • 数据统一存到 S3 兼容对象存储(MinIO、腾讯云 COS、阿里云 OSS 等)。

一、安装velero客户端(master节点执行)

地址官方安装地址:https://github.com/velero-io/velero/releases/tag/v1.18.1

bash 复制代码
wget https://github.com/velero-io/velero/releases/download/v1.18.1/velero-v1.18.1-linux-amd64.tar.g

解压

bash 复制代码
tar -zxvf velero-v1.18.1-linux-amd64.tar.gz

得到三个东西,我们需要用到的是velero二进制文件

velero拷贝到/usr/local/bin/下,这样我们就可以全局使用velero

bash 复制代码
cp velero /usr/local/bin/

二、MinIo创建Bucket

在MinIo中创建一个Bucket,取名为k8s

三、部署velero服务端(master节点执行)

1.创建minio秘钥文件

文件名:access-minio

ini 复制代码
[default]
aws_access_key_id = minioadmin
aws_secret_access_key = minioadmin123
2.创建部署velero服务端脚本
bash 复制代码
velero install \
  --provider aws \                        #  存储提供商:MinIO 兼容 S3 协议,所以固定写 aws
  --plugins velero/velero-plugin-for-aws:v1.9.0 \  #  官方 S3 兼容插件,对接对象存储
  --bucket k8s \                          #  MinIO 里的桶名称(上面创建的桶叫 k8s)
  --secret-file ./access-minio \          #  上面创建的MinIO 认证密钥文件
  --kubeconfig=/root/.kube/config \       #  指定 kubeconfig,让 velero 连接集群
  --use-volume-snapshots=false \          #  关闭云厂商卷快照(用的是自建 MinIO,不需要)
  --backup-location-config \              #  备份存储位置配置(下面一堆都是它的子参数)
  region=minio \                          #  区域:MinIO 无区域概念,随便填 minio
  s3ForcePathStyle="true" \               #  MinIO 强制开启路径模式(必须 true)
  s3Url=http://minio.test.com:9000   #  你的MinIO API 地址(注意是 9000 端口,不是控制台 9001)
3.执行脚本
bash 复制代码
bash velero.sh

执行完脚本可以看到在velero命名空间下的pod创建成功,并处于running

四、备份

我们对命名空间test下的一个pod进行测试

创建一个名为 test-backup 的备份,只备份 test 这个命名空间里的所有资源。

bash 复制代码
velero backup create test-backup --include-namespaces test

返回以下内容代表成功创建

查看备份状态,可以看到 STATUS:Completed

bash 复制代码
velero get backup

在MinIo web页面中可以看到备份的资源文件

五、还原测试

1.删除test命名空间
bash 复制代码
kubectl delete ns test
2.还原
bash 复制代码
velero restore create --from-backup test-backup --kubeconfig=/root/.kube/config

可以看到资源已经全部还原