Acelera Ansible con Mitogen

¡Acelera Ansible con Mitogen!


versión rusa


Ansible es uno de los sistemas de gestión de configuración más populares en la actualidad. Después de que fuera adquirido por Red Hat en 2015, Ansible alcanzó un número de miles de contribuyentes y se convirtió en una de las herramientas de implementación y orquestación más utilizadas. Sus casos de uso son bastante impresionantes.


Ansible funciona mediante conexiones SSH a hosts remotos. Abre la sesión SSH, inicia sesión en el shell, copia el código de Python a través de la red y crea un archivo temporal en hosts remotos con este código. En el siguiente paso, ejecuta el archivo actual con el intérprete de Python. Todo este flujo de trabajo es bastante pesado y hay varias formas de hacerlo más rápido y ligero.


Una de estas formas es usar tuberías SSH que reutilizan una sesión SSH para copiar el código python de múltiples tareas y evitar abrir varias sesiones, lo que ahorra mucho tiempo. (Simplemente no olvide deshabilitar la configuración requiretty para sudo en el lado remoto en /etc/sudoers )


La nueva forma de acelerar Ansible es una gran biblioteca de Python llamada Mitogen . Si alguien como yo no estaba familiarizado con él, esta biblioteca permite la ejecución rápida de código python en un host remoto y Ansible es solo uno de sus casos. Mitogen utiliza tuberías UNIX en máquinas remotas al pasar código python "en escabeche" comprimido con zlib. Esto permite ejecutarlo rápido y sin mucho tráfico. Si está interesado, puede leer detalles sobre cómo funciona en su página "Cómo funciona" . Pero nos centraremos hoy en la parte relacionada de Ansible.


Mitogen en circunstancias específicas puede acelerar su Ansible en algunas ocasiones y reducir significativamente su ancho de banda. Veamos los casos de uso más populares y descubramos si es útil para nosotros.


Los casos de uso más populares para que yo ejecute Ansible son: creación de archivos de configuración en un host remoto, instalación de paquetes, descarga y carga de archivos desde y hacia un host remoto. Tal vez desee verificar otros casos de uso, deje comentarios a este artículo.


¡Empecemos a rodar!


Configurar Mitogen para Ansible es bastante simple:
Instale el módulo Mitogen:


 pip install mitogen 

Luego, configure las variables de entorno o configure las opciones de configuración en el archivo ansible.cfg, ambas opciones están bien:
Supongamos que /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy es su camino a la biblioteca Mitogen instalada.


 export ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy export ANSIBLE_STRATEGY=mitogen_linear 

o


 [defaults] strategy = mitogen_linear strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy 



Prepare Ansible en virtualenv, con y sin Mitogen habilitado:


 virtualenv mitogen_ansible ./mitogen_ansible/bin/pip install ansible==2.7.10 mitogen virtualenv pure_ansible ./pure_ansible/bin/pip install ansible==2.7.10 

Tenga en cuenta que Mitogen 0.2.7 no funciona con Ansible 2.8 (para mayo de 2019)


Crear alias:


 alias pure-ansible-playbook='$(pwd)/pure_ansible/bin/ansible-playbook' alias mitogen-ansible-playbook='ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy:$(pwd)/mitogen_ansible/lib/python3.7/site-packages/ansible_mitogen/plugins/strategy ANSIBLE_STRATEGY=mitogen_linear $(pwd)/mitogen_ansible/bin/ansible-playbook' 

Ahora probemos el libro de jugadas que crea el archivo en el control remoto:


 --- - hosts: all gather_facts: false tasks: - name: Create files with copy content module copy: content: | test file {{ item }} dest: ~/file_{{item}} with_sequence: start=1 end={{ n }} 

Y ejecútelo con Mitogen y sin crear 10 archivos:


 time mitogen-ansible-playbook file_creation.yml -i hosts -en=10 &>/dev/null real 0m2.603s user 0m1.152s sys 0m0.096s time pure-ansible-playbook file_creation.yml -i hosts -en=10 &>/dev/null real 0m5.908s user 0m1.745s sys 0m0.643s 

En este momento vemos una mejora en x2 veces. Vamos a ver si hay 20, 30, ..., 100 archivos:


 time pure-ansible-playbook file_creation.yml -i hosts -en=100 &>/dev/null real 0m51.775s user 0m8.039s sys 0m6.305s time mitogen-ansible-playbook file_creation.yml -i hosts -en=100 &>/dev/null real 0m4.331s user 0m1.903s sys 0m0.197s 

¡Finalmente, mejoramos el tiempo de ejecución en más de 10 veces!


Ahora probemos diferentes escenarios y veamos cómo mejora:


  • Escenario de carga de archivos desde el host local a remoto (con módulo de copy ):
    Subiendo archivos


  • Escenario de creación de archivos en el host remoto con módulo de copy :
    Creando archivos


  • Escenario con recuperación de archivos del host remoto a local:
    Obteniendo archivos



Probemos el último escenario en algunos (3) hosts remotos, por ejemplo, cargando archivos:
Subir archivos a varios hosts


Como podemos ver, el Mitogen nos ahorra tiempo y ancho de banda en estos escenarios. Pero si el cuello de botella no es Ansible, sino, por ejemplo, E / S de disco o red, o en otro lugar, entonces es difícil esperar que Mitogen ayude, por supuesto.


Ejecutemos, por ejemplo, la instalación de paquetes con yum / dnf y la instalación de módulos de python con pip.
Los paquetes se almacenaron previamente en caché para evitar dependencias de fallas en la red:


 --- - hosts: all gather_facts: false tasks: - name: Install packages become: true package: name: - samba - httpd - nano - ruby state: present - name: Install pip modules become: true pip: name: - pytest-split-tests - bottle - pep8 - flask state: present 

Con Mitogen, lleva 12 segundos, así como con Ansible puro.


En la página Mitogen para Ansible puede ver puntos de referencia y mediciones adicionales. Como declara la página:


Mitogen no puede mejorar un módulo una vez que se está ejecutando, solo puede garantizar que el módulo se ejecute lo más rápido posible

Es por eso que es importante encontrar dónde están sus cuellos de botella y si están relacionados con las operaciones de Ansible, Mitogen lo ayudará a resolverlo y acelerar significativamente sus libros de jugadas.

Source: https://habr.com/ru/post/453446/


All Articles