El ajuste de rendimiento en Ansible es crucial para asegurar que las automatizaciones se ejecuten de manera eficiente y rápida, especialmente en entornos grandes y complejos. En esta sección, exploraremos diversas técnicas y configuraciones que pueden ayudar a optimizar el rendimiento de tus playbooks y tareas de Ansible.

  1. Paralelismo y Conexiones

1.1. Configuración de Paralelismo

Ansible permite ejecutar tareas en múltiples hosts en paralelo. La configuración predeterminada es ejecutar tareas en 5 hosts a la vez, pero esto se puede ajustar según las necesidades de tu infraestructura.

# ansible.cfg
[defaults]
forks = 10
  • forks: Este parámetro define el número de procesos paralelos que Ansible puede ejecutar. Aumentar este número puede mejorar el rendimiento, pero también puede aumentar la carga en el controlador de Ansible y en los hosts gestionados.

1.2. Control de Conexiones

El tipo de conexión y su configuración también pueden afectar el rendimiento. Ansible utiliza SSH por defecto, pero hay opciones para optimizar estas conexiones.

# ansible.cfg
[ssh_connection]
pipelining = True
control_path = %(directory)s/%%h-%%r
  • pipelining: Habilitar el pipelining puede reducir el número de conexiones SSH necesarias para ejecutar tareas, mejorando así el rendimiento.
  • control_path: Ajustar el control_path puede ayudar a evitar problemas con rutas de socket demasiado largas en sistemas Unix.

  1. Optimización de Playbooks

2.1. Uso de Fact Caching

El almacenamiento en caché de hechos (facts) puede reducir el tiempo necesario para recopilar información sobre los hosts gestionados.

# ansible.cfg
[defaults]
gathering = smart
fact_caching = jsonfile
fact_caching_connection = /tmp/ansible_cache
fact_caching_timeout = 86400
  • gathering: La opción "smart" permite a Ansible decidir cuándo es necesario recopilar hechos.
  • fact_caching: Especifica el método de almacenamiento en caché (por ejemplo, jsonfile).
  • fact_caching_connection: Define la ubicación del archivo de caché.
  • fact_caching_timeout: Establece el tiempo de vida de los hechos en caché.

2.2. Minimizar el Uso de when

El uso excesivo de condicionales when puede ralentizar la ejecución de playbooks. Siempre que sea posible, organiza las tareas de manera que minimices el uso de condicionales.

tasks:
  - name: Install package
    yum:
      name: httpd
      state: present
    when: ansible_os_family == "RedHat"

En lugar de usar múltiples condicionales, considera agrupar tareas similares y aplicar condicionales a bloques de tareas.

  1. Uso de Callbacks y Plugins

3.1. Callbacks

Los callbacks pueden proporcionar información útil sobre el rendimiento de tus playbooks. Ansible incluye varios callbacks que se pueden habilitar para obtener métricas detalladas.

# ansible.cfg
[defaults]
callback_whitelist = profile_tasks
  • profile_tasks: Este callback proporciona información sobre el tiempo que toma cada tarea, lo que puede ayudarte a identificar cuellos de botella.

3.2. Plugins de Estrategia

Los plugins de estrategia pueden cambiar la forma en que Ansible ejecuta las tareas. Por ejemplo, la estrategia "free" permite que las tareas se ejecuten en cualquier orden, lo que puede mejorar el rendimiento en ciertos escenarios.

# ansible.cfg
[defaults]
strategy = free
  • free: Permite que las tareas se ejecuten tan pronto como los hosts estén disponibles, en lugar de esperar a que todos los hosts completen la tarea actual.

  1. Ejercicios Prácticos

Ejercicio 1: Ajuste de Paralelismo

  1. Modifica el archivo ansible.cfg para aumentar el número de forks a 20.
  2. Ejecuta un playbook en un entorno con al menos 10 hosts y mide el tiempo de ejecución.
  3. Compara el tiempo de ejecución con la configuración predeterminada de 5 forks.

Ejercicio 2: Habilitación de Fact Caching

  1. Configura el almacenamiento en caché de hechos utilizando el método jsonfile.
  2. Ejecuta un playbook que recopile hechos de los hosts gestionados.
  3. Verifica que los hechos se almacenan en la ubicación especificada y mide el tiempo de ejecución con y sin caché.

Ejercicio 3: Uso de Callbacks

  1. Habilita el callback profile_tasks en el archivo ansible.cfg.
  2. Ejecuta un playbook y revisa la salida para identificar las tareas que toman más tiempo.
  3. Optimiza las tareas identificadas y vuelve a ejecutar el playbook para medir las mejoras en el rendimiento.

Conclusión

El ajuste de rendimiento en Ansible es una combinación de configuraciones adecuadas y buenas prácticas en la escritura de playbooks. Al ajustar el paralelismo, optimizar las conexiones, utilizar el almacenamiento en caché de hechos y emplear callbacks y plugins de estrategia, puedes mejorar significativamente la eficiencia de tus automatizaciones. Asegúrate de probar y medir los cambios para encontrar la configuración óptima para tu entorno específico.

© Copyright 2024. Todos los derechos reservados