Estamos comenzando a mirar Ansible para reemplazar una instalación antigua de cfengine2. Tengo un libro de jugadas simple que:
- copia un archivo de sudoers
- copia un resolv.conf con plantilla (alimentado con datos group_vars y host_vars)
- comprueba que se están ejecutando un par de servicios
- comprueba la presencia de un usuario local
El libro de jugadas toma más de 4 minutos de tiempo de reloj de pared para ejecutarse contra 97 máquinas (todas conectadas a través de redes rápidas de 1 o 10 gigas, con latencia LAN inferior a 1 ms) y consume más del 50% de la CPU en la VM de memoria 4G de 2 núcleos cuando estoy ejecutándolo
Se tarda unos 11 segundos en ejecutarse en una sola máquina, con aproximadamente 4 segundos de tiempo de CPU de usuario + sys consumido, lo que TBH todavía parece un poco excesivo para la cantidad de trabajo involucrado.
Los bits obvios:
- Tengo la canalización explícitamente habilitada en un playbook-dir local ansible.cfg
- Tengo hecho el almacenamiento en caché a jsonfile habilitado, el mismo ansible.cfg local
- Tengo tenedores establecidos en 50, igual (he intentado con otros valores)
- Estoy seguro de que Ansible está usando SSH, no Paramiko, y está usando el zócalo de control persistente: puedo ver que los procesos SSH se inician y persisten durante la ejecución.
¿Es normal este nivel de rendimiento o hay algún problema con mi configuración? ¿Cómo puedo determinar qué, si es así?
Editar: a partir de agosto de 2017, todavía estamos viendo este problema. La versión de Ansible es 2.2.1 y el tamaño del libro de jugadas ha crecido ahora. Números actualizados:
- 98 anfitriones
ansible -m ping all
toma 4.6s real, 3.2s usuario, 2.5s sys veces- una ejecución completa del libro de jugadas dura 4 minutos, utilizando 100% de usuario y ~ 35% de CPU del sistema mientras lo hace (en un servidor de implementación de VM de 2 núcleos, el 100% es una CPU completa)
- El sistema operativo objetivo es principalmente CentOS 7, algunos CentOS 6
- la creación de perfiles no revela ningún hotspots de tareas específicas AFAICT
Aunque el libro de jugadas ahora es mucho más grande, todavía no creo que haya nada allí para justificar ese nivel de carga de la CPU en el servidor del libro de jugadas, tal vez el tiempo de reloj de pared, pero el servidor de implementación debería estar inactivo durante la mayor parte de la ejecución, Por lo que puedo ver, se trata principalmente de copias de archivos y algunas expansiones de plantillas.
Tenga en cuenta que estamos haciendo un uso bastante extenso de host / groupvars
Varias personas han preguntado sobre la creación de perfiles, la cola de una carrera con perfiles:
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
fuente
ANSIBLE_CALLBACK_WHITELIST=profile_tasks
y para una depuración más completa conANSIBLE_DEBUG=1
. También preste mucha atención a la velocidad de conexión ssh inicial.watch cat /proc/sys/kernel/random/entropy_avail
mientras se ejecuta el libro de jugadas. Si es menos de 1000, tienes un problema potencial; si es menor que 64 y no se recupera, entonces tiene un problema definido de inanición por entropía. (Común en algunos entornos de VM). Esto se aplica a su servidor de administración y también a los nodos que está administrando.ansible -i all all -m ping
contra más de 300 hosts (en su mayoría máquinas virtuales) tardó menos de 1 minuto. ¿Su libro de jugadas está haciendo algo para cambiar de usuario (convertirse en / sudo / etc.). ¿Cómo funciona '-m ping'? Según la experiencia, diría que desea tener más memoria para 50 tenedores.Respuestas:
en su
ansible.cfg
conjunto lo siguiente:Además, en su libro de jugadas, establezca la estrategia como 'gratuita'
Finalmente, deshabilita la recopilación de datos en tu juego:
gather_facts: false
Si, después del perfil, está viendo mucho de esto:
aplastar esas acciones en
ansible.cfg
[valores predeterminados]:p.ej
squash_actions = yum,pip,bar
fuente