使用Ansible Playbooks生成容器图像的工具
ansible-bender的Python项目详细描述
Ansible折弯机
ansibe行动手册 并将它们转换为容器图像。它有一个可插入的构建器选择- 这取决于你选择的工具,将用于构建你的容器 图像。现在唯一受支持的生成器是 buildah。 更多信息 以后再来。 Ansible Bender(AB)依赖于Ansible连接 插件 执行生成。
tl;ansibe博士是前端,buildah是后端。
这一概念在以下博客文章中介绍:
你可能会问:为什么不 ansible容器?Ansible Bender是 实际上,Ansible容器给了我们很大的启发:主要的区别在于 ansible容器覆盖了容器化应用程序的整个生命周期。 而AB只负责图像生成。
状态:准备使用
Ansible Bender最近被转移到Ansible社区组织。O/
特点:
- 您可以用buildah作为后端来构建容器映像。
- Ansible Playbook是您的构建配方。
- 您可以通过cli或特定ansible vars设置各种图像元数据:
- 工作目录
- 环境变量
- 标签
- 用户
- 默认命令
- 暴露端口
- 您可以在构建期间进行卷装载。
- 缓存机制:
- 每个任务结果都缓存为一个容器图像层。
- 您可以用
--no cache
- 通过向任务添加标记
no cache
可以从某一点禁用缓存。
- 通过向任务添加tag
stop layering
可以停止创建新的图像层。 - 如果映像生成失败,它将被提交并以后缀命名
-failed
(因此 您可以查看内部并解决问题。 - 该工具试图在基本图像中找到python解释器。
- 您可以将生成的图像推送到远程位置,例如:
- 注册表、tarball、docker守护程序,…
podman push
用于执行推送。
接口
Ansible Bender有以下命令:
<表><广告>构建
列表生成
获取日志
检查OD>< /TD>提供有关选定生成的详细元数据
按下
安装
$ pip3 install ansible-bender
如果您足够勇敢,请直接从git master安装bender:
$ pip3 install git+https://github.com/ansible-community/ansible-bender
如果您的系统上没有pip3
命令,您可以这样运行pip:
$ python3 -m pip install ...
要求(主机)
pip负责python依赖项,但是ansible bender也需要一些 主机系统上的二进制文件:
最后两个要求可能相当困难:您可以在 特权容器。
设置Buildah和Podman
如果以根运行ansible bender,则不需要设置任何内容。只是 安装软件包,你就可以走了。这是最好的方法- 当使用内核内覆盖时,buildah和podman的效率要高得多。 文件系统,您将遇到比无根文件系统更少的问题 模式
另一方面,如果您想利用无根容器 模式 您需要设置uid映射。它记录在 podman的 文档。您只需要在/etc/subuid和 /etc/subgid:
$ sudo sh -c "printf \"\n$(whoami):100000:65536\n\" >>/etc/subuid" $ sudo sh -c "printf \"\n$(whoami):100000:65536\n\" >>/etc/subgid"
您应该参考podman的故障排除 指南 您遇到了问题。
要求(底图)
- python解释器-ansible bender将尝试找到它(或者
可以通过
--python解释器指定它。
- 在主机上可以是Python2或Python3,但是 在基础图像中,这并不重要-Ansible能够利用 即使在控制机器上用python 3调用python 2。
要求(ansible playbook)
无。
本德复制你提供的剧本,这样它就可以被处理了。主机
变量在副本中被重写并更改为
工作容器-生成发生的位置。所以不管是什么
hosts变量的内容。
配置
您可以配置ansible bender并在最终图像上设置元数据,顺序如下 为此,请查看docs/configuration.md
负责的角色
如果你在你的剧本中使用角色,而他们在一个非标准的地方, 您可以利用环境变量来告诉ansible 你的角色是活的。bender没有篡改环境变量,所有的都是 传递给ansible playbook。
调试折弯机
可能会发生这样的情况:您的设置有问题,或者工具折弯机 依赖不是最好的状态。找到根本原因的最好方法是 在调试模式下运行bender并尽可能详细地运行ansible:
$ ansible-bender --debug build --extra-ansible-args='-vvvvvv'
用法
键入ansible bender
可能需要一些时间,请考虑在
shell rc文件:
alias ab="ansible-bender"
构建图像
此存储库的根目录中有一个简单的行动手册,用于展示功能:
$ ansible-bender build ./simple-playbook.yaml PLAY [Demonstration of ansible-bender functionality] **************************************** TASK [Gathering Facts] ********************************************************************** ok: [a-very-nice-image-20190302-153257279579-cont] TASK [Run a sample command] ***************************************************************** changed: [a-very-nice-image-20190302-153257279579-cont] caching the task result in an image 'a-very-nice-image-20193302-153306' TASK [Stat a file] ************************************************************************** ok: [a-very-nice-image-20190302-153257279579-cont] caching the task result in an image 'a-very-nice-image-20193302-153310' PLAY RECAP ********************************************************************************** a-very-nice-image-20190302-153257279579-cont : ok=3changed=1unreachable=0failed=0 Getting image source signatures Skipping blob 767f936afb51 (already present): 4.46 MiB / 4.46 MiB [=========] 0s Skipping blob b211a7fc6e85 (already present): 819.00 KiB / 819.00 KiB [=====] 0s Skipping blob 8d092d3e44bb (already present): 67.20 MiB / 67.20 MiB [=======] 0s Skipping blob 767f936afb51 (already present): 4.46 MiB / 4.46 MiB [=========] 0s Skipping blob b211a7fc6e85 (already present): 819.00 KiB / 819.00 KiB [=====] 0s Skipping blob 8d092d3e44bb (already present): 67.20 MiB / 67.20 MiB [=======] 0s Skipping blob 492c5c55da84 (already present): 4.50 KiB / 4.50 KiB [=========] 0s Skipping blob 6f55b6e55d8a (already present): 6.15 MiB / 6.15 MiB [=========] 0s Skipping blob 80ea48511c5d (already present): 1021.00 KiB / 1021.00 KiB [===] 0s Copying config 6b6dc5878fb2: 0 B / 5.15 KiB [----------------------------------] Copying config 6b6dc5878fb2: 5.15 KiB / 5.15 KiB [==========================] 0s Writing manifest to image destination Storing signatures 6b6dc5878fb2c2c10099adbb4458c2fc78cd894134df6e4dee0bf8656e93825a Image 'a-very-nice-image' was built successfully \o/
剧本就是这样的:
αααα8如您所见,处理的整个构建都由变量配置
ansible\u bender
如果我们再次运行构建,我们可以看到ab从缓存加载每个任务:
$ ansible-bender build ./simple-playbook.yaml PLAY [Demonstration of ansible-bender functionality] **************************************** TASK [Gathering Facts] ********************************************************************** ok: [a-very-nice-image-20190302-153526013757-cont] TASK [Run a sample command] ***************************************************************** loaded from cache: '7c69668c42987446cc78adbf6620fc2faf90ad10c3497662fe38940dd6de998f' skipping: [a-very-nice-image-20190302-153526013757-cont] TASK [Stat a file] ************************************************************************** loaded from cache: '4a4f54285928c03eea65745ee9feead88026c780a40126d94e79d5842bcdbe62' skipping: [a-very-nice-image-20190302-153526013757-cont] PLAY RECAP ********************************************************************************** a-very-nice-image-20190302-153526013757-cont : ok=1changed=0unreachable=0failed=0 Getting image source signatures Skipping blob 767f936afb51 (already present): 4.46 MiB / 4.46 MiB [=========] 0s Skipping blob b211a7fc6e85 (already present): 819.00 KiB / 819.00 KiB [=====] 0s Skipping blob 8d092d3e44bb (already present): 67.20 MiB / 67.20 MiB [=======] 0s Skipping blob 492c5c55da84 (already present): 4.50 KiB / 4.50 KiB [=========] 0s Skipping blob 767f936afb51 (already present): 4.46 MiB / 4.46 MiB [=========] 0s Skipping blob 6f55b6e55d8a (already present): 6.15 MiB / 6.15 MiB [=========] 0s Skipping blob b211a7fc6e85 (already present): 819.00 KiB / 819.00 KiB [=====] 0s Skipping blob 80ea48511c5d (already present): 1021.00 KiB / 1021.00 KiB [===] 0s Skipping blob 8d092d3e44bb (already present): 67.20 MiB / 67.20 MiB [=======] 0s Skipping blob 5f70bf18a086 (already present): 1.00 KiB / 1.00 KiB [=========] 0s Skipping blob 492c5c55da84 (already present): 4.50 KiB / 4.50 KiB [=========] 0s Skipping blob 6f55b6e55d8a (already present): 6.15 MiB / 6.15 MiB [=========] 0s Skipping blob 80ea48511c5d (already present): 1021.00 KiB / 1021.00 KiB [===] 0s Skipping blob 5f70bf18a086 (already present): 1.00 KiB / 1.00 KiB [=========] 0s Copying config 354752b97084: 0 B / 5.26 KiB [----------------------------------] Copying config 354752b97084: 5.26 KiB / 5.26 KiB [==========================] 0s Writing manifest to image destination Storing signatures 354752b97084fcf349a28a2f66839d270e728559883dd1edb5ec22e8c9c6adb9 Image 'a-very-nice-image' was built successfully \o/
列出构建
我们可以列出已完成的生成:
$ pip3 install ansible-bender
0
获取生成日志
想稍后检查生成日志吗?没问题!
$ pip3 install ansible-bender
1
使用podman定位构建的图像
一旦它们建成,您可以立即将它们与podman一起使用:
$ pip3 install ansible-bender
2
Buildah配置
如果你熟悉波德曼和buildah,你知道你可以 配置 这些工具。Ansible Bender不会以任何方式更改此配置,因此 如何建立Buildah和Podman取决于你。同样适用于跑步 Ansible Bender是否为根:buildah允许您使用无根 容器。
我的建议是使用覆盖存储后端。VFS后端很慢 效率低下。
缓存机制
ansible bender有一个缓存机制。默认情况下启用。AB缓存 任务结果(=图像)。如果任务内容没有更改,并且基本图像是 同样,该层是从缓存加载的,而不是再次被处理。这个 无法正确处理进程文件:ab不处理文件的任务 然而,
您可以通过两种方式控制缓存:
- 通过运行ab build--no cache来完全禁用它
- 或者在您的任务中添加一个名为
no cache
-ab的标记 不会尝试从缓存加载
分层机制
在默认情况下构建图像时,每个任务(安装程序除外)都将 缓存为图像层。这可能会对存储和 安全:可能有些东西你不想缓存或存储 在一个层中(证书、包管理器元数据、构建工件)。
AB允许您轻松禁用分层机制。你要做的就是
向将禁用分层(和缓存)的任务添加标记stop layering
。
对于该任务和以下所有任务。
OKD中的Ansible Bender
最近我开始尝试在openshift中运行ab 起源-想象一下 使用Ansible Playbooks作为定义,在群集中生成图像。
默认情况下,openshift在 限制性 环境。在概念证明中,我被迫在一个特权 豆荚.最后,整个测试套件都通过了这个特权pod。