Introducción
Los sistemas de gestión de la configuración están diseñados para optimizar 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.
Si bien hay muchas herramientas de administración de configuración populares disponibles para sistemas Linux, como Cocinero y Marioneta, a menudo son más complejos de lo que muchas personas quieren o necesitan. Ansible es una gran alternativa a estas opciones porque ofrece una arquitectura que no requiere la instalación de un software especial en los nodos, utilizando SSH para ejecutar las tareas de automatización y los archivos YAML para definir los detalles de aprovisionamiento.
En esta guía, discutiremos cómo instalar Ansible en un servidor Ubuntu 20.04 y veremos algunos conceptos básicos sobre cómo usar este software. Para obtener una descripción general de alto nivel de Ansible como herramienta de administración de configuración, consulte Introducción a la administración de configuración con Ansible.
Prerrequisitos
Para seguir este tutorial, necesitará:
- Un nodo de control ansible: El nodo de control Ansible es la máquina que usaremos para conectarnos y controlar los hosts Ansible a través de SSH. Su nodo de control Ansible puede ser su máquina local o un servidor dedicado a 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, puedes seguir 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. Al hacerlo, se configurará un firewall en el servidor con
ufw
y habilite el acceso externo a su perfil de usuario no root, lo que ayudará a mantener seguro el servidor remoto. - Un par de claves SSH asociado con este usuario. Para configurar esto, puedes seguir 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, puedes seguir 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. Al hacerlo, se configurará un firewall en el servidor con
- Uno o más Anfitriones Ansibles: Un host Ansible es cualquier máquina que su nodo de control Ansible está configurado para automatizar. Esta guía asume que sus hosts Ansible son servidores remotos Ubuntu 20.04. Asegúrese de que cada host de Ansible tenga:
- La clave pública SSH del nodo de control Ansible agregada a
authorized_keys
de un usuario del sistema. Este usuario puede ser raíz o un usuario normal con privilegios de sudo. Para configurar esto, puedes seguir Paso 2 de Cómo configurar claves SSH en Ubuntu 20.04.
- La clave pública SSH del nodo de control Ansible agregada a
Paso 1 – Instalación de Ansible
Para comenzar a usar Ansible como un medio para administrar la infraestructura de su servidor, debe instalar el software Ansible en la máquina que servirá como nodo de control de Ansible. Usaremos los repositorios predeterminados de Ubuntu para eso.
Primero, actualice el índice del paquete de su sistema con:
sudo apt update
Después de esta actualización, puede instalar el software Ansible con:
sudo apt install ansible
presiona Y cuando se le solicite que confirme la instalación.
Su nodo de control Ansible ahora tiene todo el software requerido para administrar sus hosts. A continuación, veremos cómo configurar un archivo de inventario para que Ansible pueda comunicarse con sus nodos administrados.
Paso 2 – Configuración del archivo de inventario
Los archivos de inventario contiene información sobre los hosts que administrará con Ansible. Puede incluir desde uno hasta varios cientos de servidores en su 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 serán válidas solo para hosts o grupos específicos, para poder usarse dentro de libros de jugadas y plantillas. Algunas variables también pueden afectar la forma en que se ejecuta un libro de jugadas, como el ansible_python_interpreter
variable que veremos en un momento. Para editar el contenido de su inventario Ansible predeterminado, abra el /etc/ansible/hosts
utilizando el editor de texto de su elección, en su nodo de control Ansible:
sudo nano /etc/ansible/hosts
Nota: Aunque Ansible generalmente crea un archivo de inventario predeterminado en etc/ansible/hosts
, puede crear archivos de inventario en cualquier ubicación que mejor se adapte a sus necesidades. En este caso, deberá proporcionar la ruta a su archivo de inventario personalizado con el -i
parámetro al ejecutar comandos Ansible y playbooks. El uso de archivos de inventario por proyecto es una buena práctica para minimizar el riesgo de ejecutar un libro de jugadas en el grupo incorrecto de servidores.
El archivo de inventario predeterminado proporcionado por la instalación de Ansible contiene una serie de ejemplos que puede usar como referencia para configurar su inventario. El siguiente ejemplo define un grupo llamado [servers]
con tres servidores diferentes, cada uno identificado por un alias personalizado: servidor 1, servidor2y servidor3. Asegúrese de reemplazar las IP resaltadas con las direcciones IP de sus hosts 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
los all:vars
subgrupo establece el ansible_python_interpreter
parámetro de host que será válido para todos los hosts incluidos en este inventario. Este parámetro asegura que el servidor remoto use /usr/bin/python3
Python 3 ejecutable en lugar de /usr/bin/python
(Python 2.7), que no está presente en las versiones recientes de Ubuntu.
Cuando haya terminado, guarde y cierre el archivo presionando CTRL+X
entonces Y
y ENTER
para confirmar sus cambios.
Siempre que desee verificar su inventario, puede ejecutar:
- ansible-inventory –list -y
Verá un resultado similar a este, pero que contiene su propia infraestructura de servidor como se define 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 ha configurado su archivo de inventario, tiene todo lo que necesita para probar la conexión a sus hosts Ansible.
Paso 3 – Prueba de conexión
Después de configurar el archivo de inventario para incluir sus 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 Ubuntu raíz cuenta porque esa suele ser la única cuenta disponible de forma predeterminada en los servidores recién creados. Si sus hosts Ansible ya tienen un usuario de sudo regular creado, se le recomienda que use esa cuenta en su lugar.
Puedes usar el -u
argumento 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 Ansible, ejecute:
- ansible all -m ping -u root
Este comando usará el incorporado de Ansible ping
módulo ejecutar una prueba de conectividad en todos los nodos de su inventario predeterminado, conectándose como raíz. los ping
el módulo probará:
- 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:
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 pedirá que confirme la autenticidad de los hosts a los que se conecta a través de Ansible. Cuando se le solicite, escriba yes
y luego golpear ENTER
para confirmar.
Una vez que tengas un "pong"
responder desde un host, significa que estás listo para ejecutar comandos Ansible y playbooks en ese servidor.
Nota: Si no puede obtener una respuesta exitosa de sus servidores, consulte nuestra Guía de Cheat Sheet de Ansible para obtener más información sobre cómo ejecutar comandos Ansible con diferentes opciones de conexión.
Paso 4: ejecución de comandos ad-hoc (opcional)
Después de confirmar que su nodo de control Ansible puede comunicarse con sus hosts, puede comenzar a ejecutar comandos y libros de jugadas ad-hoc en sus servidores.
Cualquier comando que normalmente ejecute 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 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 puedes ejecutar Módulos Ansible a través de comandos ad-hoc, de manera similar a lo que hemos hecho antes con el ping
Módulo para probar la conexión. Por ejemplo, así es como podemos usar el apt
módulo 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 apuntar a hosts individuales, así como a grupos y subgrupos, al ejecutar comandos Ansible. Por ejemplo, así es como verificaría el uptime
de cada anfitrión en el servers
grupo:
- ansible servers -a «uptime» -u root
Podemos especificar varios 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, puede consultar nuestra Guía de referencia de Ansible.
Conclusión
En 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 haya confirmado que puede conectar y controlar su infraestructura desde una máquina controladora central Ansible, puede ejecutar cualquier comando o libro de jugadas que desee en esos hosts.
Para obtener más información sobre cómo usar Ansible, consulte nuestra Guía de hoja de trucos de Ansible.