English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Gestión de clúster Swarm

Introducción

Docker Swarm es una herramienta de gestión de clúster de Docker. Transforma un grupo de hosts Docker en un solo host virtual Docker. Docker Swarm proporciona una API de Docker estándar, por lo que cualquier herramienta que ya se comunique con el demonio Docker puede usar Swarm para expandirse fácilmente a múltiples hosts.

Las herramientas que admite incluyen, pero no se limitan a, lo siguiente:

  • Dokku

  • Docker Compose

  • Docker Machine

  • Jenkins

Principio

Como se muestra en la imagen siguiente, el clúster swarm está compuesto por nodos administradores (manager) y nodos de trabajo (work node).

  • swarm mananger:se encarga de toda la gestión del clúster, incluyendo la configuración del clúster, la gestión de servicios y todo lo relacionado con el clúster.

  • nodo de trabajo:que es el nodo disponible en la imagen, se encarga principalmente de ejecutar los servicios para ejecutar tareas (task).

Usar

Los siguientes ejemplos se presentan utilizando Docker Machine y virtualbox, asegúrate de que tu host ya tiene instalado virtualbox.

1、Crear nodo administrador (manager) del clúster swarm

Crear máquina docker:

$ docker-machine create -d virtualbox swarm-manager

Inicializar el clúster swarm, la máquina en la que se realiza la inicialización es el nodo administrador del clúster.

$ docker-machine ssh swarm-manager
$ docker swarm init --advertise-addr 192.168.99.107 #La IP aquí es la IP asignada al momento de crear la máquina.

La salida anterior demuestra que se ha inicializado con éxito. Es necesario copiar la siguiente línea, que se utilizará al agregar el nodo de trabajo:

docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh2j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377

2、创建swarm集群工作节点(worker)

Aquí se crean directamente dos máquinas, swarm-worker1 y swarm-worker2 .

Ingresar a dos máquinas respectivamente, especificar agregar al clúster creado en el paso anterior, aquí se utilizará el contenido copiado en el paso anterior.

La salida de datos anterior indica que se ha agregado con éxito.

En la imagen superior, debido a que el contenido copiado en el paso anterior es largo, se cortará automáticamente. En realidad, el comando ejecutado en la imagen es el siguiente:

docker@swarm-worker1:~$ docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh2j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377

3、查看集群信息

Entrar al nodo de gestión y ejecutar: docker info para ver la información del clúster actual.

$ docker info

A través del círculo rojo, se puede saber que en el clúster en ejecución hay tres nodos, uno de los cuales es el nodo de gestión.

4、部署服务到集群中

Atención:Cualquier operación relacionada con la gestión del clúster se realiza en el nodo de gestión.

En el siguiente ejemplo, se crea un servicio llamado helloworld en un nodo de trabajo, aquí se asigna aleatoriamente a un nodo de trabajo:

docker@swarm-manager:~$ docker service create --replicas 1 --name helloworld alpine ping docker.com

5、查看服务部署情况

Ver en qué nodo se ejecuta el servicio helloworld, se puede ver que actualmente está en swarm.-worker1 Nodo:

docker@swarm-manager:~$ docker service ps helloworld

Ver la información específica de la implementación de helloworld:

docker@swarm-manager:~$ docker service inspect --pretty helloworld

6、扩展集群服务

Vamos a expandir el servicio helloworld a dos nodos.

docker@swarm-manager:~$ docker service scale helloworld=2

Se puede ver que se ha expandido de un nodo a dos nodos.

7、删除服务

docker@swarm-manager:~$ docker service rm helloworld

Verificar si se ha eliminado:

8、服务滚动升级

En el siguiente ejemplo, presentaremos cómo actualizar el redis a una versión más alta mediante actualizaciones en espiral.

Crear una 3.0.6 la versión de redis.}

docker@swarm-manager:~$ docker service create --replicas 1 --name redis --update-delay 10s redis:3.0.6

Actualizar redis de manera continua.

docker@swarm-manager:~$ docker service update --image redis:3.0.7 redis

Como se puede ver en la imagen, la versión de redis ya ha pasado de 3.0.6 Se ha actualizado a 3.0.7,lo que indica que el servicio se ha actualizado con éxito.

9、Detener un nodo para que no reciba nuevas tareas

Ver todos los nodos:

docker@swarm-manager:~$ docker node ls

Se puede ver que todos los nodos actuales están en estado Active y pueden recibir nuevas tareas.

Detener el nodo swarm-worker1:

Atención:swarm-worker1 El estado se cambia a Drain. No afectará los servicios del clúster, solo swarm-worker1 El nodo ya no recibirá nuevas tareas, lo que reducirá la capacidad de carga del clúster.

Se puede activar nuevamente el nodo con el siguiente comando:

docker@swarm-manager:~$ docker node update --disponibilidad activa swarm-worker1