跳至主要內容

DockerSwarm介绍

知识库容器技术DockerDocker大约 3 分钟

相关地址

介绍

Docker Swarm是管理跨节点容器的编排工具,Docker 官方容器编排项目。Docker SwarmDocker Compose一样,都是编排工具,但不同的是:

Docker Compose只能编排单节点上的容器。

Docker Swarm将一群Docker节点虚拟化为一个主机,使得用户只要在单一主机上操作就能完成对整个容器集群的管理工作。

架构图

Swarm deamon只是一个调度器(Scheduler)加路由器(router),Swarm自己不运行容器,它只是接受Docker客户端发来的请求,调度适合的节点来运行容器,这就意味着,即使Swarm由于某些原因挂掉了,集群中的节点也会照常运行,放Swarm重新恢复运行之后,他会收集重建集群信息。

swarm
swarm

Swarm是典型的master-slave结构,通过发现服务来选举manager。manager是中心管理节点,各个node上运行agent接受manager的统一管理,集群会自动通过Raft协议分布式选举出manager节点,无需额外的发现服务支持,避免了单点的瓶颈问题,同时也内置了DNS的负载均衡和对外部负载均衡机制的集成支持

Swarm优点

  • 任何规模都有高性能表现
  • 灵活的容器调度
  • 服务的持续可用性
  • 和 Docker API 及整合支持的兼容性
  • Docker SwarmDocker化应用的核心功能提供原生支持。

Swarm核心

1、Swarm

集群的管理和编排是使用嵌入docker引擎的SwarmKit,可以在docker初始化时启动swarm模式或者加入已存在的swarm

2、Node

Node是docker引擎集群的一个实例。管理节点(manager nodes)和工作节点(worker nodes)

3、Service服务

一个服务是任务的定义,管理机或工作节点上执行。它是群体系统的中心结构,是用户与群体交互的主要根源。创建服务时,你需要指定要使用的容器镜像。

4、Task任务

任务是在docekr容器中执行的命令,Manager节点根据指定数量的任务副本分配任务给worker节点

高可用性(HA)

有以下两条最佳实践原则。

  • 部署奇数个管理节点。
  • 不要部署太多管理节点(建议 3 个或 5 个)。

常用命令

1、swarm 命令

# 初始化集群
docker swarm init
# 查看工作节点的 token
docker swarm join-token worker
# 查看管理节点的 token
docker swarm join-token manager
# 加入集群中
docker swarm join               
# 删除swarm节点
docker swarm leave --force        # 管理节点,离开节点,强制离开
docker swarm leave                # 工作节点,离开节点

2、node 命令

docker node ls                             # 查看所有集群节点
docker node ps                             # 查看节点中的 Task 任务
docker node rm 节点名称| 节点ID            # 删除某个节点
docker node rm -f 节点名称| 节点ID         # 删除某个节点(强制删除)
docker node inspect 节点名称| 节点ID       # 查看节点详情
docker node demote 节点名称| 节点ID        # 节点降级,由管理节点降级为工作节点
docker node promote 节点名称| 节点ID       # 节点升级,由工作节点升级为管理节点
docker node update 节点名称| 节点ID        # 更新节点

3、service 命令

docker service --help                       # 帮助文档
docker service create                       # 部署服务
docker service ls                           # 查看swarm集群正在运行的列表服务
docker service ps nginx                     # 列出服务的任务
docker service ps redis                     # 列出服务的任务
docker service inspect 服务名称|服务ID      # 查看服务详情
docker service logs 服务名称|服务ID         # 产看某个服务日志
docker service rm 服务名称|服务ID           # 删除某个服务(-f强制删除)
docker service scale 服务名称|服务ID=n      # 设置某个服务个数,弹性服务,动态 扩/缩 容
docker service scale nginx=3                # 修改服务实例数量为3
docker service update 服务名称|服务ID       # 更新某个服务