Primeros pasos con Ansible
¿Qué es Ansible?
Ansible es una herramienta de automatización al igual que Chef o Puppet, nos permite generar recetas también llamados playbook de (instalación, actualización o configuración) para ser aplicados a un conjunto de servidores.
Antes si queríamos desplegar un stack con LEMP (Linux, Nginx, MariaDB, Php) en nuestros servidores de forma automática, podíamos generar una serie de script en bash para realizar esta tarea e ir replicando la ejecución de ese mismo script en el resto de servidores.
Ahora con Ansible únicamente en nuestro servidor maestro definimos en formato YML.
Instalación y configuración
Para esta primera prueba dispongo de 4 máquinas virtuales montadas sobre KVM en mi portátil.
- Maquina maestra:
- Hostname: Cerebellum
- Os: Debian 10
- Ip: 192.168.1.30
- Cliente-01:
- Hostname: Millenium-Nodo01
- Os: Ubuntu 20.04 LTS
- Ip: 192.168.1.31
- Cliente-02:
- Hostname: Millenium-Nodo02
- Os: Ubuntu 20.04 LTS
- Ip 192.168.1.32
- Cliente-03:
- Hostname: Millenium-Nodo03
- Os: Ubuntu 20.04 LTS
- Ip 192.168.1.33
Preparando los servidores
Seleccionamos cual va a ser nuestra máquina maestra desde dónde controlar los diferentes despliegues al resto de servidores.
Actualizar todos los paquetes de nuestros servidores.
apt update && apt -y upgradeInstalar Ansible en todos nuestros servidores, tanto en el servidor maestro como en los clientes.
- En el siguiente enlace encontraras los comandos necesarios para tu distribución.
Creación de llaves ssh
Una vez que hemos instalado Ansible en la máquina maestra (Cerebellum).
Vamos a crear un par de llaves ssh en Cerebellum.
ssh-keygenCopiamos la llave ssh pública de Cerebellum en el resto de servidores. Esto nos permitirá conectarnos a los clientes de manera desatendida y realizar las tareas que sean necesarias.
ssh-copy-id -i /home/user/.ssh/id_rsa user@192.168.1.31ssh-copy-id -i /home/user/.ssh/id_rsa user@192.168.1.32ssh-copy-id -i /home/user/.ssh/id_rsa user@192.168.1.33
Configuración del archivo hosts
Generaremos nuestro archivo hosts en Cerebellum.
Ansible crea por defecto un archivo host de ejemplo en la ruta /etc/ansible/hosts.
Primera opción - Poner directamente en nuestro archivo hosts las ip, dominios o subdominios de las máquinas cliente.
nodo01.millenium.com nodo02.millenium.com 92.168.1.33``
Segunda opción - Agrupar las máquinas clientes, de tal forma que unos cambios se aplican sobre unos grupos de servidores y no sobre otros.
[Frontend] nodo01.millenium.com nodo02.millenium.com [Backend] 192.168.1.33``
Probando la configuración
Mediante comandos ad-hoc podemos realizar diferentes acciones sobre nuestros servidores clientes, gracias a la amplia variedad de módulos que nos proporciona Ansible.
En este enlace podrás encontrar el listado completo de módulos.
Hacemos un ping a todos nuestros servidores para comprobar la conexión.
ansible -m ping allSi tenemos un grupo de servidores llamados frontend, podríamos probar la conectividad solo con ese grupo en concreto.
ansible -m ping frontendSi queremos que Nginx este instalado en todos nuestros servidores.
En el apartado state se pueden usar estos valores (restarted|present|reloaded|absent)
ansible -m apt -a "name=nginx state=present" allVamos a ver el espacio de disco que tienen cada uno de nuestros servidores.
ansible -a "df -h" allSi queremos reiniciar el servidor nginx de todos los clientes
ansible -a "service nginx restart" all