3-1 基于velero与minio对K8s集群资源的备份和恢复

发布于:2023-01-20 ⋅ 阅读:(440) ⋅ 点赞:(0)


前言

Velero 是一个开源工具,用于安全地备份和恢复、执行灾难恢复以及迁移 Kubernetes 集群资源和持久卷。
MinIO 是高性能的对象存储,用于存储备份数据,客户端与存储服务器之间采用http/https通信协议。


工作流程

Velero和Minio备份工作流程图

  1. 管理员发送备份请求。
  2. velero向k8s管理节点API请求备份,需要config认证。
  3. k8s管理同意后,通过api-server导出etcd数据库数据。
  4. 备份数据又从管理节点传回给velero。
  5. velero会将备份数据上传到minio,需要velero-auth认证。


部署Minio

安装docker,下载minio,创建用于备份数据的目录:

tar zxvf docker-19.03.15-binary-install.tar.gz
./docker-install.sh

docker pull minio/minio:RELEASE.2022-08-08T18-34-09Z
mkdir -p /data/minio

创建minio容器,映射数据端口管理端口,挂载备份目录,自定义管理员账号密码,启动9999端口web服务:

docker run -d \
--name minio \
-p 9000:9000 \
-p 9999:9999 \
-v /data/minio:/minio \
--restart=always \
-e "MINIO_ROOT_USER=myadmin" \
-e "MINIO_ROOT_PASSWORD=mypasswd" \
minio/minio:RELEASE.2022-08-08T18-34-09Z \
server /minio --console-address '0.0.0.0:9999'

在运维主机打开浏览器访问minio,进入http://192.168.100.152:9999,其中152为物理机IP。用户myadmin,密码mypasswd。



首次登录,需要创建一个Bucket,类似一个目录,输入名字即可。到此minio部署完毕。


部署velero

下载velero二进制文件,该文件用于创建服务,备份恢复操作等。

wget https://github.com/vmware-tanzu/velero/releases/download/v1.8.1/velero-v1.8.1-linux-amd64.tar.gz
tar zxvf velero-v1.8.1-linux-amd64.tar.gz 
cp velero-v1.8.1-linux-amd64/velero /usr/local/bin/

准备环境:包括命名空间,docker程序,和登录minio的账号密码。

kubectl create ns velero-system

docker pull hub-mirror.c.163.com/velero/velero-plugin-for-aws:v1.3.1
docker tag hub-mirror.c.163.com/velero/velero-plugin-for-aws:v1.3.1 easzlab.io.local:5000/velero/velero-plugin-for-aws:v1.3.1
docker push easzlab.io.local:5000/velero/velero-plugin-for-aws:v1.3.1

cat << EOF > /root/.velero-auth.txt
[default]
aws_access_key_id = myadmin
aws_secret_access_key = mypasswd
EOF

安装velero,用到集群认证文件,下载插件镜像,minio账密和连接地址等。

velero install \
--kubeconfig  /root/.kube/config \
--namespace velero-system \
--provider aws \
--plugins easzlab.io.local:5000/velero/velero-plugin-for-aws:v1.3.1 \
--use-volume-snapshots=false \
--bucket mybucket  \
--secret-file /root/.velero-auth.txt \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://192.168.100.152:9000

程序会生成一个velero pod容器。部署完成可查看日志:

kubectl logs deployment/velero -n velero-system

备份资源

获取时间,自定义备份名,kube-system为需要备份的ns,velero-system选择的velero ns。

DATE=`date +%Y%m%d%H%M%S`
velero backup create kube-system-ns-backup-${DATE} \
--kubeconfig='/root/.kube/config' \
--include-namespaces kube-system \
--namespace velero-system


备份完成,可以在minio查看到备份文件。


恢复资源

首先,测试删除一个deployment:

kubectl delete -f busybox.yaml
deployment.apps "busybox" deleted

恢复ns资源,wait等待恢复全完成再操作,选择备份文件,k8s认证文件:

velero restore create --wait \
--from-backup kube-system-ns-backup-20220812202911 \
--kubeconfig='/root/.kube/config' \
--namespace velero-system

最后,查看恢复情况,发现连pod名字都没变。

 kubectl get pod -A


本文含有隐藏内容,请 开通VIP 后查看