Cómo configurar un clúster Docker Swarm en Ubuntu 16.04 VPS o un servidor dedicado |

Docker Machine es una herramienta que proporciona soluciones mediante la implementación de un clúster de Docker que se ejecuta en una computadora local o una plataforma en la nube. Puede usar Docker Swarm para mejorar el rendimiento asignándolo a diferentes hosts de Docker en un clúster.
La función de clúster es una función esencial para la alta disponibilidad. Permite al usuario administrar clústeres en lo que se conoce como administrador de clústeres de enjambres. Esto permite al usuario aumentar aún más el número de instancias de contenedor para una sola aplicación.
En este caso, estamos usando Docker 1.12, que no requiere un servicio de descubrimiento externo ya que tiene un almacén de valor de clave de almacenamiento incorporado para este propósito. Intentaremos configurar el clúster Docker Swarm en la versión 16.04 de Ubuntu.
Echemos un vistazo a los nudos
Los clústeres de Docker constan de dos partes principales:
Nodo administrador: Se ocupan de la administración de clústeres, incluido el mantenimiento del estado de los clústeres, la preparación de servicios y el mantenimiento de puntos finales en modo enjambre (API HTTP). Una función importante en el quórum de administradores, en la que se almacenan datos importantes sobre el grupo de enjambres.
Nodo trabajador: Estos ejecutan contenedores. No participa en las decisiones de planificación. Un nodo trabajador debe tener al menos un nodo administrador. Es posible actualizar un nodo trabajador a un nodo administrador si está recibiendo servicio.
Antes de comenzar, asegúrese de que su sistema de repositorio esté actualizado. Utilice el siguiente comando para actualizarlo:
sudo apt-get update -y && sudo apt-get upgrade -y
Una vez que su sistema se haya actualizado con el sistema de repositorio actual, reinicie su computadora para aplicar estas actualizaciones.
Instale la computadora Docker en cada uno de los nodos. Dado que Docker Swarm no existe en el modo estándar de la versión 16.04 de Ubuntu, primero deberá ejecutarlo.
Ejecute el siguiente comando para instalar los paquetes necesarios:
sudo apt-get install apt-transport-https software-properties-common ca-certificates -y
No olvide proporcionar la clave GPG para usar su Docker:
wget https://download.docker.com/linux/ubuntu/gpg && sudo apt-key add gpg
También agregue el repositorio Docker Swarm y actualice el sistema:
sudo echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable" >> /etc/apt/sources.list sudo apt-get update -y
Finalmente, use el siguiente comando para instalar el motor Docker:
sudo apt-get install docker-ce -y
Una vez completada la instalación del motor de Docker, ejecute Docker y déjelo funcionar dentro del tiempo de inicio:
sudo systemctl start docker && sudo systemctl enable docker
En el modo estándar, el demonio de Docker solo puede ejecutarse como usuario root del sistema, por lo que otros usuarios solo pueden acceder a él cuando lo están usando. sudo. A continuación, le indicamos cómo ejecutar su Docker sin sudodeberá crear un grupo unificado llamado Dockers y luego agregar la cantidad de usuarios que desee. Para que el proceso sea exitoso, ejecute el siguiente comando:
sudo groupadd docker && sudo usermod -aG docker dockeruser
Cierre sesión en el sistema y luego inicie sesión para actualizar su membresía. Ejecute el comando para cada nodo individualmente.
Un clúster determinado debe tener al menos un nodo que actúe como nodo administrador. Sin embargo, se deben utilizar tres gerentes para un proceso sin problemas. En este tutorial, tomamos el primer nodo como administrador de enjambre, mientras que los dos nodos restantes representan los nodos trabajadores.
A continuación, debe abrir puertos de red en estos nodos para formar parte de un clúster para que la aplicación funcione correctamente. Si está utilizando el firewall UFW, puede acceder a los siguientes puertos 80, 2377, 2376, 2376, 4789 y 7946. Luego ejecuta el siguiente comando::
sudo ufw allow 2376/tcp && sudo ufw allow 7946/udp && sudo ufw allow 7946/tcp && sudo ufw allow 80/tcp && sudo ufw allow 2377/tcp && sudo ufw allow 4789/udp
Ahora vuelva a cargar el firewall y configúrelo para que comience después de que comience:
sudo ufw reload && sudo ufw enable
Reinicie su sistema Docker para aplicar las nuevas reglas:
sudo systemctl restart docker
En este caso, hemos decidido que nuestro administrador de clústeres es el nodo 1. Por lo tanto, inicie sesión en su nodo de la siguiente manera:
docker-machine ssh node-1
Después de ejecutar este mensaje, el sistema cambiará para indicar que ha iniciado sesión en este nodo. Ejecute el siguiente comando para identificar el nodo como administrador de enjambres:
root@node-1:˜# docker swarm init --advertise-addr node_ip_address
En este caso, nope_ip_address Especifica la dirección IP del nodo.
La salida debería verse así:
Ejecute el siguiente comando para agregar un trabajador a este enjambre:
docker swarm join --token SWMTKN-1-5p5f6p6tv1cmjzq9ntx3zmck9kpgt355qq0uaqoj2ple629dl4-5880qso8jio78djpx5mzbqcfu 192.168.0.103:2377
Para agregar un administrador a este enjambre, ejecute Docker Swarm Join Token Manager y siga las instrucciones.
Este token es útil para agregar nodos al clúster de enjambre en el siguiente proceso. La computadora Docker se une al clúster de enjambre según el token proporcionado para el comando.
Ahora verifique el estado del nodo administrador ingresando el siguiente comando:
docker info
Compruebe si la salida se parece a esto:
Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 17.09.0-ce Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: true 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: iwjtf6u951g7rpx6ugkty3ksa Is Manager: true ClusterID: fo24c1dvp7ent771rhrjhplnu 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.103 Manager Addresses: 192.168.0.103:2377 Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: 06b9cb35161009dcb7123345749fef02f7cea8e0 runc version: 3f2f8b84a77f73d38244dd690525642a72156c64 init version: 949e6fa Security Options: apparmor seccomp Profile: default Kernel Version: 4.4.0-45-generic Operating System: Ubuntu 16.04.1 LTS OSType: linux Architecture: x86_64 CPUs: 1 Total Memory: 992.5MiB Name: Manager-Node ID: R5H4:JL3F:OXVI:NLNY:76MV:5FJU:XMVM:SCJG:VIL5:ISG4:YSDZ:KUV4 Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): false Registry: https://index.docker.io/v1/ Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false
Una vez que se haya configurado el nodo trabajador, agréguelo al clúster.
Empiece por conectarse también Nodo-2 desde su computadora local:
$ docker-machine ssh node-2
Luego completa el comando con el texto your_swarm_token Este es el token que recibió cuando creó el clúster manager_node_ip_address representa la dirección IP del administrador de enjambres:
Una vez que el comando se ejecutó correctamente, verá el siguiente resultado:
Cierre sesión en el nodo 2, inicie sesión en el nodo administrador y ejecute el siguiente comando para listar:
docker node ls
El nodo trabajador debería verse así:
Ahora que ha instalado con éxito Docker Swarm, es hora de probar el contenedor y ver cómo lo maneja Swarm Manager.
Configure un servicio web en su nodo administrador con el siguiente comando:
docker service create --name webserver -p 80:80 httpd
Con este comando, queremos mapear el puerto 80 en el contenedor al puerto 80 en el clúster para tener acceso completo al modo estándar en el servidor Apache..
Verifique si el servicio se está ejecutando ingresando este comando:
docker service ls
Debería ver un resultado como este:
ID NOMBRE MODO REPLICAS PUERTOS DE IMAGEN
El servidor web nnt7i1lipo0h replica 0/1 Apache: el más nuevo *: 80-> 80 / tcp
El servidor Apache ahora debería estar funcionando bien en el nodo administrador. Se puede acceder al servidor web redirigiendo su navegador a http: // dirección_ip_nodo-1.
Debería ver el siguiente resultado::
Ahora hay un servidor Apache disponible en cada nodo.
El servicio Docker puede escalar un servicio. Para probar la alta disponibilidad del servidor, detenga la ejecución de Docker en el nodo trabajador:
sudo systemctl stop docker
Utilice el siguiente comando para averiguar el estado del servidor Apache:
docker service ps webserver
Un nuevo contenedor en el nodo administrador debe comenzar con el siguiente resultado:
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS ia2qc8a5f5n4 webserver.1 httpd:latest Manager-Node Ready Ready 1 second ago 7roily9zpjvq _ webserver.1 httpd:latest Worker-Node Shutdown Running 15 seconds ago r7nzo325cu73 webserver.2 httpd:latest Manager-Node Running Running 23 minutes ago
¡Felicidades! Así de simple. Ahora tiene una configuración completa de Docker Swarm en Ubuntu versión 16.04. Además, ahora sabe cómo realizar varias tareas administrativas en Swarm Cluster. Con eso en mente, aún necesita configurar su clúster de Docker con múltiples nodos de administrador según sus necesidades de administración.