Docker Swarm, también conocido como motor Docker en modo Swarm, es una nueva herramienta de agrupación y orquestación para contenedores Docker que se utiliza para administrar un grupo de hosts Docker.

En este artículo presentamos Docker en Docker 1.12. Permite la suma y resta de contenedores en el proceso de cálculo.

Docker Swarm consta de dos componentes principales:

Nodo administrador: Se ocupa de la gestión de tareas del clúster, como la programación de servicios, el mantenimiento del estado de los clústeres y el aprovisionamiento de puntos finales en el modo enjambre de Docker.

Nodo trabajador: Se utiliza para ejecutar el contenedor del clúster.

En este tutorial aprenderá más sobre la instalación y configuración del Docker Swarm Mode en CentOS 7. En este artículo usaremos tres CentOS 7 para instalar e iniciar el motor Docker. De estos, dos servidores actúan como nodos de trabajo o motores de ventana acoplable y el restante es un administrador.

requisitos

En este caso, necesitamos lo siguiente:

  • Una computadora local instalada con Docker. La máquina puede funcionar con Windows, Linux o macOS.
  • Tres servidores con CentOS 7 completamente instalado, un servidor es el nodo administrador y los otros dos servidores son el nodo trabajador.
  • Usamos la siguiente dirección IP: 172.168.0.101 para el nodo administrador, 172.168.0.102 para el nodo trabajador 1 y 172.168.0.103 para el nodo trabajador 2.

Inicie sesión en https://ecs.console.aliyun.com/?spm=a3c0i.o25424en.a3.13.388d499ep38szx y seleccione CentOS 7. Después de iniciar sesión, ejecute el siguiente comando para asegurarse de que el sistema tenga los últimos paquetes disponibles:

yum update -y

Empezando

Antes de comenzar el proceso, asegúrese de configurar el archivo / etc / hosts en cada nodo para que sea más fácil comunicarse entre sí mediante nombres de host.

Utilice el siguiente comando para actualizar el archivo de hosts:

172.168.0.101dkmanager.example.com dkmanager

172.168.0.102 workernode1.example.com workernode1

172.168.0.103 workernode2.example.com workernode2

Guarde el archivo cuando haya terminado.

Ahora configure el nombre de host de cada nodo según el archivo de hosts.

Ejecute el siguiente comando para cada nodo.

Nodo administrador:

hostnamectl set-hostname managernode

Nodo de trabajador 1:

hostnamectl set-hostname workernode1

Nodo de trabajador 2:

hostnamectl set-hostname workernode2

Paso 1: instalar Docker Engine

Ahora instale la versión de Docker en cada nodo. Configure el sistema de repositorio de Docker y ejecute el siguiente comando en todos los nombres de host.

Haga lo mismo para los dos servidores de nodo trabajador.

Paso 2: configurar el firewall en cada nodo No

El siguiente paso es abrir los puertos en el firewall para asegurarse de que el clúster de enjambre funcione correctamente.

Continúe y ejecute el siguiente comando en todos los nodos:

Reinicie el servicio Docker:

Abra los puertos del firewall en la parte inferior de cada nodo trabajador, luego reinicie el servicio Docker:

Paso 3: inicie el enjambre o grupo

Inicializa el enjambre en su nodo administrador. Para hacer esto, ejecute el siguiente comando.

docker swarm init --advertise-addr 192.168.0.101

Asegúrese de ver el siguiente resultado:

El token generado por la salida anterior ayudará a conectar los nodos de administrador y trabajador

Verifique el estado del administrador con el siguiente comando:

docker info

La salida debería verse así:

Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 17.12.0-ce
Storage Driver: devicemapper
 Pool Name: docker-253:0-618740-pool
 Pool Blocksize: 65.54kB
 Base Device Size: 10.74GB
 Backing Filesystem: xfs
 Udev Sync Supported: true
 Data file: /dev/loop0
 Metadata file: /dev/loop1
 Data loop file: /var/lib/docker/devicemapper/devicemapper/data
 Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
 Data Space Used: 11.8MB
 Data Space Total: 107.4GB
 Data Space Available: 3.817GB
 Metadata Space Used: 581.6kB
 Metadata Space Total: 2.147GB
 Metadata Space Available: 2.147GB
 Thin Pool Minimum Free Space: 10.74GB
 Deferred Removal Enabled: true
 Deferred Deletion Enabled: true
 Deferred Deleted Device Count: 0
 Library Version: 1.02.140-RHEL7 (2017-05-03)
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: active
 NodeID: viwovkb0bk0kxlk98r78apopo
 Is Manager: true
 ClusterID: ttauawqrc8mmd0feluhcr1b0d
 Managers: 1
 Nodes: 1
 Orchestration:
  Task History Retention Limit: 5
 Raft:
  Snapshot Interval: 10000
  Number of Old Snapshots to Retain: 0
  Heartbeat Tick: 1
  Election Tick: 3
 Dispatcher:
  Heartbeat Period: 5 seconds
 CA Configuration:
  Expiry Duration: 3 months
  Force Rotate: 0
 Autolock Managers: false
 Root Rotation In Progress: false
 Node Address: 192.168.0.102
 Manager Addresses:
  192.168.0.102:2377
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 89623f28b87a6004d4b785663257362d1658a729
runc version: b2567b37d7b75eb4cf325b77297b140ea686ce8f
init version: 949e6fa
Security Options:
 seccomp
  Profile: default
Kernel Version: 3.10.0-693.11.1.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 1.102GiB
Name: centOS-7
ID: DN4N:BHHJ:6DJ7:SZPG:FJJC:XP6T:23R4:CESK:E5PO:SJ6B:BOST:HZQ5
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

Debería ver la lista completa de nodos presentes en su clúster mediante el siguiente comando:

docker node ls

La salida debería verse así:

Paso 4: agregar nodos de trabajo al nodo de administrador

Agregue los nodos trabajadores al servicio de enjambre de Docker con el siguiente comando:

docker swarm join --token SWMTKN-1
3793hvb71g0a6ubkgq8zgk9w99hlusajtmj5aqr3n2wrhzzf8z-1s38lymnir13hhso1qxt5pqru 192.168.0.101:2377

La salida debe ser:

Ejecute el siguiente comando para verificar el estado de los nodos:

docker node ls

Si el proceso es exitoso, debería obtener el resultado que se muestra a continuación:

En caso de que desee recuperar un token de unión perdido, ejecute el siguiente comando:

docker swarm join-token manager -q

A estas alturas, el modo enjambre de Docker debería ejecutarse correctamente con dos nodos trabajadores.

Paso 5: configure el servicio en modo enjambre

Ahora inicie el servicio en modo enjambre. En este caso iniciamos un servicio web en Docker Swarm Mode con los tres contenedores.

Ejecute el siguiente comando solo desde Docker Manager:

docker service create -p 80:80 --name webservice --replicas 3 httpd

La salida debería verse así:

Ejecute el siguiente comando para verificar el estado de su servicio:

docker service ls

La salida será:

Con el resultado anterior, los contenedores se implementan correctamente en los nodos del clúster. Ahora es más fácil iniciar sesión en el sitio web desde cualquier nodo utilizando las siguientes direcciones de navegador web.

http:// 172.168. 0.101
http://172.168. 0.102
http://172.168. 0.103

Paso 6: probar la autocuración del contenedor

El modo Docker Swarm contiene funciones únicas como la autorreparación del contenedor. En caso de que un contenedor no funcione, el administrador se asegura de que los contenedores de ese nodo en particular se reinicien automáticamente.

Para probar si el proceso está funcionando, eliminaremos un contenedor de workernode2 y averiguaremos si se inicia un nuevo contenedor o no.

Ejecute el siguiente comando para enumerar el ID del contenedor en Workernode2:

docker ps

La salida debería verse así:

Ahora ejecute el siguiente comando para eliminar el contenedor 9b01b0a55cb7:

docker rm 9b01b0a55cb7 -f

Ahora verifique si el nodo administrador aprovisiona un nuevo contenedor:

docker service ps webservice

Ahora puede notar que un contenedor ha fallado y otro contenedor se inició inmediatamente en workernode2:

Paso 7: escale los contenedores hacia arriba y hacia abajo para el servicio

En el clúster de Docker, es posible escalar contenedores hacia arriba y hacia abajo. En este caso, intentemos escalar los contenedores del servicio a 5.

[root@dkmanager ~]# docker service scale webserver=5
webserver scaled to 5
[root@dkmanager ~]#

Verifique nuevamente el estado del servicio con el siguiente comando:

Ahora intentemos reducir el contenedor del servicio a 2:

[root@dkmanager ~]# docker service scale webserver=2
webserver scaled to 2
[root@dkmanager ~]#

Verifique que el proceso se complete con el siguiente comando:

Ahora debería tener un clúster Docker Swarm completamente configurado en CentOS7.

Conclusión

Ahí tienes. Así de fácil es configurar Docker Swarm con la ayuda del nuevo modo Swarm y el motor Docker. Es importante tener en cuenta que una vez completada la configuración, asegúrese de proteger los servidores proporcionando una capa adicional de seguridad. Una característica de seguridad con funciones de firewall y vigilancia es un buen lugar para comenzar.

Consulte los 3 mejores servicios de alojamiento de servidores dedicados: