什么是一个简单的Ansible剧本对〜100主机的合理性能?

我们开始看Ansible来replace旧的cfengine2安装。 我有一个简单的手册:

  • 复制一个sudoers文件
  • 复制模板化的resolv.conf(由group_vars和host_vars数据提供)
  • 检查一些服务正在运行
  • 检查本地用户的存在

剧本需要花费4分钟的挂钟时间才能运行在97台机器上(全部通过快速1gig或10gignetworking连接,局域网延迟低于1ms),并且占用2核4G内存虚拟机超过50%的CPU运行它。

在一台机器上运行需要大约11秒钟的时间,耗费大约4秒的用户+系统CPU时间,这对于所涉及的工作量而言,TBH仍然有点过分。

显而易见的一点:

  • 我已经在playbook-dir local ansible.cfg中显式启用了pipe道
  • 我有事实cachingjsonfile启用,相同的本地ansible.cfg
  • 我有叉子设置为50,相同(我尝试了其他值)
  • 我确信Ansible使用的不是Paramiko,而是使用持久控制套接字 – 我可以看到SSH进程在运行期间被启动并持续存在。

这种性能水平是正常的还是我的设置有问题? 如果可以的话,我怎么去决定呢?

编辑:截至2017年8月,我们仍然看到这个问题。 Ansible版本是2.2.1,剧本的大小已经增长了。 最新的数字:

  • 98个主机
  • 无论如何,4.6s真实,3.2s用户,2.5s系统时间
  • 一个完整的剧本运行需要4分钟,使用100%的用户和〜35%的系统CPU(2核心虚拟机部署服务器,100%是一个完整的CPU)
  • 目标操作系统主要是CentOS 7,一些CentOS 6
  • 分析不会显示任何特定的任务热点AFAICT

尽pipe现在剧本已经大了很多,但我仍然认为没有什么可以certificatePlaybook服务器上的CPU负载水平 – wallclock时间,但是部署服务器在大部分运行时应该大部分闲置,据我所知,它主要是文件副本和一些模板扩展。

请注意,我们正在对主机/群组进行相当广泛的使用

有几个人询问了关于性能分析的尾部分析:

 Tuesday 01 August 2017 16:02:24 +0100 (0:00:00.539) 0:06:22.991 ******** =============================================================================== yumrepo : centos repos -------------------------------------------------- 9.77s sshd : copy CentOS 6 sshd config ---------------------------------------- 7.41s sshd : copy CentOS 7 sshd config ---------------------------------------- 6.94s core : ensure core packages are present --------------------------------- 6.28s core : remove packages on VM guests ------------------------------------- 5.39s resolv : stop NetworkManager changing resolv.conf ----------------------- 5.25s yumrepo : epel6 gpg key ------------------------------------------------- 3.94s yumrepo : epel7 gpg key ------------------------------------------------- 3.71s yumrepo : nsg gpg key --------------------------------------------------- 3.57s resolv : build resolv.conf ---------------------------------------------- 3.30s yumrepo : nsg repo ------------------------------------------------------ 2.66s resolv : check NetworkManager running ----------------------------------- 2.63s yumrepo : psp repo ------------------------------------------------------ 2.62s yumrepo : ucs repo ------------------------------------------------------ 2.44s yumrepo : epel repo ----------------------------------------------------- 2.27s resolv : check for nmcli ------------------------------------------------ 2.08s core : remove various unwanted files ------------------------------------ 1.42s telegraf : write telegraf.conf file ------------------------------------- 1.13s core : copy sudoers in place -------------------------------------------- 0.94s core : ensure sshd is running ------------------------------------------- 0.90s 

在你的ansible.cfg设置如下:

 [defaults] # profile each task callback_whitelist = profile_tasks # [don't validate host keys](http://docs.ansible.com/ansible/intro_configuration.html#host-key-checking) host_key_checking = False [ssh_connection] pipelining = True 

另外,在你的剧本中,将策略设置为“免费”

 - hosts: all strategy: free tasks: [...] 

最后,在你的游戏中禁用事实聚集: gather_facts: false

如果分析后,你看到很多这样的:

 TASK [pip foo] ok: [10.192.197.252] => (item=ansible) ok: [10.192.197.252] => (item=boto) ok: [10.192.197.252] => (item=boto3) ok: [10.192.197.252] => (item=passlib) ok: [10.192.197.252] => (item=cryptography) 

在[defaults]下ansible.cfg动作:

例如squash_actions = yum,pip,bar