Docker插件,将Docker卷管理为BTRFS子卷
buttervolume的Python项目详细描述
用于Docker的BTRFS卷插件
这个包提供了一个docker卷插件,它为 每个集装箱体积。
请注意,这不是Docker的BTRFS存储驱动程序,而是 管理卷。这意味着您可以使用任何存储驱动程序,如aufs,这是 独立主题。
内容
- 3.7(2018-12-13)
- 3.6(2018年12月11日)
- 3.5(2018-06-07)
- 3.4(2018-04-27)
- 3.3(2018-04-27)
- 3.2(2018-04-27)
- 3.1(2018-04-27)
- 3.0(2018-04-24)
- 2.0(2018-03-24)
- 1.4(2018-02-01)
- 1.3.1(2017-10-22)
- 1.3(2017-07-30)
- 1.2(2017-07-16)
- 1.1条(2017-07-13)
- 1.0(2017-05-24)
简介
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行情>- 从安恩前缀为 buttervolume的环境变量(例如: buttervolume定时器=120 )
- 从 /etc/buttervolume/config.ini文件的[default]部分 在容器内部或 主机 < > >
- 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
- 日志级别=信息
config.ini文件示例:
sudo mkdir /var/lib/buttervolume/{config,ssh}3
如果没有配置,则使用以下默认值:
< Buff行情>用法
运行插件
运行它的正常方式是作为一个新样式的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.sh0
卷当前预计位于 /var/lib/buttervolume/volumes 和 快照将在 /var/lib/docker/snapshots中创建,通过附加 卷名的日期时间,用 @ 分隔
列出快照
您可以列出所有快照:
git clone https://github.com/anybox/buttervolume cd buttervolume/docker ./rebuild_rootfs.sh1
或者只是与卷对应的快照:
git clone https://github.com/anybox/buttervolume cd buttervolume/docker ./rebuild_rootfs.sh2
<;volume>; 是卷的名称,而不是完整路径。这是预料之中的 生活在 /var/lib/buttervolume/volumes
还原快照
可以将快照还原为卷。当前音量将首先 被快照、删除,然后替换为快照。如果您提供 卷名而不是快照,将还原最新快照。所以没有 如果你做错了什么,数据就会丢失。请注意停止 还原快照之前的容器:
git clone https://github.com/anybox/buttervolume cd buttervolume/docker ./rebuild_rootfs.sh3
<;snapshot>; 是快照的名称,而不是完整路径。这是预料之中的 生活在 /var/lib/docker/snapshots
默认情况下,卷名对应于创建快照的卷 从…但是您可以选择通过以下方式将快照还原到不同的卷名 将目标添加为第二个参数:
git clone https://github.com/anybox/buttervolume cd buttervolume/docker ./rebuild_rootfs.sh4
克隆卷
可以将卷克隆为新卷。将克隆当前卷 作为参数提供的新卷名。请注意停止 关闭卷前的容器:
git clone https://github.com/anybox/buttervolume cd buttervolume/docker ./rebuild_rootfs.sh5
<;volume>; 是要克隆的卷的名称,而不是完整路径。这是预料之中的 生活在 /var/lib/buttervolume/volumes 中。 <;new_volume>; 是要创建为前一个卷的克隆的新卷的名称, 不是完整的路径。它应该在 /var/lib/buttervolume/volumes 中创建。
删除快照
您可以使用以下命令删除快照:
git clone https://github.com/anybox/buttervolume cd buttervolume/docker ./rebuild_rootfs.sh6
<;snapshot>; 是快照的名称,而不是完整路径。这是预料之中的 生活在 /var/lib/docker/snapshots
将快照复制到另一台主机
您可以增量地将快照发送到另一个主机,以便 复制到多台计算机上,允许快速移动有状态的Docker 容器到另一个主机。第一个快照首先作为一个整体发送,然后 下一个快照仅用于发送当前快照之间的差异 还有上一个。这允许在没有 占用大量带宽或磁盘空间:
git clone https://github.com/anybox/buttervolume cd buttervolume/docker ./rebuild_rootfs.sh7
<;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.sh8
目的是同步一个卷运行时在多个主机之间 容器,因此您应该在所有远程节点上计划该操作 主机。 < div > 注
当我们从多个主机中提取数据时,我们从不删除数据,请考虑 在删除每个主机上的数据之前删除计划的操作。
警告
确保您的应用程序能够处理这种同步操作