众所周知,使用默认设置 Ansible 无法很快完成其工作。 在本文中,我将指出这样做的几个原因,并提供有用的最小设置,这些设置很可能实际上会提高项目的速度。
这里和下面我们讨论 Ansible 2.9.x,它以您最喜欢的方式安装在新创建的 virtualenv 中。
安装后,在你的剧本旁边创建一个“ansible.cfg”文件 - 这个位置将允许你将这些设置与项目一起传输,而且它们会自动加载。
流水线
有些人可能已经听说过需要使用管道,即不将模块复制到目标系统的文件系统,而是将 Base64 包装的 zip 存档直接传输到 Python 解释器的 stdin,但其他人可能没有,但事实仍然是一个事实:
pipelining = True
收集事实
您是否知道,在默认设置下,每次播放的 Ansible 都会启动参与其中的所有主机的事实收集? 一般来说,如果您不知道,现在您知道了。 为了防止这种情况发生,您需要启用用于收集事实的显式请求模式(显式)或智能模式。 其中,只会从以前的游戏中没有遇到过的那些主机中收集事实。
UPD。 复印时,您必须选择这些设置之一。
gathering = smart|explicit
重用 ssh 连接
如果您曾经在调试模式下运行 Ansible(“v”选项,重复一到九次),您可能已经注意到 ssh 连接不断建立和断开。 所以,这里也有一些微妙之处。
您可以避免同时在两个级别重新建立 ssh 连接的步骤:直接在 ssh 客户端中以及从管理器将文件传输到托管主机时。
要重用打开的 ssh 连接,只需将必要的密钥传递给 ssh 客户端即可。 然后它会开始做以下事情:当第一次建立ssh连接时,它会额外创建一个所谓的控制套接字,在后续安装时,它会检查这个套接字是否存在,如果成功,则重用该套接字现有的 ssh 连接。 为了使这一切有意义,让我们设置非活动状态下保持连接的时间。 您可以阅读更多内容
ssh_args = "-o ControlMaster=auto -o ControlPersist=15m"
要在将文件传输到托管主机时重用已打开的 ssh 连接,只需指定另一个未知设置 ssh_tranfer_method 即可。 关于这个主题的文档非常
transfer_method = piped
顺便说一下,在“develop”分支中也存在这个设置
不怕刀,就怕叉
另一个有用的设置是叉子。 它确定将同时连接到主机并执行任务的工作进程的数量。 由于 Python 作为一种语言的特殊性,使用的是进程,而不是线程,因为 Ansible 仍然支持 Python 2.7 - 没有 asyncio,这里没有必要引入异步行为! 默认情况下 Ansible 运行
forks = 20
我只是立即警告您,这里可能存在一些与控制机上的可用内存量相关的困难。 换句话说,你当然可以设置forks=100500,但是谁说这样就可以呢?
把它们放在一起
因此,对于 ansible.cfg(ini 格式),必要的设置可能如下所示:
[defaults]
gathering = smart|explicit
forks = 20
[ssh_connection]
pipelining = True
ssh_args = -o ControlMaster=auto -o ControlPersist=15m
transfer_method = piped
如果您想隐藏健康人的正常 YaML 库存中的所有内容,那么它可能看起来像这样:
---
all:
vars:
ansible_ssh_pipelining: true
ansible_ssh_transfer_method: piped
ansible_ssh_args: -o ControlMaster=auto -o ControlPersist=15m
不幸的是,这不适用于设置“gathering = smart/explicit”和“forks = 20”:它们的 YaML 等效项不存在。 我们要么在 ansible.cfg 中设置它们,要么通过环境变量 ANSIBLE_GATHERING 和 ANSIBLE_FORKS 传递它们。
关于丝拓素
- 关于 Mitogen 的内容在哪里? - 亲爱的读者,你有权询问。 这篇文章中没有任何地方。 但是,如果你真的准备好阅读它的代码并弄清楚为什么你的剧本在 Mitogen 中崩溃,但在普通 Ansible 中运行良好,或者为什么同一个剧本之前运行良好,但在更新后开始做奇怪的事情 - 好吧,Mitogen可能是你的工具。 应用它、理解它、写文章——我会饶有兴趣地阅读它。
为什么我个人不使用 Mitogen? 因为 Gladiolus 只有在任务非常简单并且一切都很好的情况下才有效。 然而,如果你向左或向右转动一点——就是这样,我们已经到了:作为回应,一些模糊的例外向你飞来,为了完成这幅图,所缺少的是常用短语“谢谢大家” ,每个人都是自由的。” 总的来说,我只是不想浪费时间去寻找下一次“地下敲门声”的原因。
其中一些设置是在阅读过程中发现的
只有注册用户才能参与调查。
您使用以下哪些 Ansible 设置来加速您的项目?
-
69,6%流水线=true32
-
34,8%聚集=智能/显式16
-
52,2%ssh_args =“-o ControlMaster=auto -o ControlPersist=...”24
-
17,4%传输方法=管道8
-
63,0%叉子 = XXX29
-
6,5%这些都不是,只有 Mitogen3
-
8,7%Mitogen + 我会记下这些设置中的哪一个4
由 46 位用户投票。 21 位用户弃权。
想要了解更多有关 Ansible 的内容吗?
-
78,3%是的,当然54
-
21,7%是的,我只是想要更多硬核的东西!15
-
0,0%不,这不是没有必要的0
-
0,0%不,这很复杂!!!0
69 位用户投票。 7 名用户弃权。
来源: habr.com