Docker插件,将Docker卷管理为BTRFS子卷

buttervolume的Python项目详细描述


用于Docker的BTRFS卷插件

这个包提供了一个docker卷插件,它为 每个集装箱体积。

请注意,这不是Docker的BTRFS存储驱动程序,而是 管理卷。这意味着您可以使用任何存储驱动程序,如aufs,这是 独立主题。

内容

  • 变更日志
  • 简介

    btrfs 是新一代的写时拷贝 支持子卷和快照的文件系统。a btrfs 子卷 可以是 作为一个独立的文件名称空间,它可以存在于一个目录中,并且可以 作为文件系统安装并单独快照。

    另一方面,通常使用docker卷。 存储有状态容器的持久数据,如mysql/postgresql CMS的数据库或上载目录。默认情况下,Docker卷只是 主机文件系统中的本地目录。大量的卷插件 已经存在于各种存储后端,包括分布式文件系统, 但是,小的集群通常负担不起部署分布式文件系统的费用。

    我们相信btrfs子卷是一个功能强大且轻量级的存储解决方案 Docker卷,允许跨多个 小型群集的节点。

    先决条件

    确保目录 /var/lib/buttervolume/ 位于btrfs中 文件系统。它可以是BTRFS装入点或BTRFS子卷,也可以两者兼有。

    您还应该为主机上的config和ssh创建目录:

    sudo mkdir /var/lib/buttervolume/{config,ssh}
    

    构建并运行

    如果您不想成为一个贡献者,但只想运行插件,请跳到下一节。

    首先需要使用提供的dockerfile为插件创建一个根文件系统:

    git clone https://github.com/anybox/buttervolume
    cd buttervolume/docker
    ./rebuild_rootfs.sh
    

    然后您可以创建插件:

    docker plugin create anybox/buttervolume .
    

    现在您可以启用插件,它应该在插件中启动buttervolume 容器:

    docker plugin enable anybox/buttervolume
    

    您可以通过运行buttervolume命令来检查它是否响应:

    alias drunc="sudo docker-runc --root /run/docker/plugins/runtime-root/plugins.moby/"
    alias buttervolume="drunc exec -t `drunc list|tail -n+2|awk '{print $1}'` buttervolume"
    sudo buttervolume scheduled
    

    您还可以使用以下命令在本地安装和运行插件:

    pyvenv venv
    ./venv/bin/python setup.py develop
    sudo ./venv/bin/buttervolume run
    

    安装并运行

    如果插件已被推送到图像存储库,则可以使用以下命令安装它:

    docker plugin install anybox/buttervolume
    

    检查它是否正在运行:

    docker plugin ls
    

    定义有用的别名:

    alias drunc="sudo docker-runc --root /run/docker/plugins/runtime-root/plugins.moby/"
    alias buttervolume="drunc exec -t `drunc list|tail -n+2|awk '{print $1}'` buttervolume"
    

    然后尝试buttervolume命令:

    sudo mkdir /var/lib/buttervolume/{config,ssh}
    
    0

    或者用驱动程序创建一个卷。注意,驱动程序的名称是 插件名称:

    sudo mkdir /var/lib/buttervolume/{config,ssh}
    
    1

    升级

    重新安装之前必须强制禁用它(如Docker文档中所述):

    sudo mkdir /var/lib/buttervolume/{config,ssh}
    
    2

    配置

    您可以配置以下变量:

    < Buff行情>
    • driver name :驱动程序的全名(带标记)
    • 卷路径 :路径是BTRFS卷所在的路径
    • 快照路径 :该路径是BTRFS快照所在的路径
    • test_remote_path :单元测试期间的路径是远程btrfs快照所在的位置
    • 调度 :调度程序配置的路径
    • 运行路径 :docker运行目录的路径(/run/docker)
    • 套接字 :unix套接字的路径是buttervolume listen
    • 计时器 :调度程序两次运行之间的秒数
    • dtformat :日志中日期时间的格式
    • 日志级别 :python日志级别(信息、调试等)

    可以按以下优先级顺序进行配置:

    < Buff行情>
    1. 从安恩前缀为 buttervolume的环境变量(例如: buttervolume定时器=120
    2. /etc/buttervolume/config.ini文件的[default]部分 在容器内部或 主机
    3. < > >

      config.ini文件示例:

      sudo mkdir /var/lib/buttervolume/{config,ssh}
      
      3

      如果没有配置,则使用以下默认值:

      < Buff行情>
      • drivername=anybox/buttervolume:latest
      • 卷路径=/var/lib/buttervolume/volumes/
      • 快照路径=/var/lib/buttervolume/snapshots/
      • 测试远程路径=/var/lib/buttervolume/received/
      • 日程表=/etc/buttervolume/schedule.csv
      • 运行路径=/run/docker
      • socket=$runpath/plugins/btrfs.sock 仅当手动运行时
      • 定时器=60
      • dtformat= %y-%m-%dt%h:%m:%s.%f
      • 日志级别=信息

    用法

    运行插件

    运行它的正常方式是作为一个新样式的docker插件,如上面在 "安装并运行"部分,它将自动启动。本遗嘱 创建一个 /run/docker/plugins/<;uuid>;/btrfs.sock文件,供 Docker守护程序。 <;uuid>; 是runc/oci的唯一标识符。 运行它的容器。这意味着您可能可以运行 同时插入,但目前不建议这样做,除非您保留 请注意,卷和快照位于同一位置 版本。否则,您可以为卷和 使用 config.ini 文件拍摄每个不同版本的快照。

    然后,卷驱动程序的名称就是插件的名称:

    sudo mkdir /var/lib/buttervolume/{config,ssh}
    
    1

    或:

    sudo mkdir /var/lib/buttervolume/{config,ssh}
    
    5

    但是,如果将其作为python发行版本地安装,则还可以 手动启动:

    sudo mkdir /var/lib/buttervolume/{config,ssh}
    
    6

    在本例中,它将在 /run/docker/plugins/btrfs.sock中创建一个unix套接字 供Docker与遗留插件系统一起使用。然后是卷的名称 driver是套接字文件的名称:

    sudo mkdir /var/lib/buttervolume/{config,ssh}
    
    7

    或:

    sudo mkdir /var/lib/buttervolume/{config,ssh}
    
    8

    启动时,插件还将启动自己的调度程序以运行定期作业 (例如快照、复制、清除或同步)

    创建和删除卷

    插件运行后,无论何时创建容器,都可以指定 带有docker create的卷驱动程序 <;image>; 。您也可以使用 docker volume手动创建btrfs卷 创建 -d btrfs 。它还可以通过指定 btrfs 撰写文件的 部分中的驱动程序。

    当您使用docker rm或docker volume删除卷时 rm<;volume>; ,删除btrfs子卷。如果你拍了卷 在此期间,其他地方的快照将不会被删除。

    管理卷和快照

    安装buttervolume时,它提供一个命令行工具 buttervolume ,具有以下子命令:

    sudo mkdir /var/lib/buttervolume/{config,ssh}
    
    9

    创建快照

    您可以使用以下命令创建卷的只读快照:

    git clone https://github.com/anybox/buttervolume
    cd buttervolume/docker
    ./rebuild_rootfs.sh
    
    0

    卷当前预计位于 /var/lib/buttervolume/volumes 和 快照将在 /var/lib/docker/snapshots中创建,通过附加 卷名的日期时间,用 @ 分隔

    列出快照

    您可以列出所有快照:

    git clone https://github.com/anybox/buttervolume
    cd buttervolume/docker
    ./rebuild_rootfs.sh
    
    1

    或者只是与卷对应的快照:

    git clone https://github.com/anybox/buttervolume
    cd buttervolume/docker
    ./rebuild_rootfs.sh
    
    2

    <;volume>; 是卷的名称,而不是完整路径。这是预料之中的 生活在 /var/lib/buttervolume/volumes

    还原快照

    可以将快照还原为卷。当前音量将首先 被快照、删除,然后替换为快照。如果您提供 卷名而不是快照,将还原最新快照。所以没有 如果你做错了什么,数据就会丢失。请注意停止 还原快照之前的容器:

    git clone https://github.com/anybox/buttervolume
    cd buttervolume/docker
    ./rebuild_rootfs.sh
    
    3

    <;snapshot>; 是快照的名称,而不是完整路径。这是预料之中的 生活在 /var/lib/docker/snapshots

    默认情况下,卷名对应于创建快照的卷 从…但是您可以选择通过以下方式将快照还原到不同的卷名 将目标添加为第二个参数:

    git clone https://github.com/anybox/buttervolume
    cd buttervolume/docker
    ./rebuild_rootfs.sh
    
    4

    克隆卷

    可以将卷克隆为新卷。将克隆当前卷 作为参数提供的新卷名。请注意停止 关闭卷前的容器:

    git clone https://github.com/anybox/buttervolume
    cd buttervolume/docker
    ./rebuild_rootfs.sh
    
    5

    <;volume>; 是要克隆的卷的名称,而不是完整路径。这是预料之中的 生活在 /var/lib/buttervolume/volumes 中。 <;new_volume>; 是要创建为前一个卷的克隆的新卷的名称, 不是完整的路径。它应该在 /var/lib/buttervolume/volumes 中创建。

    删除快照

    您可以使用以下命令删除快照:

    git clone https://github.com/anybox/buttervolume
    cd buttervolume/docker
    ./rebuild_rootfs.sh
    
    6

    <;snapshot>; 是快照的名称,而不是完整路径。这是预料之中的 生活在 /var/lib/docker/snapshots

    将快照复制到另一台主机

    您可以增量地将快照发送到另一个主机,以便 复制到多台计算机上,允许快速移动有状态的Docker 容器到另一个主机。第一个快照首先作为一个整体发送,然后 下一个快照仅用于发送当前快照之间的差异 还有上一个。这允许在没有 占用大量带宽或磁盘空间:

    git clone https://github.com/anybox/buttervolume
    cd buttervolume/docker
    ./rebuild_rootfs.sh
    
    7

    <;snapshot>; 是快照的名称,而不是完整路径。这是预料之中的 生活在 /var/lib/docker/snapshots中并复制到 远程主机。

    <;host>; 是远程主机的主机名或IP地址。快照是 当前通过ssh使用btrfs send/receive发送。这需要ssh 密钥在目标主机上(在 /var/lib/buttervolume/ssh 下)存在并已授权,并且 在本地主机上的 /var/lib/buttervolume/ssh/config中启用StrictHostKeyChecking no选项。

    请注意,每次更改ssh配置时,都必须重新启动docker守护程序。

    从另一个主机卷同步卷

    您可以从远程卷接收数据,以防有卷打开 具有相同名称的远程主机,它将获得新的和最新的数据 从远程卷替换为本地卷。在运行 rsync 命令在本地计算机上创建快照以管理恢复:

    git clone https://github.com/anybox/buttervolume
    cd buttervolume/docker
    ./rebuild_rootfs.sh
    
    8

    目的是同步一个卷运行时在多个主机之间 容器,因此您应该在所有远程节点上计划该操作 主机。 < div > 注

    当我们从多个主机中提取数据时,我们从不删除数据,请考虑 在删除每个主机上的数据之前删除计划的操作。

    < div >

    警告

    确保您的应用程序能够处理这种同步操作

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


    热门话题
    java在AlertDialog builder标题右侧放置图标   安装weblogic server12时发生java获取错误。1在windows 10上   java无法导入:安卓。支持v7。小装置。Android Studio中的RecyclerView   java Android应用程序等待通知奇怪行为   java如何比较ArrayList中的整数元素?   java Quartz属性不会触发Quartz作业   java轻松地将许多JavaFX属性绑定到UINode   Maven插件管理器导致java错误消息的原因是什么?   JAXB解组错误后java文件被阻止   java如何在spark kafka流中创建消费者组并将消费者分配给消费者组   java Gps lat&long随机显示非常不准确的结果   java使用assest文件夹文件在Android上执行shell命令   java如何在客户端使用javascript提取文本   java扩展描述的distincts之和   java重写默认Spring数据REST配置   java SQL未命名参数语法   二进制搜索任务的java真实解决方案   java在一个多模块多数据源项目中,用什么正确的方式来指示将哪个数据源注入我的DAOs?