Cómo migrar el volumen de datos del contenedor al segundo host con Flocker
Flocker es un software gratuito y de código abierto para administrar el volumen de datos del contenedor en aplicaciones acopladas. En la tecnología de Docker nativa, si migramos un contenedor de un servidor a otro servidor nuevo, el volumen de datos se deja atrás mientras que solo se mueve el contenedor. Pero con el avance de la tecnología y el gran desarrollo de la tecnología Docker, nació una nueva plataforma llamada Flocker. No solo mueve contenedores, sino que también ayuda a migrar el contenedor y el volumen de datos juntos. Esto hace que el volumen de datos de flocker, que también se conoce como conjunto de datos, sea bastante portátil y se pueda utilizar con cualquier contenedor del clúster. Esta característica clave de Flocker hace que sea muy popular entre el equipo de operaciones ejecutar servicios con estado en contenedores, como bases de datos en producción. Este tutorial trata sobre cómo podemos migrar un contenedor de un servidor a otro junto con el volumen de datos.
Aquí hay algunos pasos sobre cómo podemos migrar un contenedor con volumen de datos de un servidor a otro usando Flocker.
Prerrequisitos
En primer lugar, antes de comenzar, tendremos que cumplir con algunas cosas esenciales. Necesitaremos tener 3 nodos para hacer este trabajo. Primero tendremos un nodo cliente en el que almacenaremos los archivos de configuración y ejecutaremos flocker-cli. Un nodo cliente puede ser nuestra propia computadora portátil, computadora de escritorio o cualquier otra computadora o incluso un servidor. A continuación, necesitaremos otros 2 nodos en los que ejecutaremos los contenedores de la ventana acoplable usando flocker y moveremos un contenedor en ejecución junto con su volumen de datos sin ninguna interrupción. A continuación se muestran los sistemas que vamos a configurar con su dirección IP que ejecutan Ubuntu 15.04 como su sistema operativo y están en el mismo clúster flocker.
| Nodo de cliente 0 | Nodo de contenedor 1 | Nodo contenedor 2 |
|---|---|---|
| 104.130.26.196 | 104.130.169.227 | 104.130.26.245 |
Una vez que hayamos terminado con la configuración del clúster de flocker, ahora vamos a ejecutar un contenedor de la ventana acoplable usando flocker.
1. Crear archivo de aplicación
Ahora crearemos un archivo de composición de la ventana acoplable o un archivo de aplicación que definirá los contenedores que queremos ejecutar con sus respectivas configuraciones, como la imagen de la ventana acoplable, el nombre, los puertos, el volumen de datos y más. Crearemos el archivo YAML usando un editor de texto y bajo la estructura de docker compose. Para hacerlo, ejecutaremos el siguiente comando, iniciaremos un editor de texto y crearemos un archivo docker-compose.yml en el Nodo 0.
# nano docker-compose.yml
Después de abrir el editor de texto, ahora agregaremos el archivo como se muestra a continuación.
web:
image: clusterhq/flask
links:
- "redis:redis"
ports:
- "80:80"
redis:
image: redis:latest
ports:
- "6379:6379"
volumes: ["/data"]

La configuración anterior define que al ejecutar la configuración anterior, creará 2 contenedores, uno llamado web y otro redis. El web ejecutará un contenedor a partir de una imagen. clusterhq / flash y se expondrá en el puerto 80, mientras que redis ejecutará un contenedor de la última versión de image redis y se expondrá en el puerto 6379 con el volumen de datos en el directorio / data.
2. Creación de un archivo de implementación
A continuación, crearemos otro archivo llamado flocker-deploy1.yml en el que definiremos la parte más importante de nuestro tutorial, definiremos dónde se implementarán esos contenedores. Aquí, definiremos la implementación de los contenedores Python Web App (FLASK) y Redis Database Server bajo el mismo host, es decir, el Nodo 1. Para hacerlo, ejecutaremos el siguiente comando para abrir el editor de texto.
# nano flocker-deploy1.yml
Después de abrir, agregaremos el archivo YAML como se muestra a continuación.
"version": 1
"nodes":
"104.130.169.227": ["web", "redis"]
"104.130.26.245": []

Luego, simplemente guardaremos el archivo y saldremos.
En el archivo YAML anterior, hemos definido ejecutar ambos contenedores, es decir, web y redis, para que se ejecuten bajo el mismo host, es decir, el nodo 1 sin ejecutar nada debajo del nodo 2.
3. Implementación de contenedores
Una vez que hayamos creado esos archivos, ahora implementaremos los contenedores usando esos archivos YAML. Para hacerlo, simplemente necesitaremos ejecutar el siguiente comando bajo sudo o privilegio de root.
# flocker-deploy control-service flocker-deploy1.yml docker-compose.yml The cluster configuration has been updated. It may take a short while for changes to take effect, in parti cular if Docker images need to be pulled.
![]()
Se nos indicará que puede llevar algún tiempo implementar los contenedores como se define en la configuración anterior. Como hemos definido en la configuración anterior, tanto FLASK como Redis deben ejecutarse bajo el mismo host, es decir, el Nodo 1. Por lo tanto, ingresaremos al Nodo 1 para verificar si está ejecutando ambos contenedores o no.
4. Inspección de contenedores Docker
Para verificar si el Nodo 1 está ejecutando ambos contenedores o no, veremos la lista de contenedores Docker en ejecución en el Nodo 1. Podemos hacerlo mediante un túnel SSH en el Nodo 1, que tiene la dirección IP como 104.130.169.227 y ejecuta Docker. comando para ver la lista de contenedores en ejecución. Para hacerlo, necesitaremos ejecutar el siguiente comando.
# ssh root@104.130.169.227 docker ps

5. Prueba de la aplicación
Una vez que tengamos esos contenedores en funcionamiento, seguramente querremos probar la aplicación que se ejecuta en el Nodo 1. Para hacerlo, abriremos esas direcciones IP usando un navegador web. Cuando navegamos por http://104.130.169.227/, veremos que se muestra el recuento de visitas, mientras que cuando navegamos por http://104.130.26.245/, veremos que el recuento de visitas persiste porque Flocker enruta el tráfico desde cualquier nodo definido en el archivo de implementación al que tiene la aplicación. Hace posible que flocker mueva nuestros contenedores y sus volúmenes por el clúster sin tener que actualizar ninguna configuración de DNS o aplicación.

6. Recreación del archivo de implementación
Ahora, finalmente reescribiremos el archivo de implementación para mover el contenedor con su volumen de datos. Crearemos un nuevo archivo o editaremos el archivo anterior, lo agregaremos y lo guardaremos como flocker-deploy2.yml.
# nano flocker-deploy2.yml
Luego, agregaremos el archivo como se muestra a continuación.
"version": 1
"nodes":
"104.130.169.227": ["web"]
"104.130.26.245": ["redis"]

Esto definirá el contenedor web para que se ejecute en el nodo 1 y el contenedor Redis para que se ejecute en el nodo 2.
7. Mover contenedor con volumen de datos
Finalmente, ahora implementaremos el archivo YAML de implementación recién creado que migrará el contenedor redis en ejecución del Nodo 1 al Nodo 2, incluido su volumen de datos. Esto mantendrá el contenedor web en el mismo nodo que antes, es decir, el Nodo 1 sin afectar la aplicación.
# flocker-deploy control-service flocker-deploy2.yml docker-compose.yml The cluster configuration has been updated. It may take a short while for changes to take effect, in particular if Docker images need to be pulled.

8. Inspección de la migración
Para comprobar si el contenedor de redis se ha migrado realmente o no, podemos verlo enumerando los contenedores en ejecución en esos nodos. Primero, veremos en el Nodo 2 si el servidor redis se migra o no a través de un túnel SSH ejecutando el siguiente comando.
# ssh root@104.130.26.245 docker ps

Como podemos ver, solo hay un contenedor de servidor Redis ejecutándose en este nodo, mientras que el contenedor web no se está ejecutando en este nodo.
Ahora, para verificar, veremos qué contenedores se están ejecutando en el Nodo 1.
# ssh root@104.130.169.227 docker ps

Y finalmente, vemos que no hay ningún servidor Redis ejecutándose en este nodo, mientras que solo hay un contenedor web ejecutándose.
9. Comprobación de la aplicación
Ahora comprobaremos si la aplicación está funcionando bien como se esperaba o no. Para hacerlo, abriremos un navegador web y lo señalaremos a ambos nodos, es decir, http://104.130.169.227/ y http://104.130.26.245/. Aquí, vemos que el recuento aún persiste mientras apunta al Nodo 1, aunque el contenedor con el volumen se ha movido entre hosts. Y también vemos que el recuento de visitas aún persiste en el Nodo 2 a pesar de que la aplicación ya no se ejecuta en ese host. Esto verifica que el contenedor de Redis se haya migrado correctamente con su volumen de datos.

Conclusión
Este tutorial trata sobre cómo podemos migrar fácilmente un contenedor con su volumen de datos en un clúster flocker de un host a otro dentro del mismo clúster. Flocker se puede utilizar con administradores de contenedores populares o herramientas de orquestación como Docker Engine, Docker Swarm, Docker Compose y en diferentes plataformas como Amazon AWS, RackSpace, OpenStack, Vagrant. Si tiene alguna pregunta, sugerencia o comentario, escríbalos en el cuadro de comentarios a continuación para que podamos mejorar o actualizar nuestro contenido. Gracias !