Introducción
Los sistemas de gestión de configuración están diseñados para agilizar el proceso de controlar grandes cantidades de servidores, para administradores y equipos de operaciones. Te permiten controlar muchos sistemas diferentes de manera automatizada desde una ubicación central.
Aunque existen muchas herramientas populares de gestión de configuración disponibles para sistemas Linux, como Chef y Puppet, estas a menudo son más complejas de lo que muchas personas desean o necesitan. Ansible es una excelente alternativa a estas opciones porque ofrece una arquitectura que no requiere la instalación de software especial en los nodos, utilizando SSH para ejecutar las tareas de automatización y archivos YAML para definir los detalles de aprovisionamiento.
En esta guía, discutiremos cómo instalar Ansible en un servidor Ubuntu 20.04 y repasaremos algunos conceptos básicos sobre cómo utilizar este software. Para obtener una descripción más general de Ansible como herramienta de gestión de configuración, consulta Una Introducción a la Gestión de Configuración con Ansible.
Prerrequisitos
Para seguir este tutorial, necesitarás:
-
Un nodo de control de Ansible: El nodo de control de Ansible es la máquina que utilizaremos para conectarnos y controlar los hosts de Ansible a través de SSH. Su nodo de control de Ansible puede ser su máquina local o un servidor dedicado para ejecutar Ansible, aunque esta guía asume que su nodo de control es un sistema Ubuntu 20.04. Asegúrese de que el nodo de control tenga:
- Un usuario no root con privilegios de sudo. Para configurar esto, puede seguir los Pasos 2 y 3 de nuestra Guía de configuración inicial del servidor para Ubuntu 20.04. Sin embargo, tenga en cuenta que si está utilizando un servidor remoto como su nodo de control de Ansible, debe seguir cada paso de esta guía. Hacerlo configurará un cortafuegos en el servidor con
ufw
y habilitará el acceso externo a su perfil de usuario no root, ambos aspectos que ayudarán a mantener seguro el servidor remoto. - Un par de claves SSH asociado con este usuario. Para configurar esto, puede seguir el Paso 1 de nuestra guía sobre Cómo configurar claves SSH en Ubuntu 20.04.
- Un usuario no root con privilegios de sudo. Para configurar esto, puede seguir los Pasos 2 y 3 de nuestra Guía de configuración inicial del servidor para Ubuntu 20.04. Sin embargo, tenga en cuenta que si está utilizando un servidor remoto como su nodo de control de Ansible, debe seguir cada paso de esta guía. Hacerlo configurará un cortafuegos en el servidor con
-
Uno o más Hosts de Ansible: Un host de Ansible es cualquier máquina que esté configurada para ser automatizada por tu nodo de control de Ansible. Esta guía asume que tus hosts de Ansible son servidores remotos Ubuntu 20.04. Asegúrate de que cada host de Ansible tenga:
- La clave pública SSH del nodo de control de Ansible añadida a
authorized_keys
de un usuario del sistema. Este usuario puede ser root o un usuario regular con privilegios sudo. Para configurarlo, puedes seguir Paso 2 de Cómo Configurar Claves SSH en Ubuntu 20.04.
- La clave pública SSH del nodo de control de Ansible añadida a
Paso 1 — Instalación de Ansible
Para comenzar a utilizar Ansible como medio para administrar la infraestructura de su servidor, debe instalar el software de Ansible en la máquina que actuará como el nodo de control de Ansible.
Desde su nodo de control, ejecute el siguiente comando para incluir el PPA (archivo de paquetes personal) oficial del proyecto en la lista de fuentes de su sistema:
- sudo apt-add-repository ppa:ansible/ansible
Pulse ENTER
cuando se le solicite para aceptar la adición del PPA.
A continuación, actualice el índice de paquetes de su sistema para que esté al tanto de los paquetes disponibles en el PPA recién incluido:
- sudo apt update
Después de esta actualización, puede instalar el software de Ansible con:
- sudo apt install ansible
Su nodo de control de Ansible ahora tiene todo el software necesario para administrar sus hosts. A continuación, veremos cómo agregar sus hosts al archivo de inventario del nodo de control para que pueda controlarlos.
Paso 2 — Configuración del Archivo de Inventario
El archivo de inventario contiene información sobre los hosts que administrarás con Ansible. Puedes incluir desde uno hasta varios cientos de servidores en tu archivo de inventario, y los hosts pueden organizarse en grupos y subgrupos. El archivo de inventario también se utiliza a menudo para establecer variables que serán válidas solo para hosts o grupos específicos, con el fin de utilizarlas en playbooks y plantillas. Algunas variables también pueden afectar la forma en que se ejecuta un playbook, como la variable ansible_python_interpreter
que veremos en un momento.
Para editar el contenido de tu inventario Ansible predeterminado, abre el archivo /etc/ansible/hosts
con el editor de texto que prefieras, en tu nodo de control de Ansible:
- sudo nano /etc/ansible/hosts
Nota: Aunque Ansible suele crear un archivo de inventario predeterminado en etc/ansible/hosts
, puedes crear archivos de inventario en cualquier ubicación que se adapte mejor a tus necesidades. En este caso, deberás proporcionar la ruta de tu archivo de inventario personalizado con el parámetro -i
al ejecutar comandos y playbooks de Ansible. Utilizar archivos de inventario por proyecto es una buena práctica para minimizar el riesgo de ejecutar un playbook en el grupo equivocado de servidores.
El archivo de inventario predeterminado proporcionado por la instalación de Ansible contiene varios ejemplos que puedes usar como referencia para configurar tu inventario. El siguiente ejemplo define un grupo llamado [servidores]
con tres servidores diferentes, cada uno identificado por un alias personalizado: server1, server2 y server3. Asegúrate de reemplazar las direcciones IP resaltadas con las direcciones IP de tus hosts de Ansible.
[servers]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113
[all:vars]
ansible_python_interpreter=/usr/bin/python3
El subgrupo all:vars
establece el parámetro del host ansible_python_interpreter
que será válido para todos los hosts incluidos en este inventario. Este parámetro asegura que el servidor remoto utilice el ejecutable de Python 3 /usr/bin/python3
en lugar de /usr/bin/python
(Python 2.7), que no está presente en las versiones recientes de Ubuntu.
Cuando hayas terminado, guarda y cierra el archivo presionando CTRL+X
, luego Y
y ENTER
para confirmar los cambios.
Cuando desees verificar tu inventario, puedes ejecutar:
- ansible-inventory --list -y
Verás una salida similar a esta, pero que contiene tu propia infraestructura de servidor según se define en tu archivo de inventario:
Outputall:
children:
servers:
hosts:
server1:
ansible_host: 203.0.113.111
ansible_python_interpreter: /usr/bin/python3
server2:
ansible_host: 203.0.113.112
ansible_python_interpreter: /usr/bin/python3
server3:
ansible_host: 203.0.113.113
ansible_python_interpreter: /usr/bin/python3
ungrouped: {}
Ahora que has configurado tu archivo de inventario, tienes todo lo necesario para probar la conexión con tus hosts de Ansible.
Paso 3 — Prueba de Conexión
Después de configurar el archivo de inventario para incluir tus servidores, es hora de comprobar si Ansible puede conectarse a estos servidores y ejecutar comandos a través de SSH.
Para esta guía, estaremos utilizando la cuenta de Ubuntu root porque esa es típicamente la única cuenta disponible de forma predeterminada en servidores recién creados. Si tus hosts de Ansible ya tienen un usuario sudo regular creado, se recomienda usar esa cuenta en su lugar.
Puede utilizar el argumento -u
para especificar el usuario del sistema remoto. Cuando no se proporciona, Ansible intentará conectarse como su usuario actual del sistema en el nodo de control.
Desde su máquina local o nodo de control de Ansible, ejecute:
- ansible all -m ping -u root
Este comando utilizará el módulo ping
integrado de Ansible para ejecutar una prueba de conectividad en todos los nodos de su inventario predeterminado, conectándose como root. El módulo ping
probará:
- si los hosts son accesibles;
- si tiene credenciales SSH válidas;
- si los hosts pueden ejecutar módulos de Ansible usando Python.
Debería obtener una salida similar a esta:
Outputserver1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Si es la primera vez que se conecta a estos servidores a través de SSH, se le pedirá que confirme la autenticidad de los hosts a los que se está conectando a través de Ansible. Cuando se le solicite, escriba yes
y luego presione ENTER
para confirmar.
Una vez que reciba una respuesta de "pong"
desde un host, significa que está listo para ejecutar comandos y libros de jugadas de Ansible en ese servidor.
Nota: Si no puede obtener una respuesta exitosa de sus servidores, consulte nuestra Guía de Referencia Rápida de Ansible para obtener más información sobre cómo ejecutar comandos de Ansible con diferentes opciones de conexión.
Paso 4 — Ejecutar Comandos Ad-Hoc (Opcional)
Después de confirmar que su nodo de control de Ansible puede comunicarse con sus hosts, puede comenzar a ejecutar comandos ad-hoc y playbooks en sus servidores.
Cualquier comando que normalmente ejecutaría en un servidor remoto a través de SSH se puede ejecutar con Ansible en los servidores especificados en su archivo de inventario. Como ejemplo, puede verificar el uso del disco en todos los servidores con:
- ansible all -a "df -h" -u root
Output
server1 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 798M 624K 798M 1% /run
/dev/vda1 155G 2.3G 153G 2% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 798M 0 798M 0% /run/user/0
server2 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 2.0G 0 2.0G 0% /dev
tmpfs 395M 608K 394M 1% /run
/dev/vda1 78G 2.2G 76G 3% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 395M 0 395M 0% /run/user/0
...
El comando resaltado df -h
se puede reemplazar por cualquier comando que desee.
También puede ejecutar módulos de Ansible a través de comandos ad-hoc, de manera similar a lo que hemos hecho antes con el módulo ping
para probar la conexión. Por ejemplo, así es como podemos usar el módulo apt
para instalar la última versión de vim
en todos los servidores de su inventario:
- ansible all -m apt -a "name=vim state=latest" -u root
También puede dirigirse a hosts individuales, así como a grupos y subgrupos, al ejecutar comandos de Ansible. Por ejemplo, así es como verificaría el uptime
de cada host en el grupo servers
:
- ansible servers -a "uptime" -u root
Podemos especificar múltiples hosts separándolos con dos puntos:
- ansible server1:server2 -m ping -u root
Para obtener más información sobre cómo usar Ansible, incluido cómo ejecutar libros de jugadas para automatizar la configuración del servidor, puedes consultar nuestra Guía de Referencia de Ansible.
Conclusión
En esta guía, has instalado Ansible y configurado un archivo de inventario para ejecutar comandos ad-hoc desde un Nodo de Control de Ansible.
Una vez que hayas confirmado que puedes conectar y controlar tu infraestructura desde una máquina controladora central de Ansible, puedes ejecutar cualquier comando o libro de jugadas que desees en esos hosts.
Para obtener más información sobre cómo usar Ansible, consulta nuestra Guía de Referencia Rápida de Ansible.