Enjambre de acopladores es (también conocido como motor Docker en modo enjambre) una solución de agrupación en clúster nativa que convierte un grupo de hosts Docker en un único servidor virtual lógico. Swarm garantiza la disponibilidad y el alto rendimiento de su aplicación al distribuirla entre la cantidad de hosts Docker dentro de un clúster.
Además, con Docker Swarm, puede escalar su aplicación horizontalmente, es decir, aumentar el número de instancias de contenedor para la misma aplicación.
Nuestra Infraestructura
Para la demostración, estoy usando un entorno de sistema operativo mixto:
Nombre de host | Dirección IP | Sistema Operativo | Propósito |
dockerm.itgeek.local | 192.168.12.10 | CentOS 7 | Actúa como un administrador de Docker que administra el motor de Docker que se ejecuta en los nodos. Docker Manager también formará parte de un clúster, es decir, también ejecutará contenedores. |
nodo1.itzgeek.local | 192.168.12.20 | Ubuntu 16.04 | Nodo trabajador 1 (motor de Docker en ejecución) |
nodo2.itzgeek.local | 192.168.12.30 | Fedora 26/25 | Nodo trabajador 2 (motor de Docker en ejecución) |
El enjambre Docker era anteriormente una herramienta separada. Ahora está integrado con el motor Docker de v 1.12 . Entonces, solo puede instalar Motor Docker en todos sus hosts (Administrador y nodos trabajadores ).
LEER :Cómo instalar Docker Community Edition en CentOS 7/RHEL 7
LEER :Cómo instalar Docker Community Edition en Ubuntu 16.04
LEER :Cómo instalar Docker Community Edition en Fedora 26/Fedora 25
Cortafuegos
Deberá abrir los siguientes puertos en el firewall para que un clúster de enjambre funcione correctamente.
CentOS / Fedora:
firewall-cmd --permanent --add-port=7946/tcp
firewall-cmd --permanent --add-port=4789/udp
firewall-cmd --permanent --add-port=7946/udp
firewall-cmd --permanent --add-port=2376/tcp
firewall-cmd --permanent --add-port=2377/tcp
firewall-cmd --permanent --add-port=80/tcp ## We are Testing Docker Swarm with WebService
firewall-cmd --reload
Ubuntu:
ufw status
ufw allow 2376/tcp
ufw allow 7946/tcp
ufw allow 7946/udp
ufw allow 2377/tcp
ufw allow 4789/udp
ufw allow 80/tcp ## We are Testing Docker Swarm with WebService
ufw reload
ufw enable
Reinicie el motor de Docker después de haber abierto los puertos necesarios, ya que la cadena de firewall afecta las reglas de Docker.
systemctl restart docker
De aquí en adelante, todos los comandos mencionados son comandos universales de Docker, por lo que puede ejecutar el comando en cualquier sistema operativo compatible con Docker (en nuestro caso, CentOS 7 , Ubuntu 16.04 y Fedora 26/25 ).
Crear un enjambre
Iniciemos la creación de un clúster usando “swarm init “. Ejecute el siguiente comando en su nodo de administrador (dockerm.itzgeek.local ).
[root@dockerm ~]# docker swarm init --advertise-addr 192.168.12.10
–advertise-addr La opción especifica el nodo administrador para publicar su dirección como 192.168.12.10 para que el nodo trabajador pueda unirse al clúster.
Salida:
Swarm initialized: current node (uhh38rpazd5tnzjph2g5rhgxy) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-5y1u36a0osykywxeme2akpjp4jgx2l67mbqbc4fnazs39bp314-e6djx8ma2qnevolztpplkn26j \
192.168.12.10:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
El resultado anterior tiene el token para agregar nodos trabajadores al clúster.
Vea el estado actual del enjambre usando el siguiente comando.
[root@dockerm ~]# docker info
Salida:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 17.03.1-ce
Storage Driver: devicemapper
Pool Name: docker-253:1-297-pool
. . .
. . .
Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
Library Version: 1.02.135-RHEL7 (2016-11-16)
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Swarm: active
NodeID: uhh38rpazd5tnzjph2g5rhgxy
Is Manager: true
ClusterID: kp8tgowwcuiv3om0wzfgpngp7
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
Node Address: 192.168.12.10
Manager Addresses:
192.168.12.10:2377
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 4ab9917febca54791c5f071a9d1f404867857fcc
runc version: 54296cf40ad8143b62dbcaa1d90e520a2136ddfe
init version: 949e6fa
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-123.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 979.9 MiB
Name: dockerm.itzgeek.local
ID: OTNI:UJZA:7CC4:TS5N:TVJ7:XXQE:5J7Q:ENWW:ZVPD:3VJI:F5DL:JYSP
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
Puede enumerar los nodos de Docker en el enjambre con el siguiente comando.
[root@dockerm ~]# docker node ls
Salida:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
uhh38rpazd5tnzjph2g5rhgxy * dockerm.itzgeek.local Ready Active Leader
Páginas:1 2