¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Ansible
  3. Comprobar Ansible con Docker
Extrait - Ansible Administre la configuración de sus servidores y el despliegue de sus aplicaciones
Extractos del libro
Ansible Administre la configuración de sus servidores y el despliegue de sus aplicaciones Volver a la página de compra del libro

Comprobar Ansible con Docker

Objetivos del capítulo y requisitos

1. Contexto y requisitos

Ansible es una herramienta cuya vocación es la administración de máquinas clásicas (virtuales o físicas). Puede presentarse el problema de no poder disponer de máquinas virtuales para realizar sus tests. Este requisito puede resultar también complicado para las personas que solamente tengan un conocimiento superficial de los problemas relacionados con los sistemas operativos.

Docker puede responder a esta necesidad de simplificación. Puede disponer rápidamente de contenedores basados en cualquier sistema operativo del mercado. 

Tenga en cuenta que un contenedor no equivale a una máquina clásica. La razón de este capítulo es presentarle una técnica que le permitirá simular infraestructuras clásicas. Esto no constituye una buena práctica para los entornos en producción.

Estudiaremos un ejemplo para ver cómo Ansible puede tomar en cuenta el ciclo de vida de las imágenes y contenedores Docker.

A partir de ahora configurará un motor Docker. Esta instalación se vio en el capítulo sobre la implementación de tests con Ansible (especialmente en la parte de Molecule). No dude en volver a ese capítulo si lo considera necesario.

2. Archivos para descargar

Puede encontrar los ejemplos de los directorios inventarios y variables en el archivo comprimido...

Ansible, Docker y Systemd

En una distribución Linux, la gestión del inicio del sistema reposa en un programa un poco particular: init. Desde hace unos años, las distribuciones usan un nuevo mecanismo llamado Systemd.

Este nuevo programa aporta muchos cambios y se apoya, especialmente, en funciones propias del núcleo (kernel) de Linux para poder funcionar. De esta manera puede beneficiarse de las nuevas funciones, como por ejemplo:

  • la asignación fina de recursos;

  • un monitoreo mejorado;

  • la simplificación de la creación de servicios de sistema.

Cuando quiera lanzar un servicio, Ansible se apoyará en Systemd para realizar esas operaciones.

1. ¿Cómo hacer convivir a Docker y Systemd?

Sin embargo, por defecto, Systemd no funciona muy bien dentro de un contenedor Docker. Systemd necesita tener acceso a algunos recursos del kernel (cgroups) y, por lo tanto, ser ejecutado con privilegios elevados. Sin embargo, por razones de seguridad, Docker reduce los permisos de los programas que se ejecutan en un contenedor con ayuda de mecanismos basados en el uso de cgroups.

Para poder ejecutar Systemd en un contenedor, hay que realizar algunas operaciones: 

  • Creación de un punto de montaje de tipo tmpfs para /tmp y /run.

  • Ejecutar el proceso init de System D (/sbin/init).

  • Activación del modo privileged (en función del tipo de máquina).

  • Montaje del directorio /run y /sys/fs/cgroup de la máquina principal en el contenedor como solo lectura.

El modo privilegiado ya no es obligatorio en el caso de los contenedores CentOS (campo privileged). Sin embargo, este privilegio sigue siendo necesario en el caso de los contenedores de tipo Debian/Ubuntu.

2. Elección de las imágenes para lanzar

Otro punto de importante para tener en cuenta: use una imagen que le permita gestionar el inicio de los servicios. Ya que este libro siempre toma como ejemplo las dos principales familias de distribuciones, deberá elegir entre las imágenes siguientes:

  • centos: la imagen CentOS contiene, por defecto, todo lo necesario para iniciar y hacer funcionar Systemd en un contenedor.

  • jrei/systemd-ubuntu: disponible en las versiones 16.04 y 18.04, contiene la configuración mínima para hacer funcionar Systemd en un contenedor para una distribución de la familia Debian/Ubuntu.

La gran ventaja que proporciona el uso de esas imágenes...

Las imágenes Docker

1. Presencia del intérprete de Python

 Vuelva a ejecutar la creación de los contenedores con el comando siguiente:

$ ansible-playbook -i docker.inv create-docker-container.yml 

Los contenedores están listos ahora para ser usados. El test de la comunicación se hará gracias al comando siguiente:

$ ansible -i docker.yml -m ping all 

Como todos los contenedores contienen un intérprete de Python, la comunicación deberiá llevarse a cabo sin problemas, incluso en el caso del contenedor Ubuntu que tiene un intérprete de Python 3:

mysql1 | SUCCESS => { 
    "ansible_facts": { 
        "discovered_interpreter_python": "/usr/libexec/platform-python" 
    }, 
    "changed": false, 
    "ping": "pong" 
} 
... 
haproxy1 | SUCCESS => { 
    "ansible_facts": { 
        "discovered_interpreter_python": "/usr/bin/python3" 
    }, 
    "changed": false, 
    "ping": "pong" 

2. Gestión de Docker con la ayuda de Ansible

a. Introducción

El siguiente ejercicio es un ejemplo sencillo que no pretende presentarle el funcionamiento completo de Docker. Algunos aspectos, como la noción de registro, servicio o stack de Docker no serán abordados. Si quiere profundizar en esos temas, no dude en consultar al libro de Jean-Philippe Gouigoux sobre Docker (publicado en Ediciones ENI).

b. Idempotencia e inmutabilidad

El principio de funcionamiento de Ansible se basa en la noción de idempotencia. En cuanto a Docker, este usa más bien la noción de inmutabilidad. Detrás de estas dos palabras se esconden dos conceptos distintos:

  • actualización a través de la modificación de los componentes del sistema;

  • actualización por supresión/creación de los componentes del sistema.

Cada principio tiene sus ventajas e inconvenientes. En el caso de Ansible, el método de trabajo es más o menos el mismo y también es bastante simple continuar usando máquinas virtuales tradicionales. Para su puesta en marcha, Docker necesita generalmente evoluciones importantes...