O que é um desempenho razoável para um simples Playbook Ansible contra ~ 100 hosts?

11

Estamos começando a examinar o Ansible para substituir uma instalação antiga do cfengine2. Eu tenho um manual simples que:

  • copia um arquivo sudoers
  • copia um resolv.conf com modelo (alimentado com dados group_vars e host_vars)
  • verifica se alguns serviços estão sendo executados
  • verifica a presença de um usuário local

O playbook leva mais de 4 minutos de tempo de exibição para executar 97 máquinas (todas conectadas em rede rápida de 1gig ou 10gig, com latência LAN sub-1ms) e consome mais de 50% da CPU na VM de memória 4G de 2 núcleos Eu estou correndo isso.

Demora cerca de 11 segundos para rodar em uma única máquina, com cerca de 4sec consumido pelo usuário + sys, o que ainda parece um pouco excessivo para a quantidade de trabalho envolvida.

Os bits óbvios:

  • Eu tenho pipeline explicitamente habilitado em um diretório-dir diretas ansible.cfg
  • Tenho cache de fato para o jsonfile ativado, mesmo ansible.cfg local
  • Tenho garfos definidos para 50, mesmo (tentei outros valores)
  • Tenho certeza de que o Ansible está usando o SSH, não o Paramiko, e está usando o soquete de controle persistente - vejo os processos do SSH sendo iniciados e persistindo durante a execução.

Este nível de desempenho é normal ou está errado com minha configuração? Como posso determinar qual, em caso afirmativo?

Editar: desde agosto de 2017, ainda estamos vendo esse problema. Versão Ansible é 2.2.1 e o tamanho da cartilha cresceu agora. Números atualizados:

  • 98 hosts
  • ansible -m ping all leva 4.6s reais, usuário 3.2s, 2.5s horários sys
  • uma execução de todo o manual leva 4 minutos, usando 100% de usuário e ~ 35% de CPU do sistema ao fazer isso (em um servidor de implantação de VM de 2 núcleos, 100% sendo uma CPU completa)
  • O
  • target OS é em grande parte o CentOS 7, alguns CentOS 6
  • a criação de perfil não revela nenhum ponto de acesso de tarefa específico AFAICT
Embora o manual agora seja muito maior, ainda acho que não há nada lá para justificar esse nível de carga de CPU no servidor de playbook - talvez o tempo de wallclock, mas o servidor de implantação deve estar ocioso na maior parte do tempo a corrida, tanto quanto eu posso ver, é principalmente cópias de arquivos e algumas expansões de modelos.

Note que estamos fazendo um uso bastante extenso de host / groupvars

Várias pessoas perguntaram sobre o perfil, a cauda de uma corrida com perfil:

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
    
por user53814 02.12.2016 / 18:10

1 resposta

1

no seu ansible.cfg defina o seguinte:

[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

Além disso, em sua cartilha, defina a estratégia como 'livre'

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

Por fim, desative a coleta de fatos no seu jogo: gather_facts: false

Se, depois de criar o perfil, você está vendo muito isso:

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)

esmague essas ações em ansible.cfg em [defaults]:

por exemplo. squash_actions = yum,pip,bar

    
por 26.07.2017 / 18:37