Introducción
En el espacio DevOps, la búsqueda de eficiencia, confiabilidad y escalabilidad en el desarrollo de software y la gestión de infraestructura es fundamental. Ansible, una herramienta de automatización de código abierto, se ha convertido en una tecnología clave para lograr estos objetivos. Esta guía tiene como objetivo proporcionar una comprensión profunda de Ansible, cubriendo sus aspectos fundamentales, archivos de configuración, comandos y aplicaciones prácticas para dominar la automatización de la infraestructura.
1. Introducción a Ansible
Ansible es un potente motor de automatización de TI que simplifica el aprovisionamiento de la nube, la gestión de la configuración, la entrega de aplicaciones, la orquestación dentro de los servicios y muchas otras necesidades de TI. Diseñado para implementaciones de varios niveles, Ansible modela su infraestructura de TI describiendo cómo se relacionan todos sus sistemas, en lugar de simplemente administrar un sistema a la vez.
2. Arquitectura ansible
Utilizando un modelo cliente-servidor, Ansible (el servidor o máquina de control) administra clientes (o nodos) a través de los protocolos SSH o WinRM. Contiene una colección de módulos que definen tareas a realizar en nodos. Después de recibir un comando, Ansible compila el módulo y lo envía a los nodos para su ejecución, luego de lo cual informan los resultados al servidor.
3. Características clave de Ansible
Ansible, una potente herramienta de automatización de TI, simplifica tareas complejas y mejora la productividad en entornos de TI. Estas son sus principales características:
- Arquitectura sin agentes: Ansible gestiona nodos sin instalar ningún agente en ellos, lo que reduce la sobrecarga y la complejidad. Utilice SSH para nodos Linux/Unix y WinRM para nodos Windows.
- Idempotencia: garantiza que incluso si un libro de jugadas se ejecuta varias veces en el mismo sistema, el resultado sigue siendo consistente, evitando efectos secundarios no deseados.
- Simplicidad y facilidad de uso: escritos en YAML, los manuales de Ansible son fáciles de escribir, leer y compartir, lo que hace que la automatización sea accesible para todos, incluidos aquellos nuevos en la automatización.
- Lenguaje declarativo: defina el estado deseado de sus sistemas en lugar de los pasos para llegar allí, simplificando las descripciones de las tareas y garantizando la coherencia.
- Biblioteca de módulos ampliada: viene con una amplia gama de módulos que admiten tareas relacionadas con la configuración del sistema, la instalación de software, el aprovisionamiento de la nube y más.
- Gestión de inventario: Ansible puede trabajar con varias máquinas según lo definido en su inventario, que puede generarse de forma estática o dinámica desde varias fuentes.
- Estructura basada en roles: permite la reutilización y el intercambio de contenido entre manuales, lo que facilita la gestión de implementaciones y configuraciones complejas.
- Integración y extensibilidad: se integra fácilmente con otras herramientas DevOps y se puede ampliar con módulos, complementos y API personalizados para necesidades específicas.
- Gestión de secretos: se integra con herramientas como Ansible Vault para proteger datos confidenciales como contraseñas o claves.
Estas capacidades hacen de Ansible una herramienta versátil para automatizar, configurar y gestionar sistemas de información, enfatizando la eficiencia y escalabilidad en las operaciones de TI.
4. Comience con Ansible
Antes de profundizar en los detalles técnicos, asegúrese de que Ansible esté instalado en su máquina de control (la máquina que administra sus nodos). Puede instalar Ansible en Linux, macOS o Windows (a través de WSL). El comando más simple en un sistema basado en Debian es:
sudo apt-get install ansible
O, para macOS:
brew install ansible
5. Archivo de configuración principal de Ansible
El comportamiento de Ansible está controlado por los ajustes de configuración, que se pueden ajustar a través del archivo de configuración de Ansible. La ruta predeterminada es /etc/ansible/ansible.cfg, pero puede especificar una ruta diferente configurando la variable de entorno ANSIBLE_CONFIG.
Un archivo ansible.cfg típico podría verse así:
[defaults]
inventory = /etc/ansible/hosts.ini
remote_user = root
host_key_checking = False
retry_files_enabled = False
6. Inventarios ansibles
Ansible Inventory define los hosts y los grupos de hosts en los que se ejecutarán los comandos, tareas y guías. Básicamente, el inventario es un archivo estructurado, generalmente en formato INI o YAML, que enumera todos los nodos o máquinas que desea que Ansible administre. Puede incluir variables que proporcionen contexto adicional u opciones de configuración para cada host o grupo.
Los inventarios pueden ser estáticos, definidos manualmente por el usuario, o dinámicos, generados mediante consultas a sistemas externos. Para entornos complejos, los inventarios también pueden organizar hosts en grupos y subgrupos, lo que permite estrategias de automatización más específicas.
Aquí hay un ejemplo en formato INI:
[webservers]
web1.example.com
web2.example.com
[dbservers]
db1.example.com
db2.example.com ansible_user=admin
En este ejemplo, servidor web y servidor db son grupos que contienen servidores diferentes, con una variable adicional (ansible_user) especificada para db2.example.com.
En los ejemplos anteriores, todos los hosts deben tener registros o entradas DNS actualizados en el archivo /etc/hosts. Ansible también le permite definir la dirección IP para todos los hosts como se muestra a continuación:
[webservers]
webserver1 ansible_host=192.168.1.10
webserver2 ansible_host=192.168.1.11
[dbservers]
dbserver1 ansible_host=192.168.1.20
dbserver2 ansible_host=192.168.1.21
Para agregar detalles de SSH a un inventario de Ansible, puede especificar variables como ansible_ssh_user, ansible_ssh_pass, ansible_ssh_private_key_file y ansible_ssh_port para cada host. Estas variables le indican a Ansible cómo conectarse a los hosts a través de SSH. Así es como puede agregar estos detalles a su archivo de inventario:
[webservers]
webserver1 ansible_host=192.168.1.10 ansible_ssh_user=user1 ansible_ssh_private_key_file=/path/to/key
webserver2 ansible_host=192.168.1.11 ansible_ssh_user=user2 ansible_ssh_pass=password
[dbservers]
dbserver1 ansible_host=192.168.1.20 ansible_ssh_user=dbuser ansible_ssh_private_key_file=/path/to/dbuser/key
dbserver2 ansible_host=192.168.1.21 ansible_ssh_user=dbuser ansible_ssh_pass=dbpassword ansible_ssh_port=2222
Recomendamos utilizar claves SSH para mayor seguridad que las contraseñas. Asegúrese de que la máquina de control de Ansible tenga los permisos correctos para acceder a los archivos clave especificados.
7. Módulos ansibles
Los módulos de Ansible son los componentes básicos de la automatización de Ansible y permiten la ejecución de tareas específicas en hosts remotos. Cada módulo tiene un propósito particular, desde la gestión de paquetes del sistema hasta la gestión de archivos.
Por ejemplo, el módulo de copia copia archivos desde la computadora local a hosts remotos:
Ejemplo:
- name: Copy file to target
copy:
src: /src/path/file.txt
dest: /dest/path/file.txt
El módulo yum gestiona paquetes con el administrador de paquetes YUM, comúnmente utilizado en sistemas basados en RHEL. Puede instalar, actualizar y eliminar paquetes. Por ejemplo, para garantizar que esté instalada la última versión de "httpd" (servidor web Apache):
- name: Ensure Apache is installed
yum:
name: httpd
state: latest
Para Ubuntu, que usa el administrador de paquetes APT, se usa el módulo apt. Funciona de manera similar al módulo yum pero está adaptado para sistemas basados en Debian. Para asegurarse de que Ubuntu tenga instalada la última versión de "nginx" (un servidor web de alto rendimiento), utilice:
- name: Ensure Nginx is installed
apt:
name: nginx
state: latest
update_cache: yes
8. Comandos ad hoc de Ansible
Los comandos ad hoc de Ansible le permiten realizar rápidamente tareas sencillas sin tener que escribir un manual. Son útiles para tareas que necesita realizar inmediatamente en sus nodos administrados. Por ejemplo, para comprobar el tiempo de actividad de todos los servidores de su grupo "servidores web", puede utilizar:
ansible webservers -a "uptime"
Este comando utiliza el módulo de comando predeterminado para ejecutar el comando de tiempo de actividad en todos los hosts del grupo "servidores web".
9. Manual de estrategias de Ansible
Los Playbooks de Ansible son el lenguaje principal de configuración, implementación y orquestación de Ansible. Le permiten definir y ejecutar una serie de actividades en uno o más nodos administrados en formato YAML. Los playbooks pueden realizar una variedad de operaciones, establecer variables, incluir otros playbooks o incluso manejar el manejo de errores.
A continuación se muestra un ejemplo práctico de un manual que garantiza que el servidor web Apache esté instalado y ejecutándose en un grupo de servidores web:
---
- name: Ensure Apache is installed and running
hosts: webservers
tasks:
- name: Install Apache
apt:
name: apache2
state: present
update_cache: yes
become: yes
- name: Start Apache
service:
name: apache2
state: started
enabled: yes
become: yes
Este manual se dirige a los hosts del grupo de servidores web, instala Apache usando el módulo apt (asumiendo sistemas Debian/Ubuntu) y garantiza que el servicio se inicie y se habilite para ejecutarse al inicio.
Para ejecutar el libro de jugadas:
ansible-playbook site.yml
10. Comandos básicos de Ansible
Los comandos de Ansible utilizados con frecuencia son:
posible
El comando ansible se utiliza para ejecutar tareas inmediatamente en los hosts de destino, sin la necesidad de un libro de jugadas. Es ideal para ejecutar comandos ad hoc para tareas rápidas. Por ejemplo, para verificar el espacio en disco en todos los servidores de su inventario, puede usar:
ansible all -m shell -a 'df -h'
libro de jugadas ansible
ansible-playbook ejecuta los playbooks de Ansible, que son scripts que definen un conjunto de tareas para ejecutar en los hosts de destino. Los manuales están escritos en YAML y ofrecen una forma poderosa de automatizar entornos complejos de aplicaciones de TI de varios niveles. Por ejemplo, para implementar una aplicación web:
ansible-playbook deploy_app.yml
galaxia-ansible
ansible-galaxy es una herramienta de línea de comandos para administrar roles de Ansible, lo que permite la reutilización de pasos de configuración comunes. Interactúa con el sitio web de Galaxy donde los usuarios pueden compartir roles. Para instalar un rol desde Galaxy, puedes usar:
ansible-galaxy install username.rolename
Conclusión
Ansible ofrece un marco poderoso para automatizar y administrar su infraestructura de TI con simplicidad y eficiencia. Al dominar sus archivos de configuración, comandos y aplicaciones prácticas, los profesionales de DevOps pueden mejorar significativamente sus operaciones, garantizando sistemas escalables, confiables y mantenibles. A medida que continúa explorando las capacidades de Ansible, recuerde que su comunidad y su ecosistema son recursos ricos para el aprendizaje y el crecimiento.