Ansible es una herramienta de administración de configuración ampliamente utilizada escrita en lenguaje Python que ayuda a configurar una o varias máquinas al mismo tiempo. Ansible se puede utilizar para realizar las siguientes tareas
- Configuración desde cero de uno o varios nodos
- Despliegues
- Cambios de configuración
- Parches
- Gestión de servicios
- y muchos más
Ansible es ampliamente utilizado debido a su simplicidad. El código de Ansible también está escrito en lenguaje YAML, no necesita que se instale un agente en una máquina remota. Ansible usa el puerto 22 (SSH) para conectarse a una máquina remota y realizar los cambios necesarios.
Cualquier máquina que pueda conectarse a la máquina remota en el puerto 22 puede convertirse en un nodo de control. Un nodo de control es donde puede instalar Ansible y un nodo administrado se administra mediante nodos de control.
Echemos un vistazo a la instalación de Ansible en el nodo del controlador.
Instalar Ansible en CentOS 7:
Como Python es el único requisito previo para instalar Ansible, instalemos Python ejecutando el siguiente comando.
$sudo yum install python3 -y
Para instalar Ansible en CentOS 7, primero asegúrese de que el repositorio EPEL de CentOS 7 esté instalado. Ejecute el siguiente comando para instalar el repositorio epel.
$sudo yum install epel-release
Actualice el índice del paquete del sistema ejecutando el siguiente comando de actualización.
$sudo yum update -y
Una vez que el repositorio esté instalado, instale Ansible con el administrador de paquetes yum. Ejecute el comando mencionado a continuación para instalar Ansible.
$sudo yum install ansible -y
Verifique si Ansible está instalado correctamente y su versión.
$ansible -v
Instalar Ansible en CentOS 8:
Veamos los pasos de instalación para CentOS 8. Instalemos python en CentOS 8.
$sudo dnf install python3
Una vez que Python esté instalado, instalemos EPEL repo ejecutando el siguiente comando.
$sudo dnf install epel-release -y
Actualice el índice del paquete del sistema ejecutando el siguiente comando de actualización.
$sudo dnf update -y
Ahora estamos listos para instalar Ansible. Ejecute el siguiente comando para instalar Ansible.
$sudo dnf install ansible -y
Verifique si Ansible está instalado correctamente y su versión.
$ansible -v
Instalar Ansible en Ubuntu:
Python es un paquete predeterminado hoy en día en la mayoría de las distribuciones de Linux. Si no tiene Python instalado, ejecute el siguiente comando para instalar el paquete de Python.
$sudo apt-get install python3
Para instalar Ansible en Ubuntu, primero instalemos el repositorio ejecutando el siguiente comando.
$sudo apt-add-repository ppa:ansible/ansible
Actualice el índice del paquete del sistema ejecutando el siguiente comando de actualización.
$sudo apt-get update -y
$sudo apt-get install -y ansible
Verifique si Ansible está instalado correctamente y su versión.
$ansible -v
Instalar Ansible con Python PIP en CentOS, Debian y Ubuntu:
Independientemente del sistema operativo que esté utilizando, puede instalar Ansible con el instalador del paquete python. Ejecutemos el siguiente comando para instalar python3-pip.
Para CentOS 7 y anteriores:
$sudo yum install python3 python3-pip -y
Para CentOS 8:
$sudo dnf install python3 python3-pip -y
Para Ubuntu y Debian:
$sudo apt-get install python3 python3-pip
Como tenemos Python y pip instalados, ejecutemos el siguiente comando en cualquier sistema operativo para instalar Ansible.
$sudo pip3 install ansible
Verifique si Ansible está instalado correctamente y su versión.
$ansible -v
Configuración de hosts de controlador Ansible:
Primero debemos configurar el archivo "hosts" antes de que podamos comenzar a comunicarnos con nuestros otros nodos. Este archivo tendrá todas las IP o nombres de host de los nodos administrados.
Nota :no siempre es necesario usar un archivo de hosts para conectarse a los nodos administrados. Pero luego, cada vez, necesitamos usar la IP del servidor de nodo administrado o el nombre de host mientras ejecutamos cada comando.
Cree el archivo (si aún no está allí) con privilegios de root ejecutando el siguiente comando:
$sudo touch /etc/ansible/hosts
Antes de escribir en el archivo, echemos un vistazo y comprendamos el archivo de hosts de muestra:
[group_name]
alias ansible_ssh_host=your_node_server_ip
Un archivo de hosts debe seguir la sintaxis anterior. Echemos un vistazo a cada parámetro.
[nombre_del_grupo] :Este parámetro creará un grupo. Todas las direcciones IP o nombres de host de nodos administrados bajo el parámetro group_name estarán en el mismo grupo. Por ejemplo, si tenemos varios servidores web en nuestra infraestructura, podemos agregar todas las direcciones IP o los nombres de host del nodo administrado aquí.
alias :este parámetro se utiliza para dar al servidor de nodos gestionados un alias para identificar el servidor de nodos gestionados. Por ejemplo, si tenemos varios servidores web en nuestra infraestructura, podemos dar host1, host2, host3 como alias. La principal ventaja de dar un alias es que cuando ejecutamos el comando Ansible para cambiar la configuración de un solo servidor, podemos usar un alias para identificar y realizar la tarea requerida en el servidor.
ansible_ssh_host=your_node_server_ip :este parámetro apuntará el alias a una dirección IP o nombre de host del nodo administrado.
Usaremos CentOS 8 como un nodo controlado con Ansible. Como se mencionó anteriormente, Ansible usa 22 puertos del host remoto para conectarse.
Asumiremos que las direcciones IP de nuestro servidor de nodo administrado de CentOS son 192.168.0.2, 192.168.0.3 y 192.168.0.4.
Para permitir que el nodo del controlador de Ansible se comunique con los nodos administrados, debemos confirmar que se puede acceder a los nodos administrados en el puerto 22, que es un puerto SSH. Ejecute el siguiente comando para confirmar la conectividad uno por uno en los tres nodos administrados desde el controlador.
$ssh [email protected]192.168.0.2
$ssh [email protected]192.168.0.3
$ssh [email protected]192.168.0.4
Se le solicitará la contraseña del usuario raíz de todos los nodos. Ansible funciona muy bien si tiene una autenticación sin contraseña configurada entre el controlador de Ansible y los nodos administrados. Con diferentes parámetros en el comando Ansible, la autenticación de contraseña también puede funcionar.
Como hemos configurado la conectividad ssh entre el controlador Ansible y los nodos administrados, configuremos el archivo de hosts para conectarse a todos los nodos administrados. Como se mencionó anteriormente, podemos agregar múltiples alias de servidor de nodo en un solo grupo. En este caso, agreguemos los tres nodos y asignemos un alias como host1, host2 y host3 respectivamente. Nuestro archivo de hosts debería verse como a continuación después de agregar todos los detalles del nodo administrado. Ejecute el siguiente comando para editar el archivo de hosts que creamos antes.
Abra el archivo con privilegios de root ejecutando el siguiente comando:
$sudo vi /etc/ansible/hosts
Agreguemos la configuración mencionada a continuación en el archivo de hosts.
[node_servers]
host1 ansible_ssh_host=192.168.0.2
host2 ansible_ssh_host=192.168.0.3
host3 ansible_ssh_host=192.168.0.4
Aquí, hemos agregado todos los IP y alias de nodos administrados en un grupo llamado node_servers .
Intentemos conectarnos a los nodos administrados desde el controlador de Ansible ahora.
$ansible -m ping node_servers
El comando anterior utiliza un ping de módulo para conectarse al grupo "node_servers" que definimos en el archivo de hosts anterior.
Puede encontrar errores por diferentes motivos.
- Ansible, de manera predeterminada, intentará conectarse al nodo administrado con su nombre de usuario actual si no proporcionó uno. Si ese usuario no existe en el servidor del nodo, recibirá el siguiente error.
- Si el puerto ssh 22 no está abierto para la conexión en nodos administrados. (Como se mencionó anteriormente, Ansible se conecta en el puerto ssh)
- Si la IP en el archivo de hosts no es correcta.
Si alguna de las condiciones anteriores falla, encontrará el siguiente error.
host1 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
host2 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
host3 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
Específicamente, digamos a Ansible que debe conectarse a los nodos administrados en el grupo "node_servers" con el usuario james. Cree el directorio group_vars como se menciona a continuación.
$sudo mkdir /etc/ansible/group_vars
Los archivos de este directorio se usan específicamente para configurar variables que podemos usar en nuestros libros de jugadas de Ansible.
Vamos a crear un archivo de variables para nuestra configuración ejecutando el siguiente comando:
$sudo vim /etc/ansible/group_vars/node_servers.yml
Agregue el siguiente código al archivo:
---
ansible_ssh_user: james
El archivo YML siempre comienza con "---" en la primera línea. Guardemos y cerremos este archivo cuando haya terminado. Ahora Ansible siempre usará el james usuario para el grupo node_servers, independientemente del usuario actual que esté utilizando para ejecutar un comando.
Verifique la conexión del nodo administrado:
Ahora que tenemos nuestros hosts configurados y suficientes detalles de configuración para permitirnos conectarnos con éxito a nuestros nodos administrados, podemos probar el mismo comando que ejecutamos antes.
$ansible -m ping servers
Ansible devolverá una salida como esta:
host1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
host2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
host3 | ÉXITO => {
"cambiado":falso,
"ping":"pong"
}
"cambiado":falso,
"ping":"pong"
}
Esta es una prueba básica para asegurarse de que Ansible tenga una conexión con sus nodos administrados.
Conclusión:
No es necesario utilizar el sistema operativo CentOS para los nodos administrados. Puede usar la misma configuración de prueba que hemos usado anteriormente para CentOS, RedHat, Ubuntu y cualquier otra distribución de Linux.