One place for hosting & domains

      Cómo instalar y configurar Ansible en Ubuntu 18.04


      Introducción

      Los sistemas de gestión de la configuración están diseñados para hacer que el control de un gran número de servidores sea fácil para los administradores y los equipos de operaciones. Le permiten controlar muchos sistemas diferentes de forma automatizada desde una ubicación central.

      Aunque existen muchos sistemas populares de gestión de la configuración disponibles para los sistemas Linux, como Chef y Puppet, estos suelen ser más complejos de lo que muchas personas desean o necesitan. Ansible es una gran alternativa a estas opciones, porque requiere un gasto inicial mucho menor.

      En esta guía, explicaremos cómo instalar Ansible en un servidor Ubuntu 18.04 y repasaremos algunos puntos básicos sobre cómo utilizar el software.

      ¿Cómo funciona Ansible?

      Ansible funciona configurando máquinas cliente desde un equipo que tiene los componentes de Ansible instalados y configurados.

      Se comunica por medio de canales SSH habituales para recuperar información de las máquinas remotas, 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 seguir este tutorial, necesitará lo siguiente:

      • Dos o más servidores Ubuntu 18.04. Uno de ellos se utilizará como su servidor de Ansible y el otro, como su host de Ansible. Cada uno deberá tener un usuario no root con privilegios sudo y un firewall básico configurado. Puede establecerlos siguiendo nuestra Guía inicial de configuración del servidor para Ubuntu 18.04. Tenga en cuenta que los ejemplos de esta guía especifican tres hosts de Ansible, pero los comandos y las configuraciones que se indican pueden ajustarse para cualquier número de clientes.

      • Claves SSH generadas para el usuario no root en su servidor de Ansible. Para hacerlo, siga el Paso 1 de nuestra guía sobre Cómo configurar claves SSH en Ubuntu 18.04. Para los fines de este tutorial, puede guardar el par de claves en la ubicación predeterminada (~/.ssh/id_rsa), y no necesita una contraseña para protegerlas.

      Paso 1: instalación de Ansible

      Para comenzar a usar Ansible como medio para administrar sus diferentes servidores, deberá instalar el software de Ansible en, al menos, una máquina.

      Para obtener la versión más reciente de Ansible para Ubuntu puede añadir el PPA (archivo personal de paquete) del proyecto a su sistema. Antes de hacerlo, sin embargo, primero, debería asegurarse de tener el paquete software-properties-common instalado. Este software facilitará la gestión de este y otros repositorios de software independientes:

      • sudo apt update
      • sudo apt install software-properties-common

      Luego, añada el PPA de Ansible escribiendo el siguiente comando:

      • sudo apt-add-repository ppa:ansible/ansible

      Pulse ENTERpara aceptar la adición del PPA.

      A continuación, vuelva a actualizar el índice de paquetes del sistema para que tenga conocimiento de los paquetes disponibles en el PPA:

      Tras esta actualización, podrá instalar el software Ansible:

      Su servidor de Ansible, ahora, tiene todo el software necesario para administrar sus hosts.

      Paso 2: configuración del acceso de SSH a los hosts de Ansible

      Como se mencionó anteriormente, Ansible se comunica, principalmente, con equipos cliente a través de SSH. Aunque, ciertamente, tiene la capacidad de gestionar autenticación SSH basada en contraseña, usar claves SSH puede ayudar a hacer que todo sea más sencillo.

      En su servidor de Ansible, utilice el comando cat para imprimir los contenidos del archivo de clave pública SSH de su usuario no root en la salida de la terminal:

      Copie el resultado en su portapapeles, luego, abra una nueva terminal y establezca la conexión con uno de sus hosts de Ansible usando SSH:

      • ssh sammy@ansible_host_ip

      Cambie al usuario root de la máquina cliente:

      Como usuario root, abra authorized_keys en el directorio ~/.ssh:

      • nano ~/.ssh/authorized_keys

      En el archivo, pegue su servidor de Ansible usando la clave SSH del usuario, luego, guarde el archivo y cierre el editor (pulse CTRL + X, Y y, luego, ENTER). A continuación, ejecute el comando exit para volver a usar el usuario no root del host:

      Por último, debido a que Ansible utiliza un intérprete de python ubicado en /usr/bin/python para ejecutar sus módulos, deberá instalar Python 2 en el host para que Ansible se pueda comunicar con él. Ejecute los siguientes comandos para actualizar el índice de paquete del host e instalar el paquete python:

      • sudo apt update
      • sudo apt install python

      Tras esto, puede volver a ejecutar el comando exit para cerrar la conexión con el cliente:

      Repita este proceso para cada servidor que desee controlar con su servidor de Ansible. A continuación, configuraremos el servidor de Ansible para conectar con estos hosts usando el archivo hostsde Ansible.

      Paso 3: configuración de hosts de Ansible

      Ansible mantiene un seguimiento de todos los servidores que conoce a través de un archivo de hosts. Deberá configurar este archivo para poder comenzar a comunicarse con los otros equipos.

      Abra el archivo con privilegios sudo, de la siguiente manera:

      • sudo nano /etc/ansible/hosts

      Dentro del archivo, verá varias configuraciones de ejemplo comentadas (con un #antes de cada línea). En realidad, estos ejemplos no nos funcionarán, ya que los hosts enumerados en cada una de ellas son inventados. Sin embargo, los conservaremos en el archivo para ayudarnos con la configuración si deseamos implementar escenarios más complejos en el futuro.

      El archivo de hosts es bastante flexible y puede configurarse de varias formas diferentes. La sintaxis que vamos a usar, sin embargo, tiene el siguiente aspecto:

      [group_name]
      alias ansible_host=your_server_ip
      

      Nota: con el lanzamiento de Ansible versión 2.0, la variable de configuración ansible_hostsustituyó a la variable original, ansible_ssh_host. Si está usando una versión anterior de Ansible, deberá usar la variable más antigua de mayor longitud.

      En este ejemplo, group_namees una etiqueta de organización que le permite dirigirse a cualquiera de los servidores enumerados en ella con una palabra, mientras que aliases solo un nombre para referirse a un servidor específico.

      Por lo tanto, en nuestro escenario, estamos imaginando que tenemos tres servidores que vamos a controlar con Ansible. En este momento, es posible acceder a estos servidores desde el servidor de Ansible escribiendo lo siguiente:

      No se le debería pedir una contraseña si configuró esto correctamente. Con fines demostrativos, asumiremos que las direcciones IP de nuestros hosts son 203.0.113.1, 203.0.113.2, y 203.0.113.3. Configuraremos esto para que podamos referirnos a ellas individualmente como host1, host2, y host3, o como un grupo con el nombre servers.

      Este es el bloque que deberíamos añadir a nuestro archivo de hosts para obtener lo siguiente:

      /etc/ansible/hosts

      [servers]
      host1 ansible_host=203.0.113.1
      host2 ansible_host=203.0.113.2
      host3 ansible_host=203.0.113.3
      

      Los hosts pueden estar en múltiples grupos, y los grupos pueden configurar parámetros para todos sus miembros. Vamos a probar esto ahora.

      Con nuestra configuración actual, si intentásemos conectar con cualquiera de estos hosts con Ansible, el comando fallaría (asumiendo que no está operando como usuario root). Esto se debe a que su clave SSH está integrada para el usuario root en los sistemas remotos y Ansible, por defecto, intentará conectar como su usuario actual. Un intento de conexión provocará este error:

      Output

      host1 | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh.", "unreachable": true }

      En el servidor de Ansible, estamos usando un usuario llamado sammy. Ansible intentará conectarse a cada host con ssh sammy@server. Esto no funcionará si el usuario sammy no se encuentra también en el sistema remoto.

      Podemos crear un archivo que le indique a todos los servidores del grupo “servers” que se conecten como usuario root.

      Para hacerlo, crearemos un directorio en la estructura de configuración de Ansible llamado group_vars. En esta carpeta, podemos crear archivos con formato YAML para cada grupo que queramos configurar:

      • sudo mkdir /etc/ansible/group_vars
      • sudo nano /etc/ansible/group_vars/servers

      Los archivos YAML comienzan con “—”, por lo tanto, asegúrese de no olvidar esa parte.

      /etc/ansible/group_vars/servers

      ---
      ansible_user: root
      

      Nota: de forma similar a la variable ansible_host, ansible_userreemplazó a la variable ansible_ssh_useren la versión 2.0. Si está usando una versión de Ansible anterior a 2.0, asegúrese de usar la variable más antigua de mayor longitud.

      Guarde y cierre este archivo cuando haya terminado.

      Si desea especificar los detalles de la configuración para cada servidor, independientemente de la asociación de grupo, puede incluir estos detalles en un archivo en /etc/ansible/group_vars/all. Los hosts individuales pueden configurarse creando archivos que lleven el nombre de sus alias en un directorio en /etc/ansible/host_vars.

      Paso 4: uso de comandos de Ansible sencillos

      Ahora que tenemos nuestros hosts configurados y contamos con suficientes detalles de configuración para poder conectar correctamente con nuestros hosts, podemos probar nuestro primer comando.

      Haga ping a todos los servidores que configuró escribiendo lo siguiente:

      Ping output

      host1 | SUCCESS => {
          "changed": false,
          "ping": "pong"
      }
      
      host3 | SUCCESS => {
          "changed": false,
          "ping": "pong"
      }
      
      host2 | SUCCESS => {
          "changed": false,
          "ping": "pong"
      }
      

      Esta es una prueba básica para garantizar que Ansible pueda conectarse con todos sus hosts.

      Aquí, all significa todos los hosts. Podríamos especificar un grupo con la misma facilidad:

      También podríamos especificar un host individual:

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

      • ansible -m ping host1:host2

      La parte de -m ping del comando es una instrucción que le indica a Ansible que utilice el módulo “ping”. Estos son, básicamente, comandos que puede ejecutar en sus hosts remotos. El módulo ping funciona, en muchos aspectos, como una herramienta de pingnormal en Linux, pero, en su lugar, comprueba la conectividad de Ansible.

      El módulo ping, en realidad, no toma ningún argumento, pero podemos probar otro comando para ver cómo funciona. Pasamos los argumentos a una secuencia de comandos escribiendo -a.

      El módulo “shell” nos permite enviar un comando de terminal al host remoto y obtener los resultados. Por ejemplo, para conocer el uso de memoria de nuestra máquina host1, podríamos usar lo siguiente:

      • ansible -m shell -a 'free -m' host1

      Shell output

      host1 | SUCCESS | rc=0 >>
                   total       used       free     shared    buffers     cached
      Mem:          3954        227       3726          0         14         93
      -/+ buffers/cache:        119       3834
      Swap:            0          0          0
      

      Con esto, su servidor de Ansible queda configurado, y podrá comunicarse con sus hosts y controlarlos correctamente.

      Conclusión

      En este tutorial, hemos configurado Ansible y verificado que puede comunicarse con cada host. También hemos usado el comando ansiblepara ejecutar tareas sencillas de forma remota.

      Aunque esto es útil, no hemos cubierto la función más potente de Ansible en este artículo: Playbooks. Los playbooks de Ansible son una forma sencilla y potente de administrar configuraciones de servidores e implementaciones con múltiples máquinas. Para ver una introducción a Playbooks, consulte esta guía. Además, lo animamos a consultar la documentación oficial de Ansible para obtener más información sobre la herramienta.



      Source link