zoukankan      html  css  js  c++  java
  • 使用Velero备份Kubernetes集群

    1. Velero 简介

    Velero 是 heptio 团队(被 VMWare 收购)开源的 Kubernetes 集群备份、迁移工具。

    Velero 使用对象存储保存集群资源。默认支持的对象存储有 AWS、Azure、GCP ,兼容 S3 协议,也可以通过插件来扩展到其他平台,比如 Aliyun OSS。

    目前,Velero 不具备版本管理功能,只能进行增量恢复,不会进行删除或覆盖操作。

    2. Velero 工作原理

    Velero 首先会在集群中创建各种 CRD 以及相关的控制器,通过对 CRD 对象的操作完成备份、恢复行为。Velero 的工作原理图如下:

    1. Velero 客户端调用 Kubernetes API 服务器创建 Backup 对象。
    2. BackupController 监听 Backup 对象变化,以执行备份过程。
    3. 备份时,BackupController 通过 API Server 查询相关数据。
    4. 备份后,BackupController 将数据上传到对象存储。

    运维拓扑图如下:

    在所有集群上安装 Velero,运维人员通过 Velero Client 给 Velero Server 发送备份、恢复请求。Velero Server 推拉指定的 Kubernetes 对象的数据。这些数据以 Json 格式压缩存储在对象存储服务中。

    下图是备份数据的目录结构:

    3. 安装 Velero

    3.1 下载文件

    二进制文件下载地址:Github

    这里以 CentOS 操作系统、Velero 1.6.0 为例:

    下载二进制文件,然后复制到 /user/local/bin 目录下。

    1、下载压缩包并解压

    wget https://github.com/vmware-tanzu/velero/releases/download/v1.6.0/velero-v1.6.0-linux-amd64.tar.gz
    tar -zxvf velero-v1.6.0-linux-amd64.tar.gz && cd velero-v1.6.0-linux-amd64/

    2、查看目录结构

    [root@m-master126 velero-v1.6.0-linux-amd64]# tree
    .
    ├── examples
    │   ├── minio
    │   │   └── 00-minio-deployment.yaml
    │   ├── nginx-app
    │   │   ├── base.yaml
    │   │   ├── README.md
    │   │   └── with-pv.yaml
    │   └── README.md
    ├── LICENSE
    └── velero
    
    3 directories, 7 files

    3.2 配置对象存储服务

    考虑到可能没有直接可用的对象存储服务,本文使用 Velero 提供的 minio 搭建一个对象存储服务。如果是公有云服务,这里部署 minio 的步骤可以省略,只需要创建 credentials-velero 文件。

    1、创建 minio 服务

    • 设置为 NodePort 类型
    sed -i "/type: /s#ClusterIP#NodePort#" examples/minio/00-minio-deployment.yaml
    • 创建 minio 服务
    kubectl apply -f examples/minio/00-minio-deployment.yaml
    • 查看 service 访问端口
    [root@m-master126 velero-v1.6.0-linux-amd64]# kubectl get svc -n velero
    NAME    TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
    minio   NodePort   10.233.11.92   <none>        9000:32304/TCP   60s

    这里的 {minio_service_ip}:32304 服务将被用于存储 Velero 的备份数据。

    访问的话:直接浏览器输入 http://{NodeIP:32304}  默认账户信息: minio/minio123

    2、创建 minio 的访问密钥文件 credentials-velero

    cat <<'EOF' > credentials-velero
    [default]
    aws_access_key_id = minio
    aws_secret_access_key = minio123
    EOF
    

    ls查看下创建的访问密钥文件

    [root@m-master126 velero-v1.6.0-linux-amd64]# ls
    credentials-velero  examples  LICENSE  velero
    

    3.3 安装 Velero 客户端

    拷贝可执行文件 velero

    cp velero /usr/local/bin/
    

    3.4 安装 Velero 服务端

    执行安装命令

     velero install 
        --plugins harbor.openserver.cn:443/library/velero/velero-plugin-for-aws:v1.0.0 
        --provider aws 
        --bucket velero 
        --namespace velero 
        --secret-file ./credentials-velero 
        --velero-pod-cpu-request 200m 
        --velero-pod-mem-request 200Mi 
        --velero-pod-cpu-limit 1000m 
        --velero-pod-mem-limit 1000Mi 
        --use-volume-snapshots=false 
        --use-restic 
        --restic-pod-cpu-request 200m 
        --restic-pod-mem-request 200Mi 
        --restic-pod-cpu-limit 1000m 
        --restic-pod-mem-limit 1000Mi 
        --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://{NodeIp}:32304
    

     值得注意的是use-restic 开启了 PV 备份的支持。执行安装命令,会有回显日志。下面继续查看新创建的相关资源:

    [root@m-master126 velero-v1.6.0-linux-amd64]# kubectl get crd|grep velero
    backups.velero.io                                     2021-05-31T12:54:19Z
    backupstoragelocations.velero.io                      2021-05-31T12:54:19Z
    deletebackuprequests.velero.io                        2021-05-31T12:54:19Z
    downloadrequests.velero.io                            2021-05-31T12:54:19Z
    podvolumebackups.velero.io                            2021-05-31T12:54:19Z
    podvolumerestores.velero.io                           2021-05-31T12:54:19Z
    resticrepositories.velero.io                          2021-05-31T12:54:19Z
    restores.velero.io                                    2021-05-31T12:54:19Z
    schedules.velero.io                                   2021-05-31T12:54:19Z
    serverstatusrequests.velero.io                        2021-05-31T12:54:19Z
    volumesnapshotlocations.velero.io                     2021-05-31T12:54:19Z
    
    [root@m-master126 velero-v1.6.0-linux-amd64]# kubectl get all -n velero
    NAME                         READY   STATUS      RESTARTS   AGE
    pod/minio-7b4ff54f67-kx259   1/1     Running     0          14h
    pod/minio-setup-mx8d5        0/1     Completed   0          14h
    pod/restic-c6hkt             1/1     Running     0          14h
    pod/restic-gfkwq             1/1     Running     0          14h
    pod/restic-j5bjr             1/1     Running     0          14h
    pod/restic-zrkzn             1/1     Running     0          14h
    pod/velero-df6dcd97-6qjj4    1/1     Running     0          14h
    
    NAME            TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
    service/minio   NodePort   10.233.11.92   <none>        9000:32304/TCP   14h
    
    NAME                    DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
    daemonset.apps/restic   4         4         4       4            4           <none>          14h
    
    NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/minio    1/1     1            1           14h
    deployment.apps/velero   1/1     1            1           14h
    
    NAME                               DESIRED   CURRENT   READY   AGE
    replicaset.apps/minio-7b4ff54f67   1         1         1       14h
    replicaset.apps/velero-df6dcd97    1         1         1       14h
    
    NAME                    COMPLETIONS   DURATION   AGE
    job.batch/minio-setup   1/1           3s         14h
    

    可以看到相关服务已经正常运行,Job 任务正常完成退出,大量 CRD 被创建。

    3.5 卸载 Velero 服务端

    kubectl delete namespace/velero clusterrolebinding/velero
    kubectl delete crds -l component=velero

    参考:

    https://blog.csdn.net/weixin_47003048/article/details/114006959

    https://www.chenshaowen.com/blog/backup-kubernetes-cluster-using-velero.html

  • 相关阅读:
    mysql自增主键
    mysql数据库的备份与恢复
    mysql(mariadb)新建用户及用户授权管理
    vm如何安装xenserver
    安装Centos7时提示 /dev/root does not exits
    python简单实现目录对比
    PM2 实现 自动重启 node 服务 , 例如 服务器重启时,自动启动 之前的服务
    阿里云免费ssl申请配置
    umi-request 配置,出现 某一个接口跨域
    ndm 带空格 做整体
  • 原文地址:https://www.cnblogs.com/zhangmingcheng/p/14836274.html
Copyright © 2011-2022 走看看