Si toma otras herramientas de administración de configuración como títeres, chef y CFEngine, el software del servidor se instala en una máquina y las máquinas cliente se administran a través del agente. Donde Ansible, los nodos son administrados por la máquina de control (servidor Ansible) a través de SSH, por lo que no habrá ningún agente ejecutándose en las máquinas del nodo.
Ansible implementa módulos en los nodos a través de SSH, y estos módulos se almacenan temporalmente en los nodos y se comunican con el servidor de Ansible a través de un protocolo JSON. Los módulos no son más que un script escrito en Python, Perl, Ruby , bash, etc.
Puede ejecutar Ansible en cualquier máquina que tenga instalado Python 2.6 o 2.7 (Windows no es compatible con la máquina de control).
Compatible con Red Hat, Debian, CentOS, OS X y cualquiera de los BSD.
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)
Nombre de host | Dirección IP | SO | Propósito |
servidor.itzgeek.local | 192.168.1.10 | CentOS 7/Ubuntu 18.04/Debian 9 | Máquina de control |
nodo1.itzgeek.local | 192.168.1.20 | CentOS 7 | Nodo administrado 1 |
nodo2.itzgeek.local | 192.168.1.30 | Ubuntu 18.04 | Nodo administrado 2 |
Instalar Ansible en CentOS 7/RHEL 7/Ubuntu 18.04/16.04 y Debian 9
Configuración de la máquina de control
Para instalar Ansible tendremos que Habilitar el repositorio EPEL en CentOS 7 / RHEL 7 .
### CentOS 7 ###
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
### RHEL 7 ###
subscription-manager repos --enable rhel-7-server-ansible-2.6-rpms
### Ubuntu 18.04 / Ubuntu 16.04 ###
sudo apt-get update
sudo apt-get install software-properties-common
sudo apt-add-repository ppa:ansible/ansible
sudo apt-get update
### Debian 9 ###
sudo apt-get install dirmngr
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367
echo "deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main" | sudo tee -a /etc/apt/sources.list.d/ansible.list
sudo apt-get update
Instale Ansible.
### CentOS 7 / RHEL 7 & Fedora 28 ###
yum install -y ansible
### Ubuntu 18.04 / 16.04 & Debian 9 ###
sudo apt-get install -y ansible
Una vez que Ansible esté instalado, verifique la versión de Ansible ejecutando el siguiente comando.
ansible --version
Salida:
ansible 2.6.3
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Jul 13 2018, 13:06:57) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]
Configurar nodos administrados
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 7 / RHEL 7 & Fedora ###
yum install -y python
### Ubuntu 18.04 / 16.04 & Debian 9 ###
sudo apt-get install -y python
SELinux (CentOS/RHEL/Fedora)
Si tiene habilitado SELinux 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.
yum install -y libselinux-python
Autenticación SSH
Como se dijo anteriormente, Ansible usa OpenSSH nativo para la comunicación remota. Ansible admite tanto sin contraseña y contraseña autenticación para ejecutar comandos en nodos administrados.
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 7/RHEL 7
Aunque el enlace anterior es para CentOS, los pasos también funcionarán para Ubuntu/Debian.
Una vez que configure la comunicación sin contraseña, verifíquela.
ssh [email protected]
ssh [email protected]
Ahora debería poder iniciar sesión en la máquina remota sin la contraseña.
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.
### CentOS 7 / RHEL 7 & Fedora ###
yum install -y sshpass
### Ubuntu 18.04 / 16.04 & Debian 9 ###
sudo apt-get update
sudo apt-get install -y sshpass
Aquí, para esta demostración, he utilizado la comunicación sin contraseña entre el nodo de control de ansible y los nodos administrados.
Nombre de usuario del servidor de Ansible =root
Nombre de usuario del nodo administrado =raj Crear inventario de Ansible
Edite (o cree) /etc/ansible/hosts archivo. Este archivo contiene el inventario de hosts remotos a los que Ansible se conectará a través de SSH para administrarlos.
### CentOS 7 / RHEL 7 & Fedora ###
vi /etc/ansible/hosts
### Ubuntu 18.04 / 16.04 & Debian 9 ###
sudo nano /etc/ansible/hosts
Coloque uno o más sistemas remotos y agrúpelos. Aquí, he agregado ambas máquinas al grupo de servidores de demostración.
Los grupos se utilizan para clasificar sistemas para un uso particular. Si no especifica ningún grupo, actuarán como hosts no agrupados.
[demo-servers]
192.168.1.20
192.168.1.30
Primer Comando
Ahora es el momento de comprobar todos nuestros nodos con solo hacer un ping desde la máquina de control, para ello usaremos el comando ansible con opciones -m (módulo de carga) y todos (todos los servidores).
# all servers - Works when both server's and client's user name are same (Passwordless)
ansible all -m ping
# all servers - "raj" is managed node's user (Passwordless)
ansible all -u raj -m ping
OR
# Only demo-servers group - "raj" is managed node's user (Passwordless)
ansible demo-servers -u raj -m ping
OR
# If you use password authendication
ansible -m ping all -u raj --ask-pass
Salida:
192.168.1.20 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.1.30 | SUCCESS => {
"changed": false,
"ping": "pong"
}
En el ejemplo anterior, hemos utilizado el módulo de ping con ansible Comando para hacer ping a todos o a un grupo de hosts remotos.
De la misma manera, podemos usar varios módulos con ansible comando, puede encontrar los módulos disponibles aquí .
Aquí, para esta demostración, he usado comunicación sin contraseña entre el nodo de control de ansible y los nodos administrados.
Nombre de usuario del servidor de Ansible =root
Nombre de usuario del nodo administrado =raj
Entonces, todos mis comandos de ansible tendrán -u raj
Ejecución remota de comandos
Esta vez, usaremos el comando módulo con ansible Comando para obtener información de la máquina remota.
Por ejemplo, ejecutaremos hostname comando con comando módulo para obtener el nombre de host de los hosts remotos de una sola vez.
ansible -m command -a "hostname" -u raj demo-servers
Salida:
192.168.1.30 | SUCCESS | rc=0 >>
node2.itzgeek.local
192.168.1.20 | SUCCESS | rc=0 >>
node1.itzgeek.local
Obtendremos los detalles de la partición con el siguiente comando.
ansible -m command -a "df -hT" -u raj demo-servers
Salida:
192.168.1.30 | SUCCESS | rc=0 >>
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 395M 1.5M 393M 1% /run
/dev/sda4 ext4 94G 4.9G 84G 6% /
tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/loop0 squashfs 87M 87M 0 100% /snap/core/4486
/dev/loop3 squashfs 3.4M 3.4M 0 100% /snap/gnome-system-monitor/36
/dev/loop1 squashfs 1.7M 1.7M 0 100% /snap/gnome-calculator/154
/dev/loop2 squashfs 141M 141M 0 100% /snap/gnome-3-26-1604/59
/dev/loop4 squashfs 21M 21M 0 100% /snap/gnome-logs/25
/dev/loop5 squashfs 88M 88M 0 100% /snap/core/5328
/dev/loop6 squashfs 13M 13M 0 100% /snap/gnome-characters/69
/dev/sda1 vfat 93M 4.6M 88M 5% /boot/efi
tmpfs tmpfs 395M 28K 395M 1% /run/user/120
tmpfs tmpfs 395M 36K 395M 1% /run/user/1000
/dev/loop7 squashfs 15M 15M 0 100% /snap/gnome-logs/40
192.168.1.20 | SUCCESS | rc=0 >>
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 50G 1.1G 49G 3% /
devtmpfs devtmpfs 1.4G 0 1.4G 0% /dev
tmpfs tmpfs 1.5G 0 1.5G 0% /dev/shm
tmpfs tmpfs 1.5G 8.5M 1.4G 1% /run
tmpfs tmpfs 1.5G 0 1.5G 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 188M 827M 19% /boot
/dev/mapper/centos-home xfs 46G 33M 46G 1% /home
tmpfs tmpfs 287M 0 287M 0% /run/user/1000
tmpfs tmpfs 287M 0 287M 0% /run/user/0
Para verificar el tiempo de actividad y los detalles de carga en ambos nodos.
ansible -m command -a "uptime" -u raj demo-servers
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
También puede comprobar el contenido de un archivo en particular.
ansible -m command -a "cat /etc/resolv.conf" -u raj demo-servers
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
También puede guardar la salida en cualquier archivo redirigiendo como se muestra a continuación.
ansible -m command -a "cat /etc/resolv.conf" -u raj demo-servers > /tmp/ouput_file
cat /tmp/ouput_file
De esta forma, puede ejecutar muchos comandos de shell usando ansible.
Ahora ha instalado correctamente Ansible en CentOS 7 / Ubuntu 18.04 / Ubuntu 16.04 / Debian 9 .
LEER MÁS :Cómo crear playbooks de Ansible para la automatización de TI
Eso es todo.