GNU/Linux >> Tutoriales Linux >  >> Cent OS

Cómo instalar y configurar Ansible en CentOS 8 / RHEL 8

Ansible es una herramienta de administración de configuración y aprovisionamiento de software de código abierto para sistemas operativos similares a Unix y Microsoft Windows.

A diferencia de Puppet, Chef y CFEngine, el software del servidor se instala en una máquina y las máquinas cliente se administran a través del software del agente. Donde Ansible, los nodos se administran controlando el nodo (servidor de Ansible) a través de SSH, por lo que no habrá ningún software de agente ejecutándose en las máquinas de nodos administrados (servidores de clientes).

Ansible puede realizar la implementación y la gestión de la configuración del software en cientos de nodos mediante SSH; normalmente, toda la operación se ejecuta con un único comando ansible. Pero, en algunos casos, es posible que necesite ejecutar varios comandos para la implementación.

Esta guía lo ayudará a instalar Ansible en CentOS 8/RHEL 8.

Medio ambiente

Instalar Ansible en CentOS 8/RHEL 8

Nodo de control de configuración

Para instalar Ansible, tendremos que habilitar EPEL y el repositorio de Ansible en CentOS 8 y RHEL 8, respectivamente.

### CentOS 8 ###

yum install -y epel-release

### RHEL 8 ###

subscription-manager repos --enable ansible-2.9-for-rhel-8-x86_64-rpms

Instale Ansible con el comando yum.

yum install -y ansible

Una vez que Ansible esté instalado, verifique la versión de Ansible ejecutando el siguiente comando.

ansible --version

Salida:

ansible 2.8.5
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.6/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.6.8 (default, May 21 2019, 23:51:36) [GCC 8.2.1 20180905 (Red Hat 8.2.1-3)]

Configurar nodo administrado

Las máquinas cliente deben tener al menos Python 2 (versión 2.6 o posterior) o Python 3 (versión 3.5 o posterior).

### CentOS 8 / RHEL 8 ###

yum install -y platform-python

### CentOS 7 / RHEL 7 ###

yum install -y python

SELinux

Si tiene SELinux habilitado en los nodos administrados, deberá instalar el siguiente paquete en los nodos antes de usar cualquier función relacionada con la copia/archivo/plantilla en Ansible.

### CentOS 8 / RHEL 8 ###

yum install -y python3-libselinux

### CentOS 7 / RHEL 7 ###

yum install -y libselinux-python

Autenticación SSH

Como se dijo anteriormente, Ansible usa OpenSSH nativo para la comunicación remota. Ansible admite la autenticación con contraseña y sin contraseña para ejecutar comandos en nodos administrados.

Aquí, para esta demostración, he usado comunicación sin contraseña entre el nodo de control ansible (raíz) y los nodos administrados (raíz). Sin embargo, le mostraré cómo usar Ansible con autenticación de contraseña.

Autenticación de clave SSH (Autenticación sin contraseña)

Cuando se trata de autenticación ssh, de forma predeterminada, utiliza claves ssh (autenticación sin contraseña) para autenticarse con la máquina remota.

LEER :Cómo configurar el inicio de sesión sin contraseña SSH en CentOS 8 / RHEL 8

LEER :Cómo configurar el inicio de sesión sin contraseña SSH en CentOS 7 / RHEL 7

Como sabe, el aprovisionamiento de software o los cambios de configuración que realiza en los nodos requieren privilegios de raíz o privilegios de raíz equivalentes (sudo). Por lo tanto, configure la comunicación sin contraseña entre el usuario raíz del servidor Ansible y el usuario raíz de los nodos para simplificar.

Autenticación de contraseña

La autenticación de contraseña también se puede usar cuando sea necesario proporcionando la opción –ask-pass. Esta opción requiere sshpass a la máquina de control.

yum install -y sshpass 

Crear inventario de Ansible

El archivo /etc/ansible/hosts contiene el inventario de hosts remotos a los que Ansible se conectará a través de SSH/Winrm (Windows) para administrarlos. En este momento solo veremos cómo administrar las configuraciones del nodo Linux remoto.

Edite el archivo de inventario.

vi /etc/ansible/hosts

Ingrese la dirección IP o el nombre de host de uno o más sistemas remotos. Puedes agrupar servidores con [GROUP_NAME]. Aquí, he agregado ambas máquinas al grupo de servidores de demostración.

Los grupos se utilizan para clasificar los sistemas para un uso particular. Si no especifica ningún grupo, actuarán como hosts no agrupados.

[demoservers]
192.168.0.20
192.168.0.30

Comprobar la conectividad de Ansible

Verifiquemos la conectividad de los nodos usando ping (módulo) de la máquina de control. Para ello, utilizaremos el comando ansible con las opciones -m (cargar módulo) y all (todos los servidores) o demoservers (un grupo de nodos).

Este módulo de ping se usa a menudo para solucionar problemas de conectividad de Ansible.
# All servers - If you use passwordless authentication. Current logged in user on Ansible server and remote node's user are same

ansible -m ping all

# All servers - If you use passwordless authentication and the remote user is different from logged in user on Ansible server

ansible -m ping -u raj all

# All servers - If you use password authentication and the remote user is different from logged in user on Ansible server

ansible -m ping all -u raj --ask-pass

# Only demoservers group - If you use passwordless authentication. Current logged in user on Ansible server and remote node's user are same

ansible -m ping demoservers

Salida:

192.168.1.20 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
192.168.1.30 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

En el ejemplo anterior, hemos visto cómo usar el módulo ping con el comando ansible para hacer ping a todos o a un grupo de hosts remotos con autenticación sin contraseña y con contraseña.

De la misma manera, podemos usar varios módulos con comando ansible. Puede encontrar los módulos disponibles aquí.

Ejecutar comando en nodos

Esta vez, usaremos el módulo de comando con el comando ansible para obtener información de la máquina remota.

Los siguientes comandos están escritos asumiendo que tiene comunicación sin contraseña entre el nodo de control y los nodos administrados. Estoy usando un grupo de servidores de demostración para ejecutar comandos.

Comprobar nombre de host

En nuestro primer ejemplo, ejecutaremos el comando hostname con el módulo de comando para obtener el nombre del host de los nodos remotos de una sola vez.

ansible -m command -a "hostname" demoservers

Salida:

192.168.1.30 | SUCCESS | rc=0 >>
node2.itzgeek.local

192.168.1.20 | SUCCESS | rc=0 >>
node1.itzgeek.local

Comprobar el tiempo de actividad

Para verificar el tiempo de actividad de los nodos.

 ansible -m command -a "uptime" demoservers

Salida:

192.168.1.30 | SUCCESS | rc=0 >>
 16:36:45 up 56 min,  3 users,  load average: 0.00, 0.00, 0.00

192.168.1.20 | SUCCESS | rc=0 >>
 16:36:45 up  1:09,  2 users,  load average: 0.05, 0.04, 0.05

Leer archivos remotos

También puede ver el contenido de un archivo en particular.

ansible -m command -a "cat /etc/hosts" demoservers

Salida:

192.168.1.30 | SUCCESS | rc=0 >>
# This file is managed by man:systemd-resolved(8). Do not edit.
#
# This is a dynamic resolv.conf file for connecting local clients to the
# internal DNS stub resolver of systemd-resolved. This file lists all
# configured search domains.
#
# Run "systemd-resolve --status" to see details about the uplink DNS servers
# currently in use.
#
# Third party programs must not access this file directly, but only through the
# symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way,
# replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.

nameserver 127.0.0.53

192.168.1.20 | SUCCESS | rc=0 >>
# Generated by NetworkManager
search itzgeek.local
nameserver 8.8.8.8
nameserver 192.168.1.1

Redireccionar salida de archivo

También puede guardar la salida (en el servidor Ansible) en cualquier archivo mediante la redirección.

ansible -m command -a "cat /etc/resolv.conf" demoservers > /tmp/ouput_file

cat /tmp/ouput_file

Realizar cambios de configuración en el nodo

Podemos usar el módulo lineinfile para editar archivos en nodos remotos. Por ejemplo, para agregar servidores de nombres adicionales, podemos usar el siguiente comando.

ansible -m lineinfile -a "path=/etc/resolv.conf line=nameserver 8.8.4.4" demoservers

Puede validar los cambios usando el siguiente comando.

ansible -m command -a "cat /etc/resolv.conf | grep -i nameserver" demoservers

Conclusión

Eso es todo. Ahora ha instalado correctamente Ansible en CentOS 8/RHEL 8. Puede proceder a crear libros de jugadas de Ansible para automatizar sus tareas.


Cent OS
  1. Cómo instalar Ansible en CentOS 7/RHEL 7/Ubuntu 18.04/16.04 y Debian 9

  2. Cómo instalar Ansible en CentOS 7

  3. Cómo instalar Ansible en CentOS 8

  4. CentOS/RHEL 7:Cómo instalar y configurar telnet

  5. Cómo instalar y configurar Samba en CentOS/RHEL

Cómo instalar y configurar samba en RHEL 8 / CentOS 8

Cómo instalar YUM en RHEL 8 / CentOS 8

Cómo instalar mongodb en RHEL 8 / CentOS 8

Cómo instalar maven en RHEL 8 / CentOS 8

Cómo instalar y configurar Checkmk en CentOS 8 / RHEL 8

Cómo instalar y configurar Jenkins en CentOS 8 / RHEL 8

    Nombre de host Dirección IP SO Propósito
    servidor.itzgeek.local 192.168.0.10 CentOS 8/RHEL 8 Máquina de control
    nodo1.itzgeek.local 192.168.0.20 CentOS 8 Nodo administrado 1
    nodo2.itzgeek.local 192.168.0.30 CentOS 7 Nodo administrado 2