zoukankan      html  css  js  c++  java
  • velero 备份kubernetes集群

    简介部分,有大量偷懒,借鉴

    一.简介

    Velero是一个开源工具,可以安全地备份,恢复和迁移Kubernetes集群和持久卷。它既可以在本地运行,也可以在公共云中运行。Velero由在Kubernetes集群中作为部署运行的服务器进程和命令行界面(CLI)组成,DevOps团队和平台操作员可使用该命令行界面配置计划的备份,触发临时备份,执行还原等。

    优势

    与直接访问Kubernetes etcd数据库以执行备份和还原的其他工具不同,Velero使用Kubernetes API捕获群集资源的状态并在必要时对其进行还原。这种由API驱动的方法具有许多关键优势:

    • 备份可以捕获群集资源的子集,并按名称空间,资源类型和/或标签选择器进行过滤,从而为备份和还原的内容提供了高度的灵活性。
    • 托管Kubernetes产品的用户通常无法访问底层的etcd数据库,因此无法对其进行直接备份/还原。
    • 通过聚合的API服务器公开的资源可以轻松备份和还原,即使它们存储在单独的etcd数据库中也是如此。

    此外,借助Velero,您可以使用存储平台的本机快照功能或称为restic的集成文件级备份工具来备份和还原应用程序的持久数据及其配置 。

    主要功能

    • 灾难恢复 在基础架构丢失,数据损坏和/或服务中断的情况下,减少了恢复时间。
    • 数据迁移 通过轻松地将Kubernetes资源从一个集群迁移到另一个集群来实现集群可移植性。
    • 数据保护 提供关键数据保护功能,例如计划的备份,保留计划以及自定义操作的备份前或备份后挂钩。

    组件

    Velero 组件一共分两部分,分别是服务端和客户端。

    • 服务端:运行在你 Kubernetes 的集群中
    • 客户端:是一些运行在本地的命令行的工具,需要已配置好 kubectl 及集群 kubeconfig 的机器上

    支持备份存储

    二:安装

    依赖对象存储,支持S3,目前也支持阿里云等公有云平台(依赖插件),这里使用私有对象存储(minio)。

    # 安装命令行客户端
    $ brew install velero
    

    命令行安装

    1.创建minio认证文件

    $ cat > credentials-velero <<EOF  
    [default]
    aws_access_key_id = user
    aws_secret_access_key = password
    EOF
    

    2.初始化服务端

    $ velero install 
        --provider aws 
        --plugins velero/velero-plugin-for-aws:v1.0.0   # 安装插件
        --bucket velero               # bucket 需要提前创建
        --secret-file ./credentials-velero 
        --use-volume-snapshots=false 
        --use-restic 
        --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://127.0.0.1:9000
    

    3.查看velero是否安装完成

    $ kubectl get deployments -l component=velero --namespace=velero
    NAME     READY   UP-TO-DATE   AVAILABLE   AGE
    velero   1/1     1            1           13d
    
    $ kubectl get crds -l component=velero
    backups.velero.io                                     2021-04-30T07:20:25Z
    backupstoragelocations.velero.io                      2021-04-30T07:20:26Z
    deletebackuprequests.velero.io                        2021-04-30T07:20:26Z
    downloadrequests.velero.io                            2021-04-30T07:20:26Z
    podvolumebackups.velero.io                            2021-04-30T07:20:26Z
    podvolumerestores.velero.io                           2021-04-30T07:20:26Z
    resticrepositories.velero.io                          2021-04-30T07:20:26Z
    restores.velero.io                                    2021-04-30T07:20:26Z
    schedules.velero.io                                   2021-04-30T07:20:26Z
    serverstatusrequests.velero.io                        2021-04-30T07:20:26Z
    volumesnapshotlocations.velero.io                     2021-04-30T07:20:27Z
    

    helm安装

    # 配置minio地址
    configuration:
      backupStorageLocation:
        config: 
         region: hk-k8s-minio
         s3ForcePathStyle: true
         s3Url: http://127.0.0.1:39000
    
    # 配置minio认证信息
    secretContents: 
       cloud: |
         [default]
         aws_access_key_id = user
         aws_secret_access_key = password
    

    推荐直接使用命令行安装,方便快捷

    三.备份

    1.手动备份

    $ velero backup create app-backup --include-namespaces=app-example
    

    2.定时备份

    $ velero create schedule app-daily-backup --schedule="@every 24h"  --include-namespaces=app-example
    

    3.对持久化存储进行备份

    # 给pod打上标签
    $ kubectl patch pod nginx-deployment-7b95b48f86-296hj --patch '{"metadata": {"annotations": {"backup.velero.io/backup-volumes": "www"}}}' -n app-example
    
    # 备份
    $ velero backup create app-backup-pvc --snapshot-volumes --include-namespaces=app-example
    
    # 备份详情
    $ velero backup describe app-backup-pvc --details
    Velero-Native Snapshot PVs:  true
    
    TTL:  720h0m0s
    
    Hooks:  <none>
    
    Backup Format Version:  1.1.0
    
    Started:    2021-05-14 15:20:01 +0800 CST
    Completed:  <n/a>
    
    Expiration:  2021-06-13 15:20:01 +0800 CST
    
    Estimated total items to be backed up:  12
    Items backed up so far:                 0
    
    Restic Backups:
      In Progress:
        app-example/nginx-deployment-7b95b48f86-296hj: www
    

    四.恢复

    1.删除刚刚备份的资源

    $ kubectl delete ns app-example
    namespace "app-example" deleted
    

    2.从刚刚的备份中,恢复资源清单

    $ velero restore create --from-backup app-backup-pvc --restore-volumes
    
    $ velero restore describe app-backup-pvc-20210514152908 --details
    Restic Restores:
      In Progress:
        app-example/nginx-deployment-7b95b48f86-296hj: www (4.94%)
    

    恢复存储资源时,会在刚刚打上标记的Pod中自动创initcontainer,从minio中拉取文件信息

    五.迁移

    在集群间进行迁移时,我们需要保证两个集群使用的同一个后端存储,初始化服务端:

    $ velero install 
        --provider aws 
        --plugins velero/velero-plugin-for-aws:v1.0.0   # 安装插件
        --bucket velero               # bucket 需要提前创建
        --secret-file ./credentials-velero 
        --use-volume-snapshots=false 
        --use-restic 
        --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://127.0.0.1:9000
    

    跟安装是同一套命令

    查看同步过来的资源对象:

    • Backups
    • Backupstoragelocations
    • Podvolumebackups

    基于Backups对象,我们可以方便快捷的恢复集群的对象。

    每天学习一点点,重在积累!
  • 相关阅读:
    Android开发 View_自定义快速索引侧边栏 SideBarView
    Android开发 PopupWindow开发的一些例子
    Android开发 Fragment里监听返回键
    AndroidStudio 清除项目里无用的资源
    Android开发 SingleLiveEvent解决LiveData或者MutableLiveData多次回调的问题
    字母排列城市列表资源
    Android开发 GridView详解
    Android开发 NestedScrollView嵌套RecyclerView导致的UI加载慢的问题
    Android开发 跳转指定应用商城评分
    Android开发 Activity生命周期详解
  • 原文地址:https://www.cnblogs.com/GXLo/p/14772155.html
Copyright © 2011-2022 走看看