searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

k8s备份恢复方案velero介绍

2023-07-17 08:24:49
139
0

背景

全托管eflink产品要上公有云,eflink控制台跑在蒙贵的一个中心集群上,有专门的运维维护团队,控制后台服务端BigDataManager目前跑在ESK的专有k8s集群上,这个专用k8s集群的运维维护需要我们自己做,那么集群数据备份与恢复目前熙攘这边采用的是开源方案velero,本文对velero的安装部署及使用做简要介绍。

Velero介绍

Velero 是 VMWare 开源的 k8s 集群备份、迁移工具。用于 Kubernetes 集群资源和持久存储卷(PV)的备份、迁移以及灾难恢复等。velero的基本原理就是将集群的数据备份到对象存储中,在恢复的时候将数据从对象存储中拉取下来。主要包括两个核心组件,分别为服务端和客户端,服务端运行在具体的 Kubernetes 集群中,客户端是运行在本地的命令行工具。

velero对比etcd存储与恢复数据

  1. 通过脚本直接备份etcd数据只能将集群中整个数据备份,恢复也是整个集群恢复,如果集群中某个namespace数据被误删除或丢失,通过etcd数据只恢复该namespace不可行。而Velero 可以对 Kubernetes 集群内按对象级别进行备份。
  2. 备份etcd数据到后端存储也不方便,而velero支持多种后端对象存储。
  3. velero支持将当前集群数据全部或部分迁移到开发,测试或生成集群,通过自动化脚本来恢复etcd数据到其他集群不可行。
  4. velero支持更多的插件和配置,更适合大规模生成环境。

Velero 的特性功能

  1. 支持 Kubernetes 集群数据备份和恢复
  2. 支持复制当前 Kubernetes 集群的资源到其它 Kubernetes 集群
  3. 支持复制生产环境到开发以及测试环境
  4. 支持集群中部分资源的备份与恢复
  5. 支持多种后端对象存储

Velero使用场景

  1. 灾备场景: 提供备份恢复k8s集群的能力
  2. 迁移场景: 提供拷贝集群资源到其他集群的能力(复制同步开发、测试、生产环境的集群)

Velero的工作流

  1. velero 客户端提交cr到 k8s apiserver 
  2. velero controller 监听crd资源的变化,会向API Server查询或提交相关数据。
  3. velero controller 对接第三方对象存储,存取k8s对象数据或者恢复k8s对象数据

备份过程:

  1. 本地 Velero 客户端发送备份指令。
  2. Kubernetes 集群内就会创建一个 Backup 对象。
  3. BackupController 监测 Backup 对象并开始备份过程。
  4. BackupController 会向 API Server 查询相关数据。
  5. BackupController 将查询到的数据备份到远端的对象存储。

Velero的实战

集群规划

3个节点的高可用集群 + 1个对象存储节点

192.168.10.100               master01

192.168.10.101               master02

192.168.10.102               master03

对象存储minio节点

192.168.10.103

对象存储minio安装

mkdir -p /minio/data
chmod -R 750 /minio/data
docker run -d --restart=on-failure --name minio \
    --publish 9000:9000 \
    --publish 9001:9001 \
    --env MINIO_ROOT_USER="admin" \
    --env MINIO_ROOT_PASSWORD="admin123" \
    --volume /minio/data:/data \
    bitnami/minio:latest

当log中有以下打印即启动成功,否则排查原因。

登录minio创建buckets  http://192.168.10.103:9001

部署Velero

  1. 版本下载解压

    版本:velero-v1.10.1-linux-amd64.tar.gz

    项目地址:https://github.com/vmware-tanzu/velero

    [root@master01 velero]# tar xvf velero-v1.10.1-linux-amd64.tar.gz
    [root@master01 velero]# mv velero-v1.10.1-linux-amd64/velero /usr/bin/
    [root@master01 velero]# chmod +x /usr/bin/velero
  2. 创建velero访问后端存储的密钥文件

    [root@master-1 opt]# cat /opt/credentials-velero 
    [default]
    aws_access_key_id = admin
    aws_secret_access_key = admin123
  3. 生成客户端证书文件

    cd /root/kubernetes
    vi user-csr.json
    {
      "CN": "awsuser",
      "hosts": [],
      "key": {
        "algo": "rsa",
        "size": 2048
      },
      "names": [
        {
          "C": "CN",
          "ST": "BeiJing",
          "L": "BeiJing",
          "O": "k8s",
          "OU": "System"
        }
      ]
    }
    
    cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes user-csr.json | cfssljson -bare awsuser
    
    [root@master-1 kubernetes]# cp awsuser-key.pem /etc/kubernetes/ssl/
    [root@master-1 kubernetes]# cp awsuser.pem /etc/kubernetes/ssl/
  4. 创建客户端config文件

    # 设置集群参数
    cd /root/config/
    export KUBE_APISERVER="https://192.168.10.100:6443"
    kubectl config set-cluster kubernetes \
    --certificate-authority=/etc/kubernetes/ssl/ca.pem \
    --embed-certs=true \
    --server=${KUBE_APISERVER} \
    --kubeconfig=awsuser.kubeconfig
    
    # 设置客户端认证参数
    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.kubeconfig
    
    # 设置上下文参数
    kubectl config set-context kubernetes \
    --cluster=kubernetes \
    --user=awsuser \
    --namespace=velero-system \
    --kubeconfig=awsuser.kubeconfig
    
    # 设置默认上下文
    kubectl config use-context kubernetes --kubeconfig=awsuser.kubeconfig
    
    # 赋值权限
    kubectl create clusterrolebinding awsuser --clusterrole=cluster-admin --user=awsuser
  5. 下载velero镜像

    由于环境上cri是containerd,配置的是本地镜像地址,所以需要将下面两个镜像先下载后推送私有镜像仓库

    docker pull bitnami/minio:2023.2.9-debian-11-r0
    docker pull velero/velero:v1.10.1
    docker pull velero/velero-plugin-for-aws:v1.1.0
    
    docker tag bitnami/minio:2023.2.9-debian-11-r0  easzlab.io.local:5000/bitnami/minio:2023.2.9-debian-11-r0
    docker push easzlab.io.local:5000/bitnami/minio:2023.2.9-debian-11-r0
    
    docker tag bitnami/velero/velero:v1.10.1  easzlab.io.local:5000/velero/velero:v1.10.1
    docker push easzlab.io.local:5000/velero/velero:v1.10.1
    
    docker tag velero/velero-plugin-for-aws:v1.1.0  easzlab.io.local:5000/velero/velero-plugin-for-aws:v1.1.0
    docker push easzlab.io.local:5000/velero/velero-plugin-for-aws:v1.1.0
  6. 部署velero

    velero install \
        --kubeconfig /root/config/awsuser.kubeconfig \
        --provider aws \
        --plugins easzlab.io.local:5000/velero/velero-plugin-for-aws:v1.1.0 \
        --bucket velero \
        --secret-file /opt/credentials-velero \
        --use-volume-snapshots=false \
    	--namespace velero-system \
        --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://192.168.10.103:9000

备份与恢复验证

  1. 创建一个备份

    velero backup create streamx-backup \
    --include-namespaces streamx-dev \
    --kubeconfig=/root/config/awsuser.kubeconfig \
    --namespace velero-system

  2. 查看该备份

    velero backup describe streamx-backup \
    --kubeconfig=/root/config/awsuser.kubeconfig \
    --namespace velero-system

  3. 删除streamx-dev命名空间下的所有资源并恢复

    kubectl get all -n streamx-dev
    
    kubectl delete ns streamx-dev
    
    kubectl get all -n streamx-dev
    
    velero restore create --from-backup streamx-backup --wait \
    --kubeconfig=/root/config/awsuser.kubeconfig \
    --namespace velero-system

velero常用命令

  1. 定时备份常用命令

    每日1点进行备份
    velero create schedule --schedule="0 1 * * *"

    每日12点进行备份,备份保留48小时
    velero create schedule --schedule="0 12 * * *" --ttl 48h

    每24小时进行一次备份
    velero create schedule --schedule="@every 24h"

    每日对 streamx-dev namespace 进行一次备份
    velero create schedule --schedule="@every 24h" --include-namespaces streamx-dev

  2. 资源查看

    velero backup get #备份查看
    velero schedule get #查看定时备份
    velero restore get #查看可恢复备份

 

0条评论
0 / 1000
l****n
3文章数
0粉丝数
l****n
3 文章 | 0 粉丝
l****n
3文章数
0粉丝数
l****n
3 文章 | 0 粉丝
原创

k8s备份恢复方案velero介绍

2023-07-17 08:24:49
139
0

背景

全托管eflink产品要上公有云,eflink控制台跑在蒙贵的一个中心集群上,有专门的运维维护团队,控制后台服务端BigDataManager目前跑在ESK的专有k8s集群上,这个专用k8s集群的运维维护需要我们自己做,那么集群数据备份与恢复目前熙攘这边采用的是开源方案velero,本文对velero的安装部署及使用做简要介绍。

Velero介绍

Velero 是 VMWare 开源的 k8s 集群备份、迁移工具。用于 Kubernetes 集群资源和持久存储卷(PV)的备份、迁移以及灾难恢复等。velero的基本原理就是将集群的数据备份到对象存储中,在恢复的时候将数据从对象存储中拉取下来。主要包括两个核心组件,分别为服务端和客户端,服务端运行在具体的 Kubernetes 集群中,客户端是运行在本地的命令行工具。

velero对比etcd存储与恢复数据

  1. 通过脚本直接备份etcd数据只能将集群中整个数据备份,恢复也是整个集群恢复,如果集群中某个namespace数据被误删除或丢失,通过etcd数据只恢复该namespace不可行。而Velero 可以对 Kubernetes 集群内按对象级别进行备份。
  2. 备份etcd数据到后端存储也不方便,而velero支持多种后端对象存储。
  3. velero支持将当前集群数据全部或部分迁移到开发,测试或生成集群,通过自动化脚本来恢复etcd数据到其他集群不可行。
  4. velero支持更多的插件和配置,更适合大规模生成环境。

Velero 的特性功能

  1. 支持 Kubernetes 集群数据备份和恢复
  2. 支持复制当前 Kubernetes 集群的资源到其它 Kubernetes 集群
  3. 支持复制生产环境到开发以及测试环境
  4. 支持集群中部分资源的备份与恢复
  5. 支持多种后端对象存储

Velero使用场景

  1. 灾备场景: 提供备份恢复k8s集群的能力
  2. 迁移场景: 提供拷贝集群资源到其他集群的能力(复制同步开发、测试、生产环境的集群)

Velero的工作流

  1. velero 客户端提交cr到 k8s apiserver 
  2. velero controller 监听crd资源的变化,会向API Server查询或提交相关数据。
  3. velero controller 对接第三方对象存储,存取k8s对象数据或者恢复k8s对象数据

备份过程:

  1. 本地 Velero 客户端发送备份指令。
  2. Kubernetes 集群内就会创建一个 Backup 对象。
  3. BackupController 监测 Backup 对象并开始备份过程。
  4. BackupController 会向 API Server 查询相关数据。
  5. BackupController 将查询到的数据备份到远端的对象存储。

Velero的实战

集群规划

3个节点的高可用集群 + 1个对象存储节点

192.168.10.100               master01

192.168.10.101               master02

192.168.10.102               master03

对象存储minio节点

192.168.10.103

对象存储minio安装

mkdir -p /minio/data
chmod -R 750 /minio/data
docker run -d --restart=on-failure --name minio \
    --publish 9000:9000 \
    --publish 9001:9001 \
    --env MINIO_ROOT_USER="admin" \
    --env MINIO_ROOT_PASSWORD="admin123" \
    --volume /minio/data:/data \
    bitnami/minio:latest

当log中有以下打印即启动成功,否则排查原因。

登录minio创建buckets  http://192.168.10.103:9001

部署Velero

  1. 版本下载解压

    版本:velero-v1.10.1-linux-amd64.tar.gz

    项目地址:https://github.com/vmware-tanzu/velero

    [root@master01 velero]# tar xvf velero-v1.10.1-linux-amd64.tar.gz
    [root@master01 velero]# mv velero-v1.10.1-linux-amd64/velero /usr/bin/
    [root@master01 velero]# chmod +x /usr/bin/velero
  2. 创建velero访问后端存储的密钥文件

    [root@master-1 opt]# cat /opt/credentials-velero 
    [default]
    aws_access_key_id = admin
    aws_secret_access_key = admin123
  3. 生成客户端证书文件

    cd /root/kubernetes
    vi user-csr.json
    {
      "CN": "awsuser",
      "hosts": [],
      "key": {
        "algo": "rsa",
        "size": 2048
      },
      "names": [
        {
          "C": "CN",
          "ST": "BeiJing",
          "L": "BeiJing",
          "O": "k8s",
          "OU": "System"
        }
      ]
    }
    
    cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes user-csr.json | cfssljson -bare awsuser
    
    [root@master-1 kubernetes]# cp awsuser-key.pem /etc/kubernetes/ssl/
    [root@master-1 kubernetes]# cp awsuser.pem /etc/kubernetes/ssl/
  4. 创建客户端config文件

    # 设置集群参数
    cd /root/config/
    export KUBE_APISERVER="https://192.168.10.100:6443"
    kubectl config set-cluster kubernetes \
    --certificate-authority=/etc/kubernetes/ssl/ca.pem \
    --embed-certs=true \
    --server=${KUBE_APISERVER} \
    --kubeconfig=awsuser.kubeconfig
    
    # 设置客户端认证参数
    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.kubeconfig
    
    # 设置上下文参数
    kubectl config set-context kubernetes \
    --cluster=kubernetes \
    --user=awsuser \
    --namespace=velero-system \
    --kubeconfig=awsuser.kubeconfig
    
    # 设置默认上下文
    kubectl config use-context kubernetes --kubeconfig=awsuser.kubeconfig
    
    # 赋值权限
    kubectl create clusterrolebinding awsuser --clusterrole=cluster-admin --user=awsuser
  5. 下载velero镜像

    由于环境上cri是containerd,配置的是本地镜像地址,所以需要将下面两个镜像先下载后推送私有镜像仓库

    docker pull bitnami/minio:2023.2.9-debian-11-r0
    docker pull velero/velero:v1.10.1
    docker pull velero/velero-plugin-for-aws:v1.1.0
    
    docker tag bitnami/minio:2023.2.9-debian-11-r0  easzlab.io.local:5000/bitnami/minio:2023.2.9-debian-11-r0
    docker push easzlab.io.local:5000/bitnami/minio:2023.2.9-debian-11-r0
    
    docker tag bitnami/velero/velero:v1.10.1  easzlab.io.local:5000/velero/velero:v1.10.1
    docker push easzlab.io.local:5000/velero/velero:v1.10.1
    
    docker tag velero/velero-plugin-for-aws:v1.1.0  easzlab.io.local:5000/velero/velero-plugin-for-aws:v1.1.0
    docker push easzlab.io.local:5000/velero/velero-plugin-for-aws:v1.1.0
  6. 部署velero

    velero install \
        --kubeconfig /root/config/awsuser.kubeconfig \
        --provider aws \
        --plugins easzlab.io.local:5000/velero/velero-plugin-for-aws:v1.1.0 \
        --bucket velero \
        --secret-file /opt/credentials-velero \
        --use-volume-snapshots=false \
    	--namespace velero-system \
        --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://192.168.10.103:9000

备份与恢复验证

  1. 创建一个备份

    velero backup create streamx-backup \
    --include-namespaces streamx-dev \
    --kubeconfig=/root/config/awsuser.kubeconfig \
    --namespace velero-system

  2. 查看该备份

    velero backup describe streamx-backup \
    --kubeconfig=/root/config/awsuser.kubeconfig \
    --namespace velero-system

  3. 删除streamx-dev命名空间下的所有资源并恢复

    kubectl get all -n streamx-dev
    
    kubectl delete ns streamx-dev
    
    kubectl get all -n streamx-dev
    
    velero restore create --from-backup streamx-backup --wait \
    --kubeconfig=/root/config/awsuser.kubeconfig \
    --namespace velero-system

velero常用命令

  1. 定时备份常用命令

    每日1点进行备份
    velero create schedule --schedule="0 1 * * *"

    每日12点进行备份,备份保留48小时
    velero create schedule --schedule="0 12 * * *" --ttl 48h

    每24小时进行一次备份
    velero create schedule --schedule="@every 24h"

    每日对 streamx-dev namespace 进行一次备份
    velero create schedule --schedule="@every 24h" --include-namespaces streamx-dev

  2. 资源查看

    velero backup get #备份查看
    velero schedule get #查看定时备份
    velero restore get #查看可恢复备份

 

文章来自个人专栏
云原生k8s
3 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0