docker swarm 服务如何工作

  • A+
所属分类:容器
又拍云upyun

要在集群中部署镜像,创建一个服务。在一些更大的应用上下文中,服务通常称之为微服务。服务可能是一个HTTP服务器、数据库、或者分布式环境中运行的任何其他可执行的程序。

在创建服务时,可以指定要使用的容器镜像以及容器中要运行的命令。服务还可以定义下面选项:

  • 集群要对外服务的端口
  • 在集群中用于服务之间相连的overlay网络
  • 滚动更新策略
  • 集群总运行的副本数量

服务、任务和容器

当将服务部署到集群时,管理者将服务定义视为服务所需状态。然后将服务调度为一个或多个副本任务。这些任务在集群的节点上彼此独立运行。

例如下图有三个副本的HTTP服务,每个服务实例就是一个任务。

docker

容器是一个独立的进程。在swarm模型中,每个任务调用一个容器。任务类似于插槽,调度器将容器放入其中。一旦容器运行,调度器认为该任务处于运行状态。如果容器出现健康监测失败或者终止,那么任务也终止。

任务和调度

任务是集群内调度的原子单位。当创建或者更新服务声明所需的服务状态时,协调者通过调度任务来实现这些所需的状态。

任务是一个单向机制,通过这些状态单独进行:分配、准备、运行等等。如果任务失败,协调者将删除任务以及容器,然后根据服务指定的所需状态创建一个新的任务来代替它。

Docker swarm模式的基础逻辑是通用调度器和编排器。

下图显示集群如何接受服务创建请求并将任务调度到工作节点上。

docker

待处理的服务

一个服务可以这样配置,使得当前集群中的节点不能运行其任务。在这种情况下,服务仍处于待处理状态。

以下是服务可能保留在待处理状态的示例:

  • 如果所有节点被暂停或Drain,并且你创建一个服务,将被挂起,知道节点可用。实际上,第一个可用的节点将会获得所有的任务,这在生产环境中不是件好事。
  • 可以为服务预留特定数量的内存。如果集群中没有节点满足所需的内存量,则服务将处于待处理状态,知道可用的节点运行其任务。如果指定了非常大的值,则任务将永久挂起,除非确实有一个满足该条件的节点。
  • 可以对服务施加放置约束,并且可能无法在给定时间履行约束。

    此行为说明您的任务的要求和配置与当前的群组状态并不紧密。作为集群管理员,你可以声明集群所需状态,并且管理者可以使用集群中的节点来创建该状态。在集群中你不需要微管理任务。

    如果你唯一的目的是阻止部署服务,请将服务扩展为0,而不是尝试将其配置成保持待处理状态。

副本和全局服务

有两种类型的服务部署:副本和全局。

对于副本服务,指定要运行的相同任务的数量,每个副本都是相同的内容。

全局服务是在每个节点上运行一个任务的服务。不需要预先指定任务数量。每当将一个节点添加到集群中,协调者将创建一个任务,并且调度器将任务分配给该新加入的节点。全局服务最好是监控代理、反病毒扫描程序等等想要在集群中每个节点上运行的容器。

下图显示三个副本服务(黄色)和全局服务(灰色):

docker

# 在swarm模式下运行Docker Engine

当首次安装并使用Docker Engine时,默认情况下swarm模式是禁用的。当启用swarm模式时,可以使用docker service 服务管理命令。

有两种方式在swarm模式下运行引擎:

  • 创建一个新的集群
  • 加入现有集群 

    在生成环境中,集群模式提供具有集群管理功能的容错平台,以保证服务的可靠运行。

weinxin
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
默北

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: