Tutorial

Cómo instalar y utilizar Ansible en Ubuntu 20.04

UbuntuConfiguration ManagementAnsibleUbuntu 20.04

Introducción

Los sistemas de administración de configuraciones están diseñados para simplificar el proceso de control de un gran número de servidores, para los administradores y los equipos de operaciones. Le permiten controlar muchos sistemas diferentes de forma automatizada desde una ubicación central.

Aunque hay disponibles muchas herramientas de administración de configuración populares para los sistemas Linux, como Chef y Puppet, estas son a menudo más complejas cuando se contrastan con lo que muchas personas buscan o necesitan. Ansible es una excelente alternativa a estas opciones porque ofrece una arquitectura que no requiere la instalación de software especial en nodos, al utilizar SSH para ejecutar las tareas de automatización y archivos YAML para definir detalles de aprovisionamiento.

En esta guía, abordaremos la instalación de Ansible en un servidor Ubuntu 20.04 y repasaremos algunos conceptos básicos relacionados con el uso de este software. Para obtener una descripción general más detallada de Ansible como herramienta de administración de configuración, consulte Introducción a la administración de configuración con Ansible.

Requisitos previos

Para este tutorial, necesitará lo siguiente:

  • Un nodo de control de Ansible: es la máquina que usaremos para conectarnos a los hosts de Ansible y controlarlos a través de SSH. Si bien su nodo de control de Ansible puede ser su máquina local o un servidor dedicado a ejecutar Ansible, en esta guía, se asume que su nodo de control es un sistema basado en Ubuntu 20.04. Asegúrese de que el nodo de control contenga lo siguiente:

    • Un usuario no root con privilegios sudo. Para configurarlo, puede seguir los pasos 2 y 3 de nuestra Guía de configuración inicial de servidores para Ubuntu 20.04. Sin embargo, tenga en cuenta que si utiliza un servidor remoto como nodo de control de Ansible, deberá seguir cada paso de esta guía. Si se hace esto, se configurará un firewall en el servidor con ufw y se habilitará el acceso externo a su perfil de usuario no root. Estas dos acciones ayudarán a mantener protegido el servidor remoto.
    • Un par de claves de SSH asociadas con este usuario. Para configurarlas, siga el paso 1 de nuestra guía Cómo configurar claves SSH en Ubuntu 20.04.
  • Uno o más hosts de Ansible: un host de Ansible es cualquier máquina en la que su nodo de control de Ansible esté configurado para la automatización. En esta guía, se supone que sus hosts de Ansible son servidores remotos de Ubuntu 20.04. Asegúrese de que cada host de Ansible tenga lo siguiente:

    • La clave pública SSH del nodo de control de Ansible agregada a authorized_keys de un usuario del sistema. Este usuario puede ser root o un usuario normal con privilegios sudo. Para configurarlo, siga el paso 2 de Cómo configurar claves SSH en Ubuntu 20.04.

Paso 1: instalación de Ansible

Para comenzar a utilizar Ansible como medio para administrar la infraestructura de su servidor, deberá instalar el software Ansible en la máquina que funcionará como nodo de control de Ansible. Usaremos los repositorios predeterminados de Ubuntu para hacerlo.

Primero, actualice el índice de paquetes de su sistema con lo siguiente:

  • sudo apt update

Después de esta actualización, podrá instalar el software Ansible con lo siguiente:

  • sudo apt install ansible

Presione Y cuando se le solicite para confirmar la instalación.

Su nodo de control de Ansible ahora contará con todo el software necesario para administrar sus hosts. A continuación, repasaremos cómo configurar un archivo de inventario para que Ansible pueda comunicarse con los nodos administrados.

Paso 2: Configurar el archivo de inventario

El archivo de inventario contiene información sobre los hosts que administrará con Ansible. Puede incluir de uno a varios cientos de servidores en su archivo de inventario y los hosts pueden organizarse en grupos y subgrupos. El archivo de inventario a menudo se utiliza también para configurar variables que serán válidas sólo para hosts o grupos específicos, a fin de usarse dentro de los playbooks y las plantillas. Algunas variables también pueden afectar la forma en que se ejecuta un playbook, como la variable ansible_python_interpreter que veremos a continuación.

Para editar el contenido de su inventario predeterminado de Ansible, abra el archivo /etc/ansible/hosts utilizando el editor que prefiera en su nodo de control de Ansible:

  • sudo nano /etc/ansible/hosts

Nota: Si bien, en general, Ansible crea un archivo de inventario predeterminado en etc/ansible/hosts, puede crear archivos de inventario en cualquier ubicación que le resulte conveniente. En este caso, deberá proporcionar la ruta al archivo de inventario personalizado con el parámetro -i al ejecutar comandos y playbooks de Ansible. El uso de archivos de inventario por proyecto es una práctica recomendable para minimizar el riesgo de ejecutar un playbook en un grupo de servidores incorrecto.

El archivo de inventario predeterminado proporcionado por la instalación de Ansible contiene varios ejemplos que puede utilizar como referencias para configurar su inventario. En el siguiente ejemplo se define un grupo llamado [servers] con tres servidores diferentes, cada uno identificado por un alias personalizado: server1, server2 y server3. Asegúrese de reemplazar las IP resaltadas por las direcciones IP de sus hosts de Ansible.

/etc/ansible/hosts
[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 de host ansible_python_interpreter, que será válido para todos los hosts de este inventario. Este parámetro garantiza que el servidor remoto utilice el ejecutable /usr/bin/python3 Python 3 en lugar de /usr/bin/python (Python 2.7), que no está presente en versiones recientes de Ubuntu.

Al finalizar, guarde y cierre el archivo presionando CTRL+X y, luego, Y y ENTER para confirmar los cambios.

Cuando desee consultar su inventario, podrá ejecutar lo siguiente:

  • ansible-inventory --list -y

Verá un resultado similar a éste, pero con su propia infraestructura de servidor, tal como se definió en su archivo de inventario:

Output
all: 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 configuró su archivo de inventario, tiene todo lo que necesita para probar la conexión con sus hosts de Ansible.

Paso 3: Probar la conexión

Después de configurar el archivo de inventario para incluir sus servidores, será el momento de verificar si Ansible es capaz de conectarse a estos y ejecutar comandos a través de SSH.

En esta guía, usaremos la cuenta root de Ubuntu, dado que suele ser la única cuenta disponible por defecto en los servidores recién creados. Si ya se creó un usuario normal de sudo para sus hosts de Ansible, se le recomienda usar esa cuenta como alternativa.

Puede usar el argumento -u para especificar el usuario de sistema remoto. Cuando no se proporcione, Ansible intentará conectarse como su usuario de sistema actual en el nodo de control.

Desde su máquina local o nodo de control de Ansible, ejecute lo siguiente:

  • 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 y se conectará como root. El módulo ping probará lo siguiente:

  • si es posible acceder a los hosts;
  • si tiene credenciales SSH válidas;
  • si los hosts pueden ejecutar módulos de Ansible utilizando Python.

El resultado deberá ser similar a este:

Output
server1 | 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 solicitará confirmar la autenticidad de los hosts a los que se conecte a través de Ansible. Cuando se le solicite, escriba yes y luego presione ENTER para confirmar.

Una vez que reciba una respuesta “pong” de un host, estará listo para ejecutar comandos y playbooks de Ansible en el servidor en cuestión.

Nota: Si no obtiene una respuesta positiva de su servidor, consulte nuestra guía de referencia de Ansible para obtener mayor información acerca de 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 y playbooks ad hoc en sus servidores.

Cualquier comando que ejecute normalmente en un servidor remoto a través de SSH puede ejecutarse con Ansible en los servidores especificados en su archivo de inventario. Como ejemplo, puede verificar la utilización del disco en todos los servidores con lo siguiente:

  • 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 puede sustituirse por cualquier comando que desee.

También puede ejecutar módulos de Ansible a través de comandos ad hoc, proceso similar al que realizamos antes con el módulo ping para probar la conexión. Por ejemplo, explicaremos la forma en que podemos utilizar el módulo apt para instalar la última versión de vim en todos los servidores en su inventario:

  • ansible all -m apt -a "name=vim state=latest" -u root

También puede orientarse a hosts individuales, así como a grupos y subgrupos, al ejecutar los comandos de Ansible. Por ejemplo, se compueba uptime de cada host en el grupo servers de la siguiente manera:

  • ansible servers -a "uptime" -u root

Podemos especificar múltiples hosts separándolos con comas:

  • ansible server1:server2 -m ping -u root

Para obtener más información sobre cómo utilizar Ansible, incluida la forma de ejecutar playbooks para automatizar la configuración de servidores, puede consultar nuestra guía de referencia de Ansible.

Conclusión

A través de esta guía, instaló Ansible y configuró un archivo de inventario para ejecutar comandos ad hoc desde un nodo de control de Ansible.

Una vez que confirme que pueda conectarse y controlar su infraestructura desde una máquina de control central con Ansible, podrá ejecutar cualquier comando o playbook que desee en esos hosts.

Para obtener más información acerca de cómo utilizar Ansible, consulte nuestra guía de referencia de Ansible.

0 Comments

Creative Commons License