[Nativo de la nube] Orquestación del host Docker Swarm

1. ¿Qué es Docker Swarm?

Swarm es una plataforma lanzada por Docker para administrar clústeres de Docker. Está desarrollada casi en su totalidad utilizando el lenguaje GO. El código es de código abierto en https://github.com/docker/swarm. Convierte un grupo de hosts de Docker en uno solo. En un único host virtual, Swarm utiliza la interfaz estándar Docker API como entrada de acceso frontal. En otras palabras, varias formas de Docker Client (compose, docker-py, etc.) pueden comunicarse directamente con Swarm, e incluso el propio Docker puede Se integra fácilmente con Swarm, lo que facilita enormemente a los usuarios trasplantar sistemas originalmente basados ​​​​en nodos únicos a Swarm. Al mismo tiempo, Swarm tiene soporte integrado para complementos de red Docker y los usuarios pueden implementar fácilmente servicios de clúster de contenedores entre hosts.

Docker Swarm, al igual que Docker Compose, es el proyecto oficial de orquestación de contenedores de Docker, pero la diferencia es que Docker Compose es una herramienta para crear múltiples contenedores en un único servidor o host, mientras que Docker Swarm se puede crear en múltiples servidores o hosts. Para la implementación de microservicios, Docker Swarm es obviamente más adecuado.

A partir de la versión 1.12.0 de Docker, Docker Swarm se ha incluido en el motor Docker (docker swarm) y tiene herramientas de descubrimiento de servicios integradas. No necesitamos configurar Etcd o Consul para la configuración de descubrimiento de servicios como antes.

Swarm deamon es solo un programador más un enrutador. Swarm en sí no ejecuta el contenedor. Solo acepta solicitudes del cliente Docker y programa los nodos adecuados para ejecutar el contenedor. Esto significa que incluso si Swarm se debe a ciertos Si el motivo está inactivo, Los nodos del clúster continuarán ejecutándose como de costumbre. Cuando Swarm reanude la operación, recopilará y reconstruirá la información del clúster.

2. Varios conceptos clave de Swarm

Enjambre

La gestión y orquestación del clúster utiliza SwarmKit integrado en el motor de Docker. Puede iniciar el modo de enjambre durante la inicialización de Docker o unirse a un enjambre existente.

Nodo

Un nodo es una instancia de un clúster de motor Docker. También puedes considerarlo como un nodo Docker. Puede ejecutar uno o más nodos en una única computadora física o servidor en la nube, pero las implementaciones de clústeres de producción generalmente incluyen nodos Docker distribuidos en múltiples computadoras físicas y en la nube.
Para implementar una aplicación en un enjambre, envíe la definición del servicio al nodo administrador. El nodo administrador envía unidades de trabajo llamadas tareas a los nodos trabajadores.
El nodo Manager también realiza las funciones de orquestación y gestión de clústeres necesarias para mantener el estado deseado del clúster. El nodo Manager selecciona un único líder para realizar las tareas de orquestación. Los nodos trabajadores reciben y ejecutan las tareas enviadas desde el nodo administrador. De forma predeterminada, los nodos de administrador también ejecutan servicios como nodos de trabajo, pero puede configurarlos para que solo ejecuten tareas de administrador y sean nodos solo de administrador. El agente se ejecuta en cada nodo trabajador e informa sobre las tareas que se le asignan. Los nodos trabajadores informan a los nodos administradores del estado actual de sus tareas asignadas para que el administrador pueda mantener el estado deseado de cada trabajador.

Servicio

Un servicio es una definición de tareas que se ejecutan en una máquina de gestión o en un nodo trabajador. Es la estructura central del sistema de grupos y la principal fuente de interacción entre usuarios y grupos. Al crear un servicio, debe especificar la imagen del contenedor que se utilizará.

Tarea

Las tareas son comandos ejecutados en el contenedor docekr. El nodo Manager asigna tareas a los nodos trabajadores en función del número especificado de copias de tareas.

3. Comandos relacionados

enjambre de estibadores:

Gestión de clústeres, los subcomandos incluyen init, joinLeave, Update. (enjambre de ventana acoplable: ayuda para ver la ayuda)

servicio acoplable:

Creación de servicios, los subcomandos incluyen tareas de creación, inspección, actualización y eliminación. (servicio acoplable: ayuda para ver la ayuda)

nodo acoplable:

Gestión de nodos, los subcomandos incluyen aceptar, promover, degradar, inspeccionar, actualizar, tareas, ls, rm.
(nodo acoplable --ayuda para ver la ayuda)

4. Implementación de clústeres de enjambre

4.1 Preparación antes del despliegue

Las siguientes operaciones se realizan en todos los nodos:

dirección IP Nombre de la computadora Role
192.168.1.100 gestionar01 administrador_enjambre
192.168.1.101 nodo01 nodo_enjambre
192.168.1.102 nodo02 nodo_enjambre
  • instalar la ventana acoplable
  • análisis de hosts
[root@manage01 ~]# cat /etc/hosts
192.168.1.100 manage01
192.168.1.101 node01
192.168.1.102 node02

[root@manage01 ~]# systemctl disable firewalld
[root@manage01 ~]# systemctl stop firewalld
[root@manage01 ~]# iptables -F

关闭 selinux

#设置为 disabled 后需要重启计算机生效
SELINUX=disabled

4.2 Crear un clúster de enjambre

初始化集群-init

[root@manage01 ~]# docker swarm init --advertise-addr 192.168.1.100

#--advertise-addr参数表示其它swarm中的worker节点使用此ip地址与manager联系


Swarm initialized: current node (dh6qthwwctbrl0y3hx1k41icl) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-0vdbyxq80uk8sf9nlnahsnkv6w3gaf5necl992ia0g8dmc5x8c-bkenoigc7kwizoch08r3fc4wq 192.168.1.100:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

4.3 Agregar trabajador (nodo trabajador) al enjambre

[root@node01 ~]# docker swarm join --token SWMTKN-1-0vdbyxq80uk8sf9nlnahsnkv6w3gaf5necl992ia0g8dmc5x8c-bkenoigc7kwizoch08r3fc4wq 192.168.1.100:2377
This node joined a swarm as a worker.

[root@node02 ~]# docker swarm join --token SWMTKN-1-0vdbyxq80uk8sf9nlnahsnkv6w3gaf5necl992ia0g8dmc5x8c-bkenoigc7kwizoch08r3fc4wq 192.168.1.100:2377
This node joined a swarm as a worker.

4.4 Verificar el estado de unión

 [root@manage01 ~]# docker node ls

4.5 Implementar servicios en Swarm (nginx como ejemplo)

Crear red e implementar servicios

# 创建网络
[root@manage01 ~]# docker network create -d overlay nginx_net
a52jy33asc5o0ts0rq823bf0m

[root@manage01 ~]# docker network ls | grep nginx_net
a52jy33asc5o        nginx_net           overlay             swarm
 
# 部署服务
[root@manage01 ~]# docker service create --replicas 1 --network nginx_net --name my_nginx -p 80:80 nginx    # 就创建了一个具有一个副本(--replicas 1 )的nginx服务,使用镜像nginx

olexfmtdf94sxyeetkchwhehg
overall progress: 1 out of 1 tasks
1/1: running   [==================================================>]
verify: Service converged

Utilice la red superpuesta anterior para crear el servicio nginx en el administrador y en los nodos del nodo
. El parámetro –replicas especifica que el servicio consta de varias instancias
. Nota: No es necesario descargar la imagen nginx en el nodo por adelantado. La imagen del contenedor se descargará automáticamente después de ejecutar este comando.

# 使用 docker service ls 查看正在运行服务的列表
[root@manage01 ~]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
olexfmtdf94s        my_nginx            replicated          1/1                 nginx:latest        *:80->80/tcp

Consultar información del servicio en Swarm -pretty formatea la salida del comando en un formato legible. Se puede generar información más detallada sin agregar --pretty:

[root@manage01 ~]# docker service inspect --pretty my_nginx

ID:             zs7fw4ereo5w7ohd4n9ii06nt
Name:           my_nginx
Service Mode:   Replicated
 Replicas:      1
Placement:
UpdateConfig:
 Parallelism:   1
 On failure:    pause
 Monitoring Period: 5s
 Max failure ratio: 0
 Update order:      stop-first
RollbackConfig:
 Parallelism:   1
 On failure:    pause
 Monitoring Period: 5s
 Max failure ratio: 0
 Rollback order:    stop-first
ContainerSpec:
 Image:         nginx:latest@sha256:b73f527d86e3461fd652f62cf47e7b375196063bbbd503e853af5be16597cb2e
 Init:          false
Resources:
Networks: nginx_net
Endpoint Mode:  vip
Ports:
 PublishedPort = 80
  Protocol = tcp
  TargetPort = 80
  PublishMode = ingress
  
# 查询到哪个节点正在运行该服务
[root@manage01 ~]# docker service ps my_nginx

Escalar dinámicamente servicios en Swarm (escalar) Por supuesto, si simplemente inicia el contenedor a través del servicio, swarm no es nada nuevo. El servicio también proporciona funcionalidad de replicación (similar a la replicación en Kubernetes). Puede usar el comando Docker Service Scale para establecer la cantidad de copias del contenedor en el servicio, como expandir dinámicamente el contenedor my_nginx anterior a 4.

[root@manager01 ~]# docker service scale my_nginx=4
my_nginx scaled to 4
overall progress: 4 out of 4 tasks
1/4: running   [==================================================>]
2/4: running   [==================================================>]
3/4: running   [==================================================>]
4/4: running   [==================================================>]
verify: Service converged

Al igual que al crear un servicio, después de aumentar el número de escala, se crearán nuevos contenedores. Estos contenedores recién iniciados también pasarán por el proceso desde la preparación hasta la ejecución. Después de aproximadamente un minuto, el servicio debería iniciarse. En este momento, usted Puedo echarle un vistazo de nuevo.Contenedores en el servicio nginx.

[root@manager01 ~]# docker service ps my_nginx
#升级镜像/升级业务/回滚业务
docker service update --image nginx:new my_nginx

#删除服务
[root@manager01 ~]# docker service rm my_nginx

Supongo que te gusta

Origin blog.csdn.net/qq_45277554/article/details/131372109
Recomendado
Clasificación