LINUX

Cómo configurar la herramienta de automatización Ansible en CentOS 7

Hola y bienvenido a nuestro artículo sobre la herramienta de automatización Ansible que es similar a Chef o Puppet. En primer lugar, Ansible es fácil de instalar, configurar y comprender. En TI, es muy importante mantener sus sistemas y procesos muy simples. Ansible se utiliza para la administración de la configuración que ayuda a configurar sus servidores web y de aplicaciones y facilita la versión de sus archivos y también puede usarlo para administrar diferentes configuraciones en sus entornos de desarrollo, preparación y producción. También se utiliza para la implementación de aplicaciones. Puede automatizar completamente las implementaciones de aplicaciones de varios niveles que pueden manejar múltiples servidores de grupos y bases de datos.

Ansible usa SSH para conectarse a los servidores y ejecutar las Tareas configuradas conectándose a los clientes a través de SSH, sin necesidad de configurar ningún agente especial. Todo lo que necesita es una python y un usuario que pueda iniciar sesión y ejecutar los scripts, luego Ansible comienza a recopilar datos sobre la máquina, como qué sistema operativo y paquetes están instalados y qué otros servicios están ejecutando, etc.Después de eso, Ansible ejecuta los libros de jugadas en formato de archivo YAML , los libros de jugadas son un conjunto de comandos que pueden realizar múltiples tareas.

Prerrequisitos

En este tutorial, instalaremos y configuraremos Ansible en CentOS 7 y administraremos sus dos nodos para comprender su funcionalidad.

En nuestro entorno de prueba, utilizaremos tres máquinas virtuales Linux CentOS 7, una para controlar dónde está instalado el servidor Ansible y dos nodos que serán administrados por esta máquina controladora a través de SSH. Asegúrese de tener Python 2.6 o 2.7 instalado en sus nodos de control y cliente para una instalación exitosa de Ansible.

Conéctese a su servidor de control utilizando un usuario root o un usuario no root con privilegios sudo para comenzar con Ansible.

Configurar el repositorio de EPEL

Primero necesitamos habilitar el repositorio ‘epel’ para CentOS 7 en el servidor de control porque el paquete Ansible no está disponible en los repositorios yum predeterminados.

Para habilitar el repositorio EPEL en CentOS 7 / RHEL 7, escriba:

# yum install epel-release

Instalación de Ansible

Ahora podemos instalar Ansible en CentOS 7 usando el comando ‘yum’ que lo instalará incluyendo sus dependencias requeridas eligiendo la tecla ‘y’ para proceder como se muestra.

# yum install ansible

instalando ansible

Una vez que haya instalado Ansible con éxito, puede verificar y verificar su versión instalada usando el siguiente comando.

# ansible --version

Versión Ansible

Autenticación SSH basada en claves con nodos

Para realizar cualquier implementación / administración desde el ‘localhost’ al host remoto, primero necesitamos generar claves en el servidor Ansible y copiar la clave pública a los nodos del cliente. Ejecute el siguiente comando en su servidor Ansible para generar sus claves públicas y privadas.

# ssh-keygen -t rsa -b 4096

ssh keygen

Después de generar la clave SSH, ahora cópiela en el servidor remoto usando el siguiente comando para colocar claves SSH en hosts remotos.

# ssh-copy-id root@node1_ip

Si está utilizando un puerto ssh personalizado, menciónelo utilizando el parámetro ‘-p’ en su comando. Se le pedirá la contraseña de su nodo cliente, una vez que haya proporcionado la contraseña correcta de su nodo cliente, se autorizará con éxito.

# ssh-copy-id -p2178 root@node1_ip
The authenticity of host '[72.25.70.83]:2178 ([72.25.70.83]:2178)' can't be established.
ECDSA key fingerprint is 49:8a:9c:D9:35:le:09:3d:5f:31:43:a1:41:94:70:53.
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
Authorized uses only. All activity may be  monitored and reported.
root@72.25.70.83's password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh -p '2178' 'root@72.25.70.83'"
and check to make sure that only the key(s) you wanted were added.

También puede agregar manualmente la clave rsa pública de su servidor de control a los nodos clinet. Para hacerlo, inicie sesión en su nodo cliente y siga los pasos a continuación.

Primero copie la clave del archivo ‘/root/.ssh/id_rsa.pub’ y guárdela en el nodo cliente dentro del directorio de inicio de su servidor o cualquier otro usuario que desee autenticar.

[root@centos-7 .ssh]# cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAPNRNS/BVcT7XqHDuSvd8oncAjbNl2ZiYiU22MCNFKN8p/cgcblOZoZS0gjlQHpQLR1wm5hVu7PcxY/JAFX2phKyeZ+dbfQlAQ7HLRaaXWfuonelWgTCcs530bSg6XP3MTDRWjW0ZEFTLaOqVz+Yq2nUP3xRYmRKYNq2PhPRrkoBxnDGlmAsgGDm4gWz2TGE59uYHuXvY2Ys4OPeMFHAp0blR5nJIfVF40RB4uH0U79pp19qZ0vbghEvYUiyD4NMjqG13Ba4YYBQQIphe4GA3OTjBvjVmnmBCWZyDOcO+bWWyyKpabEEZOga3KnsoTw4iQ+d+iUyhPTZOvXaoOFUmrFQo5wWG229/GMJnYe1Qv0D3K3CcAQ== root@centos-7
[root@node2 ~]# vi .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAPNRNS/BVcT7XqHDuSvd8oncAjbNl2ZiYiU22MCNFKN8p/cgcblOZoZS0gjlQHpQLR1wm5hVu7PcxY/JAFX2phKyeZ+dbfQlAQ7HLRaaXWfuonelWgTCcs530bSg6XP3MTDRWjW0ZEFTLaOqVz+Yq2nUP3xRYmRKYNq2PhPRrkoBxnDGlmAsgGDm4gWz2TGE59uYHuXvY2Ys4OPeMFHAp0blR5nJIfVF40RB4uH0U79pp19qZ0vbghEvYUiyD4NMjqG13Ba4YYBQQIphe4GA3OTjBvjVmnmBCWZyDOcO+bWWyyKpabEEZOga3KnsoTw4iQ+d+iUyhPTZOvXaoOFUmrFQo5wWG229/GMJnYe1Qv0D3K3CcAQ== root@centos-7

Guarde y salga del archivo y podrá acceder a ambos nodos de cliente desde el servidor de control sin pedir la contraseña de root.

[root@centos-7 ~]# ssh -p 2178 root@node1_ip
[root@centos-7 ~]# ssh -p 2178 root@node2_ip
[root@centos-7 .ssh]# ssh -p 2178 root@72.25.10.83
Authorized uses only. All activity may be  monitored and reported.
Last login: Sun Mar 27 21:42:09 2016 from 12.1.0.90

[root@node1 ~]# exit
logout
Connection to 72.25.10.83 closed.

[root@centos-7 .ssh]# ssh -p 2178 root@72.25.10.84
The authenticity of host '[72.25.10.84]:2178 ([72.25.10.84]:2178)' can't be established.
ECDSA key fingerprint is 49:8a:3c:85:55:61:79:1d:1f:21:33:s1:s1:fd:g0:53.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[72.25.10.84]:2178' (ECDSA) to the list of known hosts.
Authorized uses only. All activity may be  monitored and reported.
Last login: Sun Mar 27 22:03:56 2016 from 12.1.0.90
[root@node2 ~]#
[root@node2 ~]# exit
logout
Connection to 72.25.10.84 closed.

Creación de inventario de hosts remotos

Después de configurar la autenticación de claves SSH entre el servidor Ansible y sus nodos cliente, ahora configuraremos esos hosts remotos en el servidor de control Ansible editando el archivo ‘/ etc / ansible / hosts’. Este archivo contiene el inventario de hosts remotos a los que Ansible necesita conectarse a través de SSH para administrar los sistemas.

Abra el archivo usando cualquiera de sus editores para configurarlo.

[root@centos-7 ~]# vim /etc/ansible/hosts

Hosts Inventry

Aquí, en el archivo de configuración, hemos configurado ambos nodos cliente para usar el puerto ‘2178’, si usa el puerto ssh predeterminado, simplemente ingresará la dirección IP de su host.

Después de guardar el archivo, ejecutemos el siguiente comando ansible con las opciones ‘-m’ para que el módulo verifique la conectividad desde el servidor Ansible a los servidores remotos.

# ansible -m ping 72.25.10.83
# ansible -m ping 72.25.10.73

Prueba de conectividad

También puede usar el comando belo para hacer ping a todos sus hosts configurados.

[root@centos-7 ~]# ansible all -m ping
72.25.10.83 | success >> {
"changed": false,
"ping": "pong"
}

72.25.10.73 | success >> {
"changed": false,
"ping": "pong"
}

Ejecución de comandos remotos

En los ejemplos anteriores, acabamos de utilizar el módulo de ping para hacer ping a los hosts remotos. Hay varios módulos disponibles para ejecutar comandos en hosts remotos. Ahora usaremos el módulo ‘comando’ con el comando ‘ansible’ para obtener información de la máquina remota como información del nombre de host del sistema, espacio libre en disco y tiempo de actividad como se muestra.

# ansible -m command -a 'hostnamectl' 72.25.10.83
# ansible -m command -a 'df -h' 72.25.10.83
# ansible -m command -a 'uptime' 72.25.10.83

Comandos remotos Ansible

De manera similar, puede ejecutar muchos comandos de shell usando ansible en el host de un solo cliente, así como en el grupo de sus hosts similares, como si hubiera configurado un grupo de ‘servidores web’ en su archivo de inventario de host ansible, entonces ejecutará el comando como esto.

# ansible -m command -a "uptime" web-servers

Creación de libros de jugadas en Ansible

Los Playbooks son scripts de administración de configuración de Ansible que se utilizan para administrar configuraciones e implementaciones en máquinas remotas. Los libros de jugadas contienen un conjunto de políticas que desea que se implementen en sus sistemas remotos.

Creemos su primer libro de jugadas con el nombre del archivo como ‘httpd.yml’, luego configuraremos un host para ejecutar un servidor web apache. Aquí elegirá las configuraciones a qué máquinas de su infraestructura apuntar y qué usuario remoto completará las tareas como se muestra en el archivo de configuración.

[root@centos-7 ~]# vi httpd.yml
---
- hosts: 72.25.10.83
  remote_user: root
  tasks:
  - name: Installing Latest version of Apache
    yum: pkg=httpd state=latest
  - name: Copying the demo file
    template: src=/etc/ansible/index.html dest=/var/www/html
              owner=apache group=apache mode=0644
  - name: (Enable it on System Boot)
    service: name=httpd enabled=yes
    notify:
      - start apache
  handlers:
    - name: start apache
      service: name=httpd state=started

Guarde y cierre el archivo y luego cree un archivo html de demostración que se colocará en la raíz del documento predeterminada de los hosts remotos.

[root@centos-7 ~]# vi /etc/ansible/index.html
Installing Apache by Ansible

Apache Web Server is installed by Ansible

Congratulations, Apache is managed through Ansible

Comprensión de las configuraciones de Playbook

Como hemos creado nuestro primer libro de jugadas, ahora es importante comprender cómo funciona. Todos los archivos YAML deben comenzar con (tres guiones) ‘—‘, que indica el comienzo de un documento. Luego, la línea de hosts es una lista de uno o más grupos o patrones de host separados por dos puntos. Puede mencionar la cuenta de usuario remoto junto con el host.

---
- hosts: 72.25.10.83
  remote_user: root

Luego tenemos un conjunto de tareas, donde cada jugada contiene una lista de tareas, que se ejecutan en orden, una a la vez, en todas las máquinas que coinciden con el patrón de host, antes de pasar a la siguiente tarea.

tasks:
- name: Installing Latest version of Apache
  yum: pkg=httpd state=latest
- name: Copying the demo file
  template: src=/etc/ansible/index.html dest=/var/www/html
            owner=apache group=apache mode=0644
- name: (Enable it on System Boot)
  service: name=httpd enabled=yes

Cada tarea debe tener un nombre, que se incluye en el resultado. Este es un resultado para nosotros, por lo que es bueno tener descripciones razonablemente buenas de cada paso de la tarea. Entonces, nuestra Primera tarea instalará la última versión de apache, la segunda copiará la demostración html (/etc/ansible/index.html) al directorio / var / www / html de hosts remotos y la tercera permitirá el inicio automático del servicio apache durante el arranque del sistema.

Después de eso, las acciones de ‘notificación’ se activan al final de cada bloque de tareas en un libro de jugadas, y solo se activarán una vez, incluso si se notifican mediante varias tareas diferentes.

notify:
  - start apache

El elemento ‘notificar’ contiene un elemento llamado «iniciar apache». Esta es una referencia a un controlador, que puede realizar ciertas funciones cuando es llamado desde dentro de una tarea. Definiremos el controlador «iniciar apache» a continuación.

handlers:
  - name: start apache
    service: name=httpd state=started

Los controladores son listas de tareas que solo se ejecutan cuando una tarea les ha dicho que se han producido cambios en el sistema cliente. Como tenemos un controlador que inicia el servicio apache después de que se instala el paquete.

Ejecución de Playbook en Ansible

Después de configurar la configuración de su libro de jugadas, puede ejecutar su libro de jugadas usando el siguiente comando.

# ansible-playbook -l 72.25.10.83 httpd.yml

ejecutar el libro de jugadas

Después de esto, abra su navegador y navegue hasta la dirección IP de su host remoto mencionado en el inventario de ansible.

http://your_client_node_ip/

Apache con Ansible

Por lo tanto, si obtiene la página anterior, significa que ha instalado correctamente apache con el libro de jugadas de Ansible. De la misma manera, puede crear muchos libros de jugadas para instalar sus aplicaciones complejas en múltiples hosts.

Conclusión

Ansible es bastante interesante y muy fácil, ligero. Se puede poner en marcha fácilmente en 5 minutos. Por lo tanto, ha instalado Ansible en CentOS 7 con éxito y ha aprendido su uso básico para crear un libro de jugadas simple para la automatización de la instalación de Apache. Espero que le haya resultado útil en la automatización de sus tareas.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar