Introducción
Los sistemas de gestión de la configuración están diseñados para simplificar el proceso de control de grandes cantidades de servidores para administradores y equipos de operaciones. Le permiten controlar muchos sistemas diferentes de forma automatizada desde una ubicación central.
Hay muchas herramientas populares de administración de configuración disponibles para sistemas Linux, como Chef y Puppet, que a menudo son más complejas de lo que muchas personas desean o necesitan. Ansible es una gran alternativa a estas opciones porque ofrece una arquitectura que no requiere la instalación de software especial en los nodos, utilizando SSH para ejecutar tareas de automatización y archivos YAML para definir detalles de aprovisionamiento.
En esta guía, discutiremos cómo instalar Ansible en un servidor Ubuntu 20.04 LTS Focal Fossa.
Prerrequisitos
Para seguir este tutorial, necesitará:
Un nodo de control de Ansible: el nodo de control de Ansible es la máquina que usaremos para conectar y controlar los hosts de Ansible a través de SSH. Su nodo de control de Ansible puede ser su computadora local o un servidor dedicado a ejecutar Ansible, aunque esta guía asume que su nodo de control es un sistema Ubuntu 20.04 LTS. Asegúrese de que el nodo de control tenga:
- Un usuario no root con privilegios sudo.
- Un par de claves SSH asociado con este usuario.
Uno o más hosts Ansible: un host Ansible es cualquier máquina configurada para la automatización del nodo de control Ansible. Esta guía asume que sus hosts Ansible son servidores remotos Ubuntu 20.04 LTS. Asegúrese de que cada host de Ansible tenga:
- Un par de claves SSH asociado con este usuario.
- Este usuario puede ser root o un usuario normal con privilegios de sudo.
Instalar Ansible
Para comenzar a usar Ansible como un medio de administrar la infraestructura de su servidor, debe instalar el software Ansible en la máquina que actuará como el nodo de control de Ansible. Para esto usaremos los repositorios predeterminados de Ubuntu.
Primero, actualice el índice de paquetes de su sistema con:
sudo apt update
Después de esta actualización, puede instalar el software Ansible con:
sudo apt install ansible
Presione Y
cuando se le solicite para confirmar la instalación.
Su nodo de control Ansible ahora tiene todo el software que necesita para administrar sus hosts. A continuación, veremos cómo configurar un archivo de inventario para que Ansible pueda comunicarse con sus nodos administrados.
Configurar el archivo de inventario
El archivo de inventario contiene información sobre los hosts que administrará con Ansible. Se pueden incluir desde uno a varios cientos de servidores en el archivo de inventario, y los hosts se pueden organizar en grupos y subgrupos. El archivo de inventario también se usa a menudo para establecer variables que solo serán válidas para hosts o grupos específicos, a fin de que se usen dentro de los libros de jugadas y modelos. Algunas variables también pueden afectar la forma en que se ejecuta un libro de jugadas, como la ansible_python_interpreter
que veremos en un momento.
Para cambiar el contenido de su inventario Ansible predeterminado, abra el /etc/ansible/hosts
usando su editor de texto preferido, en el nodo de control Ansible:
sudo nano /etc/ansible/hosts
Notaetc/ansible/hosts-i
El archivo de inventario predeterminado proporcionado por la instalación de Ansible contiene una serie de ejemplos que puede utilizar como referencias para configurar su inventario. El siguiente ejemplo define un grupo llamado [servers]
con tres servidores diferentes, cada uno identificado por un alias personalizado: servidor1, servidor2 y servidor3. Asegúrese de reemplazar las IP resaltadas con las direcciones IP de sus hosts Ansible.
El all:vars
establece el ansible_python_interpreter
que será válido para todos los hosts incluidos en este inventario. Este parámetro asegura que el servidor remoto use el /usr/bin/python3
Python 3 en /usr/bin/python
(Python 2.7), que no está presente en las versiones recientes de Ubuntu.
Cuando termine, guarde y cierre el archivo presionando CTRL+X
luego Y
y ENTER
para confirmar los cambios.
Cuando desee verificar su inventario, puede hacer:
ansible-inventory --list -y
Verá una salida similar a esta, pero que contiene la infraestructura de su servidor como se define en su archivo de inventario:
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 ha configurado su archivo de inventario, tiene todo lo que necesita para probar la conexión a sus hosts Ansible.
Prueba de conexión
Una vez que haya configurado su archivo de inventario para incluir servidores, es hora de verificar si Ansible puede conectarse a estos servidores y ejecutar comandos a través de SSH.
Para esta guía, usaremos la cuenta raíz de Ubuntu porque normalmente es la única cuenta disponible de forma predeterminada en los servidores recién creados. Si sus hosts de Ansible ya han creado un usuario sudo regular, se le recomienda que utilice esa cuenta en su lugar.
Puede utilizar el -u
para especificar el usuario del sistema remoto. Si no se proporciona, Ansible intentará iniciar sesión como el usuario actual del sistema en el nodo de control.
Desde la computadora local o el nodo de control de Ansible, ejecute:
ansible all -m ping -u root
Este comando utilizará el módulo de ping
para realizar una prueba de conectividad en todos los nodos del inventario predeterminado, que se conectan como raíz. El módulo de ping
- si los hosts son accesibles;
- si tiene credenciales SSH válidas;
- si los hosts pueden ejecutar módulos Ansible usando Python.
Debería obtener una salida similar a esta:
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 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.
Cuando recibe una "pong"
de un host, significa que está listo para ejecutar comandos y libros de jugadas de Ansible en ese servidor.
Ejecutar comandos Ad-Hoc (opcional)
Después de verificar que su nodo de control de Ansible puede comunicarse con sus hosts, puede comenzar a ejecutar comandos ad hoc y libros de jugadas 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. Por ejemplo, puede verificar el uso del disco en todos los servidores con:
ansible all -a "df -h" -u root
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 df -h
puede ser reemplazado por cualquier comando que desee.
También puede ejecutar módulos Ansible a través de comandos ad-hoc, similar a lo que hizo anteriormente con el ping
para probar la conexión. Por ejemplo, así es como podemos usar el 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 apuntar a hosts individuales, así como a grupos y subgrupos, al ejecutar comandos de Ansible. Por ejemplo, para usar el uptime
de cada host en el servers
, ejecute este comando:
ansible servers -a "uptime" -u root
Podemos especificar varios hosts separándolos con dos puntos:
ansible server1:server2 -m ping -u root
Conclusión
En esta guía, ha instalado Ansible y configurado un archivo de inventario para ejecutar comandos ad-hoc desde un nodo de control de Ansible.
Después de verificar que puede conectar y controlar su infraestructura desde una máquina controladora central de Ansible, puede ejecutar cualquier comando o libro de jugadas que desee en esos hosts.