基于velero和minio实现k8s数据的备份和恢复
velero是一个有Vmware开源的工具,采用Go语言编写,用于安全的备份、恢复和迁移Kubernetes集群和持久卷。
文章目录
Velero简介
velero是一个有Vmware开源的工具,采用Go语言编写,用于安全的备份、恢复和迁移Kubernetes集群和持久卷。
velero官网:https://velero.io/
velero-github:https://github.com/vmware-tanzu/velero
velero的特性
- 备份可以按集群资源的子集,按命名空间、资源类型标签选择器进行过滤,从而为备份和恢复的内容提供高度的灵活性
- 支持复制当前 Kubernetes 集群的资源到其它 Kubernetes 集群
- 通过聚合 API 服务器公开的资源可以轻松备份和恢复,即使它们存储在单独的 etcd 数据库中
velero的组件
velero由一个客户端和一个服务端组成
客户端:运行在本地的命令行工具,只要配置好kubectl和kubeconfig认证文件就可使用,非常简单
服务端:运行在Kubernetes集群之上,负责执行具体的备份和恢复操作
velero工作流程
备份数据:
- 本地velero客户端发送备份命令,就会调用API Server创建Backup资源对象
- 服务端收到通知有新的Backup对象创建并执行验证
- 服务端开始执行备份过程,向API Server查询需要备份的数据
- 服务端调用对象存储服务,将备份数据保存到对象对象存储上
恢复数据:
- 本地velero客户端发送恢复指令,就会调用API Server创建Restore资源对象
- 服务端收到通知有新的Restore对象创建并执行验证
- 服务端调用对象存储,将指定的备份文件下载下来
- 服务端开始执行恢复过程,根据备份数据调用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使用
备份数据
创建备份
- 备份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)