Curso Ansible: Optimización y buenas prácticas
Como ya hemos hablado en todo el curso, Ansible es una herramienta poderosa para la automatización de infraestructuras IT. Desde su instalación hasta la ejecución de playbooks complejos, su flexibilidad y simplicidad la convierten en una opción destacada para la gestión de entornos de cualquier tamaño. Sin embargo, cuando los proyectos crecen y se vuelven más complejos, es crucial implementar estrategias de optimización y buenas prácticas para asegurar eficiencia, escalabilidad y mantenimiento a largo plazo.
En esta entrada del blog, aprenderás cómo llevar tus habilidades con Ansible al siguiente nivel optimizando tus playbooks, roles y configuraciones. Seguro que hay otras más, encantado de conocerlas 🙂
1. Organización y estructura del proyecto de Ansible
Mantener un proyecto bien organizado facilita el mantenimiento, la colaboración en equipo y la escalabilidad.
- Usa roles siempre que sea posible: Los roles proporcionan una forma estructurada de dividir tareas y reutilizar código.
- Ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
my_ansible_project/ ├── inventories/ │ ├── production/ │ │ ├── hosts │ │ └── group_vars/ │ └── staging/ ├── roles/ │ ├── webserver/ │ │ ├── tasks/ │ │ ├── handlers/ │ │ ├── templates/ │ │ ├── files/ │ │ ├── vars/ │ │ ├── defaults/ │ │ └── meta/ └── playbooks/ ├── deploy.yml └── site.yml |
- Divide las variables por entorno: Usa group_vars y host_vars para personalizar configuraciones por grupo o máquina.
- Ejemplo:
1 |
group_vars/webservers.yml |
1 |
nginx_version: "1.20.1" |
- Crea playbooks modulares: En lugar de un único playbook gigante, divide las tareas en múltiples playbooks específicos.
2. Optimización de Playbooks en Ansible
Evitar tareas redundantes
- Usa changed_when para reducir tareas innecesarias. Fichero YAML:
1 2 3 4 5 |
- name: Reiniciar servicio solo si cambió la configuración service: name: nginx state: restarted changed_when: false |
Uso eficiente de loops
- Ejecuta tareas con listas en lugar de tareas repetitivas:
1 2 3 4 5 6 7 8 |
- name: Instalar paquetes apt: name: "{{ item }}" state: present loop: - nginx - curl - git |
Paralelización
- Configura la ejecución paralela para acelerar despliegues. Esto ejecuta hasta 10 hosts simultáneamente. Lanzamos el comando BASH:
1 |
ansible-playbook site.yml -f 10 |
Control de dependencias
- Usa block para agrupar tareas y gestionar errores. Fichero YAML:
1 2 3 4 5 6 7 8 9 10 11 |
- block: - name: Instalar dependencias apt: name: "{{ item }}" state: present loop: - nginx - php rescue: - debug: msg: "Error instalando dependencias" |
3. Variables y secretos en Ansible
Centraliza las variables en roles
- Usa defaults/main.yml para valores predeterminados y vars/main.yml para valores específicos del rol.
Gestiona secretos con Ansible Vault
- Cifra las variables sensibles:
1 |
ansible-vault encrypt group_vars/all/secrets.yml |
- Usa claves de Vault para desencriptar automáticamente. Fichero YAML:
1 2 |
vars_files: - group_vars/all/secrets.yml |
4. Buenas prácticas en roles Ansible
Usa estándares de roles
- Sigue las mejores prácticas de Ansible Galaxy para roles. Genera roles con:
1 |
ansible-galaxy init nombre_role |
Roles reutilizables
- Parametriza roles para hacerlos reutilizables en diferentes entornos:
1 2 |
vars: nginx_version: "1.20.1" |
5. Gestión avanzada de inventarios en Ansible
Usa inventarios dinámicos
- Los inventarios dinámicos permiten interactuar con infraestructuras en la nube (AWS, Azure, Google Cloud):
1 |
ansible-inventory --list --yaml -i aws_ec2.yaml |
Etiquetado de hosts
- Usa grupos y etiquetas para agrupar hosts según su función o entorno. Fichero YAML:
1 2 3 |
[webservers] web1 ansible_host=192.168.1.100 web2 ansible_host=192.168.1.101 |
6. Rendimiento y escalabilidad
Optimización de SSH
- Usa multiplexación de SSH para acelerar conexiones. Fichero INI:
1 2 |
[ssh_connection] pipelining = True |
Caché de hechos
- Habilita el caché para evitar recopilar hechos en cada ejecución. Para el que no lo sepa, un “hecho” o “fact” es información recopilada automáticamente por Ansible sobre un host antes de ejecutar tareas. Estos hechos proporcionan detalles como el sistema operativo, la dirección IP, el hostname, las interfaces de red, la arquitectura de la CPU, la memoria disponible, entre otros. Se utilizan para adaptar las configuraciones o tareas de un playbook según las características del host.
- Fichero INI:
1 2 3 |
[defaults] fact_caching = jsonfile fact_caching_connection = /tmp/ansible_facts |
7. Depuración y testing en Ansible
Validación de playbooks
- Usa ansible-lint para verificar la calidad de los playbooks:
1 |
ansible-lint site.yml |
Pruebas locales
- Usa Vagrant o Molecule para probar tus playbooks localmente antes de aplicarlos en producción. Intentaré hablar de esto en otra entrada.
8. Ansible en entornos CI/CD
Automatización de despliegues
- Integra Ansible con Jenkins, GitLab CI/CD o GitHub Actions para ejecutar playbooks como parte del pipeline:
1 2 3 4 |
stages: - name: Deploy script: - ansible-playbook site.yml |
ENTRADAS RELACIONADAS CURSO ANSIBLE
- Curso Ansible: Qué es y para qué sirve
- Curso Ansible: Instalación, configuración inicial y ejemplo práctico básico
- Curso Ansible: Puertos de comunicación necesarios
- Curso Ansible: Playbooks conceptos básicos
- Curso Ansible: Manejo de Inventarios
- Curso Ansible: Manejo de Variables
- Curso Ansible: definición y uso de Roles
- Curso Ansible: qué son los Handlers
- Curso Ansible: Condicionales y bucles
- Curso Ansible: Gestión de secretos y credenciales con Ansible Vault
- Curso Ansible: Uso de roles de la comunidad con Ansible Galaxy
- Curso Ansible: Despliegue de aplicaciones en contenedores con Ansible
- Curso Ansible: Integración de Ansible con CI/CD pipelines
- Curso Ansible: Generar ficheros YAML
- Curso Ansible: Integración de Ansible con Terraform para gestionar Proxmox
- Curso Ansible: Provisioners de Ansible en Terraform
- Curso Ansible: Hecho o Fact
- Curso Ansible: Optimización y buenas prácticas
OTRAS ENTRADAS RELACIONADAS ANSIBLE
- Ansible: Conceptos básicos
- Ansible: Comandos básicos
- Instalar Ansible en Centos 7
- Ansible: Gestión básica máquinas virtuales Proxmox
- MacOS: Instalar Podman y Ansible
- Docker Swarm: Instalar Ansible AWX
- Ansible: Validar ficheros YAML
- Ansible: Instalar SQL Server 2019 en Linux
- Ansible: Crear página web WordPress
- Ansible: Instalación servidores web
- Ansible: Gestión de máquina Windows
Te ha gustado la entrada SGUENOS EN TWITTER O INVITANOS A UN CAFE?