工作原理

一、节点

说明: Swarm模式: 可以创建一个或者多个Docker容器组成的集群 支持Docker Engine版本: >= 1.12 节点类型: Manager管理节点、Worker工作节点

swarm-diagram.png

Manager节点

作用:
  • 维护集群状态(创建、更新、删除……)
  • 调度服务(保持副本个数)
  • 支持Docker Api进行管理

容错性:

基于Raft实现,如果管理节点发生故障,不影响工作节点继续使用,只是无法继续管理集群,需要至少一个Manager节点恢复。

为了利用Swarm容错特性,建议使用大于1的基数节点 一个N管理节点集群最多可容忍丢失(N-1)/2管理节点

Worker节点

工作节点用于执行容器,默认情况下Manage节点也作为Worker节点

二、服务

说明: 要在Docker引擎处于Swarm模式下创建容器,需要先创建服务,通常情况下,服务是某个大型项目中的微服务镜像,服务可以是数据库、HTTP服务、或者其他分布式环境中的可执行程序

services-diagram.png

服务、任务、容器

container为一个独立的进程
task为容器的槽,通过service配置
service为副本,定义服务,由swarm manager管理,并安排副本task

任务和调度

task为Swarm中调度的原子单元,当创建或者更新服务的状态时,编排器通过调度task来实现。
task是一种单向机制的,同过一系列状态进行:分配``准备``运行等。
task如果执行失败,则销毁自身,编排器根据服务指定的所需状态新建一个进行替换。

三、Swarm路由网格

说明: Swarm中所有的节点流量都来自一个路由网格 即使节点没有运行任何任务,也可以通过节点端口访问到容器(也就是说所有容器均会暴露端口)

ingress-routing-mesh.png

在使用服务网格前应该防火墙放行以下端口:

  • 7946 TCP/UDP,用于服务网络发现
  • 4789 TCP,容器入口网络

使用外部负载均衡器

  • 可以使用Haproxy``Nginx 替代 swarm load balancer

操作

创建集群

Manager节点操作

  1. # 初始化
  2. docker swarm init --advertise-addr manager_ip
  3. # 查看Swarm信息
  4. docker info
  5. # 查看节点信息 (管理节点自动加入)
  6. docker node ls
  7. # 获取node加入集群命令 (初始化时会显示)
  8. docker swarm join-token manager
  9. # 离开集群
  10. docker swarm leave --force

添加节点到集群

Worker节点操作

  1. docker swarm join \
  2. --token token \
  3. manager_ip:2377

创建服务

Worker节点操作

  1. docker service create \
  2. --replicas 3 \
  3. --name my_web \
  4. --publish published=81,target=80 \
  5. nginx

—replicas num 设置副本数
—name nginx 设置服务名
—publish published=public_port,target=container_port 发布端口

更新服务

  1. docker service update --publish-add 80 my_web

删除服务

  1. docker service rm my_web

三方工具

swarmpit

截屏2022-01-25 下午5.51.08.png