【Ansible 2.12】在WSL2中使用Docker构建CentOS 6的Ansible执行环境
目录
大家好。
最近,我胃痛、发冷,睡不着觉,体力没了。
本文介绍如何“在 WSL2 中使用 Docker 构建运行 CentOS 6 环境的 Ansible 执行环境”。
强烈建议迁移旧环境,例如 CentOS 6 环境,但由于各种原因,某些环境可能会保留。
当前版本的 Ansible 基本上不兼容这些环境。
因此,我们准备了一个简单易用的流程,用于使用 Docker 为旧版本构建环境。
在解释前提的同时,我们会一步一步地解释和解释步骤。
前言
- 我们不建议在 CentOS 6 上运行。
这只是对 CentOS 6 的紧急应对 - 您使用的版本不再受支持。
这也是为了紧急使用,不建议使用。
执行环境
■ Linux 环境
操作系统:AlmaLinux 版本 8.5(WSL2 环境)
Shell:Bash
Docker:26.1.0,内部版本 9714adc■ Windows 环境
操作系统:Windows11 Pro(版本:23H2)
语言设置:更改为日语■ CentOS 6 环境(Vagrant + VirtualBox)
操作系统:CentOS 6.9(bento / centos-6.9)
Vagrant:2.4.1
VirtualBox:7.0.18 r162988(Qt5.15.2)
IP:192.168.33.15
前提解释
问:为什么 CentOS 6 环境需要单独的 Ansible 环境?
答:较新版本的 Ansible(2.13 或更高版本)不再支持 CentOS 6 的标准 Python 2.6,因此无法再加载 playbook。
问:为什么在 WSL2 中使用 Docker?
答:主要使用的 Ansible 环境是 AlmaLinux 8 (WSL2),在其中运行更容易,包括管理 playbook。
问:是 Docker 而不是 pyenv 吗?
A. 总结:从我的角度来看,Docker 更方便、更容易。
- (因为不经常使用)如果使用Python版本控制,迁移到PC时重建会很麻烦。
- Dockerfile可以被其他人用来创建同样的环境,复用性更强。
- 作为基础设施工程师,使用 Docker 比使用 Python 版本控制更好。
乐趣获得知识- (从我的心理学角度)即使你忘记了你输入了什么,通过查看 Dockerfile 也很容易做一些事情。
问:为什么选择 Ansible-core 2.12?
答:2.12 是与 2.6 兼容的受管节点 Python 的最新次要版本。
*如果您确实想在控制节点上运行Python 2.7或3.7,请使用Python 2.11。
施工步骤
1.WSL2准备
由于这不是本文的主题,我将简要解释一下。
启用“Windows 功能”下的“虚拟机平台”。
然后,在 Microsoft Store 中安装“Windows Subsystem for Linux”和“AlmaLinux 8 WSL”。
您可以通过启动“AlmaLinux 8 WSL”并设置首次启动的用户名和密码来使用它。
2.Docker准备
首先,安装 Docker。
#dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo #dnf install docker-ce #systemctl start docker #systemctl启用docker #docker --version Docker版本26.1.0, build 9714adc *以作者环境为例
3. 创建Dockfile
决定要工作的目录并在其中创建 Dockerfile。
我正在使用位置 /home/AlmaLinux/docker-study/,但请随意根据需要配置它。
# 镜像规格 FROM almalinux:8.9 # 将时间刻度更改为日本时间 RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime # 安装所需的软件包 RUN dnf -y install \ python38 \ python38-devel \ sshpass \ openssh -clients \ && rm -rf /var/cache/dnf/* \ && dnf clean all # 安装 Ansible2.12 RUN pip3 --no-cache-dir install ansible-core==2.12.10 # 指定并自动绑定挂载目标创建 # & 访问容器 WORKDIR /work 时的默认目标
来自 almalinux:8.9
它与 WSL2 使用的发行版和主要版本相匹配。
运行 ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
设置为日本时间。
留下日志等的时候,如果时间是UTC的,就会不同步,会很麻烦,所以我想暂时设置一下时间。
运行 dnf -y 安装 \
AlmaLinux 8的Appstream存储库中的东西,python3.8(3.9也可以)
并且,由于 sshpass 和 openssh-client 可能不包含在与 ssh 相关的映像中,因此请安装它们。
&& rm -rf /var/cache/dnf/* \
删除 dnf(≒yum) 缓存以减小 Docker 镜像的大小。
看来下面介绍的dnf clean all命令可能删除不了,所以先手动删除。
&& dnf 清理全部
删除 dnf(≒yum) 缓存以减小 Docker 镜像的大小。
为什么是“&&”而不是“RUN”?
减少 Docker 镜像的大小。
每次执行 RUN 时,容量都会随着 Docker 镜像中添加更多层而增加。
因此,我们将通过将可以在一次 RUN 中组合在一起的部分进行分组来减少容量。
运行 pip3 --no-cache-dir 安装 ansible-core==2.12.10
由于格式已从 Ansible 2.10 或更高版本更改为 2.9 或更早版本,因此为轻量级主体部分指定“ansible-core”。
其中,指定2.12.10,这是2.12的最新版本。
如果你想重用你已经使用了很长时间的playbook,最好指定“ansible==2.9.27(或者你已经使用了很长时间的版本)”以实现兼容性。
*如果版本太旧,将要求您使用Python 2系列或3.8或更早版本,因此您需要进行调整。
补充:关于收藏
由于“ansible-core”具有最小配置,因此只能使用基本集合(ansible.builtin)。
如果您想在使用“ansible-core 2.12.10”时使用许多模块,请指定“ansible==5.10.0”,这是一个包含“ansible-core 2.12.10”和模块关系的社区包。
但是,图像尺寸会更大。
另外,如果您正在编写安装剧本所需的集合,我认为仅使用“ansible-core”没有问题。
集合关系和版本支持比较复杂,因此本文仅使用基础的“ansible-core”。
工作目录/工作
这指定了 Dockerfile 中的工作目录。
这次,我们指定绑定安装的目标目录。
如果指定 WORKDIR,它将自动创建,无需 mkdir(Linux 端命令),从而减少描述量。
当您进入容器时,配置也会保留,因此您可以直接从绑定安装开始工作。
4. docker构建
从 Dockerfile 创建图像。
#docker build -t ansible2.12:v1 -f Dockerfile . #docker images 存储库标签 图像 ID 创建大小 ansible2.12 v1 58f4663b655b 14 秒前 286MB
我能够成功创建一个存储库名称为“ansible2.12”且标签名称为“v1”的映像。
5. docker run(绑定挂载)
作者正在通过链接 WSL2 和 VScode 来编写 playbook 等。
因此,为 Ansible 2.12 work 准备一个名为 work 的目录,并将其绑定挂载为共享目录。
#cd /home/username/docker-study *验证作者作品放置目录 #docker run -it --name Ansible2.12 --mount type=bind,src=./work,dst=/work ansible2 .12: v1
我写了发布博客的相对路径src=./work,所以请在“work”目录所在的位置执行上面的内容。
写绝对路径没有问题,随意。
6.启动执行环境
让我们运行一下吧。
#docker run -it --name Ansible2.12 --mount type=bind,src=./work,dst=/work ansible2.12:v1 [root@cf3c2fa0c4d8 work]#
在执行的同时,我使用“-it”选项连接到容器。
WORKDIR 也已启用并已移至“/work”。
7、Ping测试
作为快速测试 Ansible 是否存在任何问题,让我们使用 ansible-core 的标准集合 (ansible.builtin) 中的 ping 模块。
[root@cf3c2fa0c4d8 work]# ansible -m ping -ihosts targetnode [弃用警告]:ansible-core 2.13 将需要目标上有 Python 2.7 或更高版本。当前版本:2.6.6(r266:84292,2016 年 8 月 18 日,15) :13:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-17)]。此功能将在版本 2.13 中删除。可以通过在 targetnode | SUCCESS = 中设置 deprecation_warnings=False 来禁用弃用警告。 > { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" }
有警告,但由于目标(受管节点)是 CentOS 6 (Python 2.6),因此
仅通知“You can only use Python 2.7 or later from ansible-core 2.13 (warning)”,所以它不是没有问题。
ping成功到达CentOS 6环境进行验证。
完成
这样就完成了整个过程。
之后,只需放置剧本和库存即可开始工作。
我将在接下来的文章中为 CentOS 6 撰写 Ansible 文章。
最后
我尝试在 CentOS 6 环境中使用 Ansible 轻松运行它,但无法使用当前版本运行它。
写这篇文章的原因是提前做好准备,以避免最终不得不手动完成的痛苦,因为构建专用环境并验证它很麻烦。
我使用 Docker 是因为我认为这是最快的方法,但它仍然简单方便。 (我会在操作方面闭上眼睛。)
我希望将来在我的基础设施工程工作中更多地使用它。
我希望这篇文章能为阅读它的人提供一些有用的知识/信息。
感谢您阅读本文。
参考资料
发布和维护 | Ansible 官方
https://docs.ansible.com/ansible/latest/reference_appendices/release_and_maintenance.html
Dockerfile 参考 — Docker-docs-ja 24.0
文档https://docs.docker.jp/engine/reference/builder.html
使用绑定挂载 | Docker 文档
https://docs.docker.jp/storage/bind-mounts.html
层 — Docker-docs-ja 24.0 文档 | Docker 文档
https://docs.docker.jp/build/guide/layers.html