Este tutorial cubre la instalación y configuración paso a paso de Ansible en Redhat Enterprise Linux 8.
Ansible es el sistema líder de administración de configuración de código abierto. Facilita a los administradores y equipos de operaciones el control de miles de servidores desde una máquina central sin instalar agentes en ellos.
Arquitectura Ansible.
Requisitos de software y convenciones de la línea de comandos de Linux Categoría | Requisitos, convenciones o versión de software utilizada |
Sistema | Red Hat Enterprise Linux 8 |
Software | Python3, Ansible |
Otro | Acceso privilegiado a su sistema Linux como root o a través de sudo comando. |
Convenciones | # – requiere que los comandos de Linux dados se ejecuten con privilegios de root, ya sea directamente como usuario root o mediante el uso de sudo comando $ – requiere que los comandos de Linux dados se ejecuten como un usuario normal sin privilegios |
Descripción general de Ansible
Ansible es un motor de automatización de TI radicalmente simple que automatiza el aprovisionamiento en la nube, la administración de la configuración, la implementación de aplicaciones, la orquestación dentro del servicio y muchas otras necesidades de TI.
Diseñado para implementaciones de múltiples niveles desde el primer día, Ansible modela su infraestructura de TI al describir cómo se interrelacionan todos sus sistemas, en lugar de solo administrar un sistema a la vez.
No utiliza agentes ni infraestructura de seguridad personalizada adicional, por lo que es fácil de implementar y, lo que es más importante, utiliza un lenguaje muy simple (YAML, en forma de Ansible Playbooks) que le permite describir sus trabajos de automatización de una manera que se aproxima inglés simple. Ansible funciona al conectarse a sus nodos y enviarles pequeños programas, llamados "módulos de Ansible".
Estos programas están escritos para ser modelos de recursos del estado deseado del sistema. Luego, Ansible ejecuta estos módulos (a través de SSH de manera predeterminada) y los elimina cuando termina.
Su biblioteca de módulos puede residir en cualquier máquina y no se requieren servidores, demonios o bases de datos. Por lo general, trabajará con su programa de terminal favorito, un editor de texto y, probablemente, un sistema de control de versiones para realizar un seguimiento de los cambios en su contenido.
Instalar y configurar Python
La versión predeterminada de Python en RHEL 8 es Python 3.6. Pero Python 2 sigue estando disponible en RHEL 8. Si por algún motivo falta Python 3.6 en la instalación de Red Hat Enterprise Linux 8, deberá instalarlo manualmente.
Python 3.6 se puede instalar en RHEL 8 ejecutando el siguiente comando en su terminal. Python debe instalarse tanto en el servidor Ansible como en todos los hosts/clientes donde se conectará.
# yum install python3
Updating Subscription Management repositories.
Updating Subscription Management repositories.
Last metadata expiration check: 8:59:59 ago on Sun 03 Feb 2019 11:20:51 PM +04.
Dependencies resolved.
======================================================================================================================================================
Package Arch Version Repository Size
======================================================================================================================================================
Installing:
python36 x86_64 3.6.6-17.el8+2102+a4bbd900 rhel-8-for-x86_64-appstream-beta-rpms 22 k
Enabling module streams:
python36 3.6
Transaction Summary
======================================================================================================================================================
Install 1 Package
Total download size: 22 k
Installed size: 22 k
Is this ok [y/N]: y
Downloading Packages:
python36-3.6.6-17.el8+2102+a4bbd900.x86_64.rpm 6.0 kB/s | 22 kB 00:03
------------------------------------------------------------------------------------------------------------------------------------------------------
Total 6.0 kB/s | 22 kB 00:03
warning: /var/cache/dnf/rhel-8-for-x86_64-appstream-beta-rpms-64aba9de5ea7e089/packages/python36-3.6.6-17.el8+2102+a4bbd900.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f21541eb: NOKEY
Red Hat Enterprise Linux 8 for x86_64 - AppStream Beta (RPMs) 3.2 kB/s | 3.3 kB 00:01
Importing GPG key 0xF21541EB:
Userid : "Red Hat, Inc. (beta key 2) <[email protected]>"
Fingerprint: B08B 659E E86A F623 BC90 E8DB 938A 80CA F215 41EB
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-beta
Is this ok [y/N]: y
...
Installed:
python36-3.6.6-17.el8+2102+a4bbd900.x86_64
Complete!
Para usar Python 3, simplemente escriba python3
en la terminal.
Debería haber notado que para usar Python 3, el comando es python3 y python2 para Python 2. ¿Qué sucede si sus aplicaciones están configuradas para hacer referencia a python, que no está disponible en todo el sistema? Obtendrá el siguiente error bash.
# python
-bash: python: command not found
Puede usar el mecanismo de alternativas para habilitar el comando python no versionado en todo el sistema y establecerlo en una versión específica. Para configurar Python 3 como predeterminado, ejecute el siguiente comando.
# alternatives --set python /usr/bin/python3
Ejecutar python -V debería mostrar la versión predeterminada de Python configurada:
#python -V
Python 3.6.6
o iniciando Python una consola:
# python
Python 3.6.6 (default, Oct 16 2018, 01:53:53)
[GCC 8.2.1 20180905 (Red Hat 8.2.1-3)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
Establecer SSH sin contraseña
Crea el usuario ansible
en todos los hosts:
# useradd ansible ; echo "" | passwd --stdin ansible
Haga la entrada necesaria en el archivo sudoers /etc/sudoers
para usuario ansible para acceso sudo sin contraseña:
ansible ALL=(ALL) NOPASSWD: ALL
Ahora genera la clave SSH en Ansible Server:
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ansible/.ssh/id_rsa):
Created directory '/home/ansible/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ansible/.ssh/id_rsa.
Your public key has been saved in /home/ansible/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:wNt/uNePRkrV+Hhv/DJgteXK2BjOGvPbr9yNigXM2EM ansible@rhel8-ansible-server
The key's randomart image is:
+---[RSA 2048]----+
| |
| . |
| o E o |
| + * + o|
| . S * o * |
| . += + +|
| ==o@ +.|
| OBoO+=|
| +o++*BB|
+----[SHA256]-----+
Cópielo en servidores remotos como usuario ansible:
$ ssh-copy-id ansible@rhel8-ansible-client
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ansible/.ssh/id_rsa.pub"
The authenticity of host 'rhel8-ansible-client (192.168.1.109)' can't be established.
ECDSA key fingerprint is SHA256:e+NfCeK/kvnignWDHgFvIkHjBWwghIIjJkfjygR7NkI.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
ansible@rhel8-ansible-client's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'ansible@rhel8-ansible-client'"
and check to make sure that only the key(s) you wanted were added.
Instalar Ansible
Una vez que se haya instalado Python, proceda a instalar Pip, que es un administrador de paquetes de Python que usaremos para instalar Ansible:
# yum -y install python3-pip
Updating Subscription Management repositories.
Updating Subscription Management repositories.
Last metadata expiration check: 9:03:18 ago on Sun 03 Feb 2019 11:20:51 PM +04.
Package python3-pip-9.0.3-4.el8.noarch is already installed.
Dependencies resolved.
Nothing to do.
Complete!
Una vez que tenemos pip3
instalado, utilícelo para instalar Ansible en el sistema de gestión de Ansible como usuario de ansible.
$ pip3 install ansible --user
Puede ver el Ansible instalado usando el siguiente comando:
$ ansible --version
ansible 2.7.6
config file = None
configured module search path = ['/home/ansible/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /home/ansible/.local/lib/python3.6/site-packages/ansible
executable location = /home/ansible/.local/bin/ansible
python version = 3.6.6 (default, Oct 16 2018, 01:53:53) [GCC 8.2.1 20180905 (Red Hat 8.2.1-3)]
Pruebas y gestión
Cree el archivo de inventario de Ansible, el valor predeterminado es /etc/ansible/hosts
pero puede copiar el archivo de hosts en el directorio de inicio del usuario ansible. También puede crear un grupo de hosts remotos como se muestra a continuación en el archivo de hosts.
[web]
192.168.1.105
[db]
192.168.1.107
[app]
192.168.1.108
192.168.1.109
192.168.1.110
Puede usar el módulo de ping para probar Ansible y, después de una ejecución exitosa, puede ver el siguiente resultado.
$ ansible -i hosts 192.168.1.109 -m ping
192.168.1.109 | SUCCESS => {
"changed": false,
"ping": "pong"
}
La opción -i se utiliza para proporcionar la ruta al archivo de inventario. Debería obtener el mismo resultado para el nombre del grupo "aplicación".
$ ansible -i hosts app -m ping
192.168.1.108 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.1.109 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.1.110 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Conclusión
La simplicidad y la capacidad de Ansible para disminuir la complejidad de otras herramientas lo han convertido en un candidato confiable para su entorno. Su principal preocupación es la seguridad y la fiabilidad. Utiliza OpenSSH para el transporte, y el lenguaje está diseñado en torno a la auditabilidad incluso por aquellos que no están familiarizados con el programa. Ansible es lo suficientemente adecuado para administrar configuraciones pequeñas con un puñado de instancias, así como entornos empresariales.