实现基于velero对etcd的单独namespace的备份和恢复

velero是一个由vmware开源的用于K8S集群备份和迁移的工具,它支持按需备份namespace和资源对象,并能恢复单个组件,而不影响其他部分。velero利用对象存储如minio进行数据备份,并可通过任务计划实现周期性备份。文章详细介绍了如何部署minio以及配置velero,包括认证环境设置和插件配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介:

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是指向对象存储

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值