加速Ansible剧本

时间:2019-03-13 13:53:54

标签: performance ansible ansible-inventory

我正在使用Ansible在大量VM(5000)上运行人偶和其他脚本。 我尝试使用以下选项:

  • 策略:免费
  • 异步:1000 民意调查:0
  • 序列号:20或50或100
  • 叉子:20

我尝试了很多组合,但是对于某些VM,剧本仍然会失败,只有当我使用forks:10和serial:2时才是正确的选择 知道为什么吗?我需要减少执行时间。 谢谢

1 个答案:

答案 0 :(得分:1)

促分裂原可以帮助:https://mitogen.readthedocs.io/en/latest/ansible.html

  

取决于网络条件,执行的模块以及目标在有用工作上已经花费的时间,预计速度将提高1.25倍至7倍,并且CPU使用率至少降低2倍。 Mitogen无法在模块执行后对其进行改进,只能确保模块尽快执行。

     

除了每个用户帐户一个sudo调用之外,每个目标还使用一个连接。这比SSH多路传输与流水线相结合要好得多,因为可以在步骤之间的RAM中保持重要状态,并且系统日志不会因重复的身份验证事件而被垃圾邮件淹没。

     

使用单个网络往返执行步骤,该步骤的代码已经在目标的RAM中存在。消除了多路SSH通道的创建,每个剧本步骤每1 ms的网络延迟就可以节省4 ms的运行时间。

     

积极地重用进程,避免了调用Python和重新编译导入的成本,为每个剧本步骤节省了300-800毫秒。

     

代码临时存储在RAM中,与SSH流水线相比,带宽使用量减少了一个数量级,在典型运行中遍历网络的帧减少了大约5倍。

     

更少写入目标文件系统。在典型配置中,Ansible反复重写ZIP文件并将其提取到目标上的多个临时目录中。完全避免了跨帐户方案中与临时文件有关的安全性问题。

     

这种效果在执行许多短期操作的剧本上最为有效,例如,当执行大型with_items循环以运行简单命令或写入文件时,Ansible的开销便占了操作成本。