Developer Advocate
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.
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:
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.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:
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.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.
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.
[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:
Outputall:
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.
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:
El resultado deberá ser similar a este:
Outputserver1 | 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.
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.
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.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!