简介:
velero是由vmware开源的云原生的恢复和迁移工具,由go语言编写
velero的工作方式是把K8S中的数据备份到对象存储以实现高可用和持久化,默认备份保存时间720小时,相较于etcd快照全局备份来说velero可以有针对性的备份,比如按照namespace单独备份,只备份单独的资源对象,在恢复时只恢复单独的namespace或资源对象,而不会影响其它namespace中的pod运行
velero支持ceph、oss等对象存储,也支持存放本地文件,但一般不推荐
velero支持任务计划实现周期备份
备份流程:
veleto客户端创建备份请求,发送给apiserver,apiserver把数据写入etcd,而后veleto server端拿到这个请求,再请求apiserver
一、部署minio
1、启动minio服务
创建个目录保存minio的数据
root@k8s-deploy:~# mkdir -p /data/minio
下载镜像
root@k8s-deploy:~# docker pull minio/minio:RELEASE.2022-04-12T06-55-35Z
创建minio容器,如果不指定,则默认用户名与密码为 minioadmin/minioadmin,可以通过环境变量自定义
root@k8s-deploy:/data/minio# docker run --name minio \
> -p 9000:9000 \
> -p 9999:9999 \
> -d --restart=always \
> -e "MINIO_ROOT_USER=admin" \
> -e "MINIO_ROOT_PASSWORD=123456789" \
> -v /data/minio/data:/data \
> minio/minio:RELEASE.2022-04-12T06-55-35Z server /data \
> --console-address '0.0.0.0:9999'
服务启动后登录
2、创建kucket
创建一个bucket,它是用来存放归档数据的; 每一个bucket可用来存储不同的项目数据
2.1、第一步点击创建一个bucket
2.2、创建一个名叫velerodata的bucket
创建好后,对象存储服务器就准备好了
二、部署velero
1、下载velero包
下载velero客户端客户端
https://github.com/vmware-tanzu/velero/releases
2、解压
root@master1:~# cd /usr/local/src/
root@master2:/usr/local/src# wget https://github.com/vmware-tanzu/velero/releases/download/v1.9.3/velero-v1.8.1-linux-amd64.tar.gz
root@master2:/usr/local/src# tar xvf velero-v1.8.1-linux-amd64.tar.gz
将velero命令放到系统全局变量中,确保在任何路径可执行该命令
root@master2:/usr/local/src# cp velero-v1.8.1-linux-amd64/velero /usr/local/bin/
root@master2:/usr/local/src# which velero
/usr/local/bin/velero
三、配置velero认证环境
认证环境包含两个方面:1、访问minio的对象存储;2、访问apiserver
1、访问minio的对象存储
1.1、准备访问用户认证信息
创建工作目录
root@master2:~# mkdir /data/velero -p
创建认证文件,存放访问minio的账号密码
root@master2:~# cd /data/velero/
root@master2:/data/velero# vim velero-auth.txt
default]
aws_access_key_id = admin
aws_secret_access_key = 12345678
准备user-csr文件:如果不创建,也可以直接使用k8s的config文件
创建新用户awsuser
root@master2:/data/velero# vim awsuser-csr.json
{
"CN": "awsuser",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "BeiJing",
"L": "BeiJing",
"O": "k8s",
"OU": "system"
}
]
}
1.2、签发证书
:准备证书签发环境 ,使用cfssl签发证书
需要三个命令文件,可以到github官网下载,也可以从部署节点拷贝到master1
root@k8s-deploy:~# scp /etc/kubeasz/bin/cfssl* master1:/usr/local/bin/
确保master1可以执行cfssl命令
root@master2:~# which cfssl
/usr/local/bin/cfssl
执行证书签发:
root@k8s-deploy:~# scp /etc/kubeasz/clusters/k8s-cluster1/ssl/ca-config.json master1:/data/velero/
K8S版本1.24.x 的执行证书签发
root@master2:/data/velero# /usr/local/bin/cfssl gencert -ca=/etc/kubernetes/ssl/ca.pem -ca-key=/etc/kubernetes/ssl/ca-key.pem -config=./ca-config.json -profile=kubernetes ./awsuser-csr.json | cfssljson -bare awsuser
签发后生产了一个公钥一个私钥
1.3、分发证书到api-server证书路径:
root@master1:/data/velero# cp awsuser-key.pem /etc/kubernetes/ssl/
root@master1:/data/velero# cp awsuser.pem /etc/kubernetes/ssl/
1.4、生成集群认证config文件:
root@master2:/data/velero# export KUBE_APISERVER="https://172.31.7.102:6443"
root@master2:/data/velero# kubectl config set-cluster kubernetes \
> --certificate-authority=/etc/kubernetes/ssl/ca.pem \
> --embed-certs=true \
> --server=${KUBE_APISERVER} \
> --kubeconfig=./awsuser.kubeconfig
新生成的这个kubeconfig是awsuser用户的
1.5、设置客户端证书认证:
root@master2:/data/velero# kubectl config set-credentials awsuser \
> --client-certificate=/etc/kubernetes/ssl/awsuser.pem \
> --client-key=/etc/kubernetes/ssl/awsuser-key.pem \
> --embed-certs=true \
> --kubeconfig=./awsuser.kubeconfi
把awsuser的公钥和私钥加载进awsuser.kubeconfig文件中
1.6、设置上下文参数:
root@master2:/data/velero# kubectl config set-context kubernetes \
> --cluster=kubernetes \
> --user=awsuser \
> --namespace=velero-system \
> --kubeconfig=./awsuser.kubeconfig
1.7、设置默认上下文:
root@master2:/data/velero# kubectl config use-context kubernetes --kubeconfig=awsuser.kubeconfig
2、创建用户
K8S集群中创建awsuser用户
root@master2:/data/velero# kubectl create clusterrolebinding awsuser --clusterrole=cluster-admin --user=awsuser
clusterrolebinding是角色绑定,把awsuser用户设置为集群的admin用户权限
创建namespace:
root@master2:/data/velero# kubectl create ns velero-system
namespace/velero-system created
执行安装:
root@master2:/data/velero# velero --kubeconfig ./awsuser.kubeconfig \
> install \
> --provider aws \
> --plugins velero/velero-plugin-for-aws:v1.3.1 \
> --bucket velerodata \
> --secret-file ./velero-auth.txt \
> --use-volume-snapshots=false \
> --namespace velero-system \
> --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://172.31.7.110:9999
注解:
--plugins velero/velero-plugin-for-aws:v1.3.1 使用这个插件来访问对象存储,是个镜像
--bucket velerodata 这个bucket就是我们自己创建的
--secret-file ./velero-auth.txt 认证文件是当前目录下的velero-auth.txt,提供了用户和口令
--use-volume-snapshots=false 是否使用快照,不使用快照
--namespace velero-system 把它创建在velero-system的namespace中
--backup-location-config backup配置使用minio,使用s3的路径,URL是指向对象存储