美文网首页运维工作中的排坑
Ansible执行速度优化指北

Ansible执行速度优化指北

作者: 左舷的风 | 来源:发表于2019-11-06 18:53 被阅读0次

    更新日志:
    2019.11.06  更新方法一:禁用采集facts信息;

      最近没事看了看ansible,试了个最简单的playbook,发现执行效率很差,跟saltstack差很多,google了下,发现主要是因为ansible使用ssh执行导致的(这一点也是跟saltstack最大的不同),在此找了找解决方法记录分享下。
      ansible/python版本如下:

    #ansible --version
    ansible 2.4.2.0
    python version = 2.7.5 (default, Apr  9 2019, 14:30:50) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
    

      playbook内容hello.yml内容,一个很简单的hostname命令

    ---
    - hosts: k8s_nodes
      remote_user: root
      
      tasks:
        - name: hello
          command: hostname
    

      执行hello.yml,3个节点竟然需要58s!

    [root@master playbook]# time ansible-playbook hello.yml 
    
    PLAY [k8s_nodes] ****************************************************************************************************************************************************************************************************************************
    
    TASK [Gathering Facts] **********************************************************************************************************************************************************************************************************************
    ok: [10.1.129.122]
    ok: [10.1.129.123]
    ok: [10.1.129.121]
    
    TASK [hello] ********************************************************************************************************************************************************************************************************************************
    changed: [10.1.129.122]
    changed: [10.1.129.123]
    changed: [10.1.129.121]
    
    PLAY RECAP **********************************************************************************************************************************************************************************************************************************
    10.1.129.121               : ok=2    changed=1    unreachable=0    failed=0   
    10.1.129.122               : ok=2    changed=1    unreachable=0    failed=0   
    10.1.129.123               : ok=2    changed=1    unreachable=0    failed=0   
    
    
    real    0m58.228s
    user    0m10.588s
    sys     0m3.153s
    

      在playbook中添加一行gather_facts: no,再执行只需要6s不到!:

    [root@master playbook]# time ansible-playbook hello.yml 
    
    PLAY [k8s_nodes] ****************************************************************************************************************************************************************************************************************************
    
    TASK [hello] ********************************************************************************************************************************************************************************************************************************
    changed: [10.1.129.122]
    changed: [10.1.129.123]
    changed: [10.1.129.121]
    
    PLAY RECAP **********************************************************************************************************************************************************************************************************************************
    10.1.129.121               : ok=1    changed=1    unreachable=0    failed=0   
    10.1.129.122               : ok=1    changed=1    unreachable=0    failed=0   
    10.1.129.123               : ok=1    changed=1    unreachable=0    failed=0   
    
    
    real    0m5.866s
    user    0m3.785s
    sys     0m1.020s
    

      关于facts是什么以及为什么不禁用会导致慢可以看这篇文章《Ansible 进阶 | facts 缓存》
      简单来说就是: facts是远程主机的一堆系统信息,Ansible在对远程主机执行任何一个 playbook 之前,总会先通过 setup 模块获取该主机的 facts,并暂存在内存中,直至该 playbook 执行结束。随着主机数量增多,获取这么多数据也是是非常耗时的。
      看来使用gather_facts: no也是暂时解决这个问题,后续还需要使用redis缓存facts信息(关键词:Ansible 的配置文件中可以修改 gathering结合redis缓存缓存facts信息)

    相关文章

      网友评论

        本文标题:Ansible执行速度优化指北

        本文链接:https://www.haomeiwen.com/subject/tucpbctx.html