工作原理
一、节点
说明: Swarm模式: 可以创建一个或者多个Docker容器组成的集群 支持Docker Engine版本: >= 1.12 节点类型: Manager管理节点、Worker工作节点
Manager节点
作用:
- 维护集群状态(创建、更新、删除……)
- 调度服务(保持副本个数)
- 支持Docker Api进行管理
容错性:
基于
Raft
实现,如果管理节点发生故障,不影响工作节点继续使用,只是无法继续管理集群,需要至少一个Manager节点恢复。为了利用Swarm容错特性,建议使用大于1的基数节点 一个
N
管理节点集群最多可容忍丢失(N-1)/2
管理节点
Worker节点
工作节点用于执行容器,默认情况下Manage节点也作为Worker节点
二、服务
说明: 要在Docker引擎处于Swarm模式下创建容器,需要先创建服务,通常情况下,服务是某个大型项目中的微服务镜像,服务可以是数据库、HTTP服务、或者其他分布式环境中的可执行程序
服务、任务、容器
container
为一个独立的进程task
为容器的槽,通过service
配置service
为副本,定义服务,由swarm manager
管理,并安排副本task
任务和调度
task
为Swarm中调度的原子单元,当创建或者更新服务的状态时,编排器通过调度task
来实现。task
是一种单向机制的,同过一系列状态进行:分配``准备``运行
等。task
如果执行失败,则销毁自身,编排器根据服务指定的所需状态新建一个进行替换。
三、Swarm路由网格
说明: Swarm中
所有的节点流量
都来自一个
路由网格 即使节点没有运行任何任务,也可以通过节点端口访问到容器(也就是说所有容器均会暴露端口)
在使用服务网格前应该防火墙放行以下端口:
7946
TCP/UDP,用于服务网络发现4789
TCP,容器入口网络
使用外部负载均衡器
- 可以使用
Haproxy``Nginx
替代swarm load balancer
操作
创建集群
Manager节点操作
# 初始化
docker swarm init --advertise-addr manager_ip
# 查看Swarm信息
docker info
# 查看节点信息 (管理节点自动加入)
docker node ls
# 获取node加入集群命令 (初始化时会显示)
docker swarm join-token manager
# 离开集群
docker swarm leave --force
添加节点到集群
Worker节点操作
docker swarm join \
--token token \
manager_ip:2377
创建服务
Worker节点操作
docker service create \
--replicas 3 \
--name my_web \
--publish published=81,target=80 \
nginx
—replicas num 设置副本数
—name nginx 设置服务名
—publish published=public_port,target=container_port 发布端口
更新服务
docker service update --publish-add 80 my_web
删除服务
docker service rm my_web