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 gran alternativa a estas opciones porque ofrece una arquitectura sencilla 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 de Ubuntu 18.04 y repasaremos algunos puntos básicos relacionados con el uso del software.

¿Cómo funciona Ansible?

Ansible funciona configurando máquinas clientes, llamadas hosts de Ansible, desde una computadora que tiene instalados y configurados los componentes de Ansible, lo cual se conoce como nodo de control de Ansible.

Se comunica por medio de canales SSH habituales para obtener información de sistemas remotos, emitir comandos y copiar archivos. Gracias a esto, los sistemas Ansible no requieren la instalación de ningún software adicional en los equipos cliente.

Esta es una de las formas en las que Ansible simplifica la administración de los servidores. Cualquier servidor que tenga un puerto SSH expuesto puede llevarse al marco de configuración de Ansible, independientemente de la etapa de su ciclo de vida en la que se encuentre. Esto significa que cualquier equipo que pueda administrar mediante SSH, también podrá administrarlo a través de Ansible.

Ansible adopta un enfoque modular, lo que facilita su ampliación para usar las funcionalidades del sistema principal para abordar escenarios específicos. Los módulos pueden escribirse en cualquier lenguaje y comunicarse en JSON estándar.

Los archivos de configuración están redactados, principalmente, en formato de serialización de datos YAML, debido a su naturaleza expresiva y su similitud con los lenguajes de marcado populares. Ansible puede interactuar con hosts a través de herramientas de línea de comandos o de sus secuencias de comandos de configuración, que se conocen como Playbooks.

Requisitos previos

Para completar este tutorial, necesitará lo siguiente:

  • Nodo de control de Ansible: un nodo de control de Ansible es la máquina que usaremos para conectarnos y controlar los hosts de Ansible en SSH. Su nodo de control de Ansible puede ser su máquina local o un servidor dedicado a ejecutar Ansible, aunque en esta guía se supone que su nodo de control es un sistema Ubuntu 18.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 para servidores de Ubuntu 18.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 configurarlo, siga el paso 1 de nuestra guía Cómo configurar claves SSH en Ubuntu 18.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 18.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 18.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.

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 del sistema para que tenga conocimiento de los paquetes disponibles en el PPA que acaba de incluir:

  • sudo apt update

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

  • sudo apt install ansible

Su nodo de control de Ansible ahora contará con todo el software necesario para administrar sus hosts. A continuación, veremos la forma de agregar sus hosts al archivo de inventario del nodo de control para que éste pueda controlarlos.

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 su editor de línea de comandos preferido en su máquina local o en un nodo de control de Ansible:

  • sudo nano /etc/ansible/hosts

Nota: en algunas instalaciones de Ansible no se creará un archivo de inventario predeterminado. Si el archivo no existe en su sistema, puede crear uno nuevo en /etc/ansible/hosts o proporcionar una ruta de inventario personalizada utilizando el parámetro -i al ejecutar comandos y playbooks.

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

[servers:vars]
ansible_python_interpreter=/usr/bin/python3

El subgrupo server:vars establece el parámetro host ansible_python_interpreter que será válido para todos los hosts incluidos en el grupo servers. 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.

Cuando termine, guarde y cierre el archivo presionando CTRL+X, luego Y para confirmar los cambios y finalmente ENTER.

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, ya que normalmente es la única cuenta disponible por defecto en 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 servidores nuevos, el playbook de la comunidad para la Configuración inicial del servidor es un buen punto de partida. También puede aprender a escribir sus propios playbooks a través de nuestra guía Conceptos básicos sobre administración de configuración: escribir playbooks de Ansible.

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