基于velero和minio实现k8s数据的备份和恢复

Velero简介

velero是一个有Vmware开源的工具,采用Go语言编写,用于安全的备份、恢复和迁移Kubernetes集群和持久卷。
velero官网:https://velero.io/
velero-github:https://github.com/vmware-tanzu/velero

velero的特性
  1. 备份可以按集群资源的子集,按命名空间、资源类型标签选择器进行过滤,从而为备份和恢复的内容提供高度的灵活性
  2. 支持复制当前 Kubernetes 集群的资源到其它 Kubernetes 集群
  3. 通过聚合 API 服务器公开的资源可以轻松备份和恢复,即使它们存储在单独的 etcd 数据库中
velero的组件

velero由一个客户端和一个服务端组成
客户端:运行在本地的命令行工具,只要配置好kubectl和kubeconfig认证文件就可使用,非常简单
服务端:运行在Kubernetes集群之上,负责执行具体的备份和恢复操作

velero工作流程

备份数据:

  1. 本地velero客户端发送备份命令,就会调用API Server创建Backup资源对象
  2. 服务端收到通知有新的Backup对象创建并执行验证
  3. 服务端开始执行备份过程,向API Server查询需要备份的数据
  4. 服务端调用对象存储服务,将备份数据保存到对象对象存储上

恢复数据:

  1. 本地velero客户端发送恢复指令,就会调用API Server创建Restore资源对象
  2. 服务端收到通知有新的Restore对象创建并执行验证
  3. 服务端调用对象存储,将指定的备份文件下载下来
  4. 服务端开始执行恢复过程,根据备份数据调用API Server重新创建相关资源对象
支持的对象存储

AWS S3 以及兼容 S3 的存储,比如:
Minio
ceph存储
Google Cloud 存储
Aliyun OSS 存储

minio部署

minio在这里是用来保存velero的备份数据,如果你有其它对象存储服务,也可以用它们来替换minio。

minio是一款高性能、分布式的对象存储系统,采用Go语言实现,兼容Amazon S3接口,客户端与存储服务器之间采用http/https通信协议。
minio官网:https://min.io/
minio中文网站:http://www.minio.org.cn/

minio支持单机部署和分布式部署,这里选择容器方式单机部署。

mkdir /data/minio	#创建minio的数据目录
docker pull quay.io/minio/minio
docker run \
   -d --restart=always \
   -p 9000:9000 \
   -p 9090:9090 \
   --name minio \
   -v /data/minio/data:/data \
   -e "MINIO_ROOT_USER=admin" \		#minio web界面的用户名
   -e "MINIO_ROOT_PASSWORD=Passw0rd" \		#minio web界面的密码
   quay.io/minio/minio server /data --console-address "0.0.0.0:9090"

访问minio界面
在这里插入图片描述

创建bucket
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

部署Velero

下载velero

在这里插入图片描述

wget https://github.com/vmware-tanzu/velero/releases/download/v1.9.0/velero-v1.9.0-linux-amd64.tar.gz
tar xf velero-v1.9.0-linux-amd64.tar.gz
cd velero-v1.9.0-linux-amd64/
cp velero /usr/bin/
echo 'source <(velero completion bash)' >>~/.bashrc
source .bashrc
velero --help
配置velero认证环境
配置velero访问minio
mkdir -p /data/velero
cd /data/velero
vim velero-auth.txt
[default]
aws_access_key_id = admin
aws_secret_access_key = Passw0rd
配置velero访问k8s

签发证书,用于velero访问API Server时认证使用

openssl genrsa --out velero-user.key 2048
openssl req -new -key velero-user.key \
-out velero-user.csr \
-subj "/CN=velero-user/O=k8s"

openssl x509 -req -days 3650 \
-CA /etc/kubernetes/ssl/ca.pem \
-CAkey /etc/kubernetes/ssl/ca-key.pem -CAcreateserial \
-in velero-user.csr -out velero-user.crt
rm -f velero-user.csr

准备kubeconfig认证文件

kubectl config set-cluster k8s-cluster1 --embed-certs \
--server=https://192.168.122.188:6443 -\
-certificate-authority=/etc/kubernetes/ssl/ca.pem \
--kubeconfig=/data/velero/velero-user.config

kubectl config set-credentials velero-user --embed-certs \
--client-certificate=/data/velero/velero-user.crt \
--client-key=/data/velero/velero-user.key \
--kubeconfig=/data/velero/velero-user.config

kubectl config set-context velero-user@k8s-cluster1 \
--cluster=k8s-cluster1 --user=velero-user \
--kubeconfig=/data/velero/velero-user.confi

kubectl config use-context velero-user@k8s-cluster1 --kubeconfig=/data/velero/velero-user.config

为velero-user用户授权

kubectl create clusterrolebinding velero-user@clusteradmin --clusterrole=cluster-admin --user=velero-user

安装velero

kubectl create ns velero-system
velero install --kubeconfig /data/velero/velero-user.config \
    --provider aws \
    --plugins velero/velero-plugin-for-aws:v1.3.1 \
    --bucket velero-data  \
    --secret-file /data/velero/velero-auth.txt \
    --use-volume-snapshots=false \
    --namespace velero-system \
    --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://192.168.122.10:9000

等待velero Pod成功启动且无报错就表示安装成功
在这里插入图片描述

velero使用

备份数据

创建备份

  1. 备份default名称空间中的数据,包含集群级别的资源
DATE=`date +%Y%m%d%H%M%S`
velero backup create default-ns-backup-${DATE} \
--include-cluster-resources=true \
--include-namespaces default \
--namespace velero-system \
--kubeconfig=/data/velero/velero-user.config

2.备份指定资源

#只备份两个指定的pod和两个clusterrole
DATE=`date +%Y%m%d%H%M%S`
velero backup create backup-${DATE} \
--ordered-resources='pods=default/testpod,kube-system/coredns-754f9b4f7c-v5fvr;clusterrole=admin,view' \
--include-namespaces=default,kube-system \
-n velero-system \
--kubeconfig=/data/velero/velero-user.config

查看备份状态,状态为Completed表示备份成功

velero backup get -n velero-system
velero backup describe default-ns-backup-20220813112844 -n velero-system

在这里插入图片描述

恢复数据

先删除一些资源,然后恢复数据看是否能恢复删除的资源

kubectl delete deploy/nginx-deploy
kubectl delete svc/nginx-svc

在这里插入图片描述

恢复数据

#从指定的备份文件恢复数据
velero restore create --wait \
--from-backup default-ns-backup-20220813112844 \
--kubeconfig=/data/velero/velero-user.config -n velero-system

在这里插入图片描述
查看删除资源已经恢复成功
在这里插入图片描述
关于备份和恢复的更多用法可以参考官方文档

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值