How services work

预计阅读时间:5分钟

要在 Docker 引擎处于 swarm 模式时部署应用程序映像,您需要创建一个服务. 通常,服务是某个更大应用程序上下文中微服务的映像. 服务的示例可能包括 HTTP 服务器、数据库或您希望在分布式环境中运行的任何其他类型的可执行程序.

创建服务时,您需要指定要使用的容器映像以及在运行的容器中执行的命令. 您还可以定义服务的选项,包括:

  • swarm 使服务在 swarm 外部可用的端口
  • 服务连接到集群中的其他服务的覆盖网络
  • CPU 和内存限制和预留
  • 滚动更新策略
  • 在 swarm 中运行的图像的副本数

Services, tasks, and containers

当您将服务部署到 swarm 时,swarm 管理器接受您的服务定义作为服务的所需状态. 然后,它将集群中的节点上的服务安排为一个或多个副本任务. 这些任务在 swarm 中的节点上彼此独立运行.

例如,假设您想在 HTTP 侦听器的三个实例之间进行负载平衡. 下图显示了具有三个副本的 HTTP 侦听器服务. 侦听器的三个实例中的每一个都是 swarm 中的一个任务.

services diagram

容器是一个独立的进程. 在 swarm 模式模型中,每个任务只调用一个容器. 任务类似于调度程序放置容器的"槽". 一旦容器处于活动状态,调度程序就会识别出任务处于运行状态. 如果容器未通过健康检查或终止,则任务终止.

Tasks and scheduling

任务是 swarm 中调度的原子单元. 当您通过创建或更新服务来声明所需的服务状态时,编排器通过调度任务来实现所需的状态. 例如,您定义了一个服务,该服务指示协调器始终保持三个 HTTP 侦听器实例运行. 编排器通过创建三个任务来响应. 每个任务都是调度程序通过生成容器来填充的槽. 容器是任务的实例化. 如果 HTTP 侦听器任务随后未能通过其健康检查或崩溃,编排器将创建一个新的副本任务来生成一个新容器.

任务是一种单向机制. 它通过一系列状态单调地进行:分配、准备、运行等.如果任务失败,编排器将删除任务及其容器,然后根据服务指定的所需状态创建一个新任务来替换它.

Docker swarm 模式的底层逻辑是一个通用的调度器和编排器. 服务和任务抽象本身并不知道它们实现的容器. 假设您可以实现其他类型的任务,例如虚拟机任务或非容器化流程任务. 调度器和编排器不知道任务的类型. 但是,当前版本的 Docker 只支持容器任务.

下图显示了 swarm 模式如何接受服务创建请求并将任务调度到工作节点.

services flow

Pending services

一个服务可以这样配置,使得当前在 swarm 中的任何节点都不能运行它的任务. 在这种情况下,服务保持在状态pending . 下面是一些服务可能保持状态pending的示例.

注意:如果您的唯一目的是阻止部署服务,请将服务缩放到 0,而不是尝试以使其保持pending的方式对其进行配置.

  • 如果所有节点都已暂停或耗尽,并且您创建了一项服务,则该服务将处于挂起状态,直到节点可用为止. 实际上,第一个可用的节点会获得所有任务,因此这在生产环境中不是一件好事.

  • 您可以为服务保留特定数量的内存. 如果 swarm 中没有节点具有所需的内存量,则服务将保持挂起状态,直到可以运行其任务的节点可用. 如果您指定一个非常大的值,例如 500 GB,则该任务将永远保持挂起状态,除非您确实有一个可以满足它的节点.

  • 您可以对服务施加放置约束,并且这些约束可能无法在给定时间得到遵守.

这种行为说明您的任务的要求和配置与当前的 swarm 状态并没有紧密联系. 作为 swarm 的管理员,您声明了您的 swarm 所需的状态,并且管理器与 swarm 中的节点一起创建该状态. 您不需要对 swarm 上的任务进行微观管理.

Replicated and global services

有两种类型的服务部署,复制的和全局的.

对于复制服务,您指定要运行的相同任务的数量. 例如,您决定部署具有三个副本的 HTTP 服务,每个副本提供相同的内容.

全局服务是在每个节点上运行一个任务的服务. 没有预先指定的任务数量. 每次将节点添加到 swarm 时,编排器都会创建一个任务,调度器会将任务分配给新节点. 全局服务的良好候选者是监控代理、防病毒扫描程序或您希望在集群中的每个节点上运行的其他类型的容器.

The diagram below shows a three-service replica in yellow and a global service in gray.

global vs replicated services

Learn more

  • 阅读有关 swarm 模式节点如何工作的信息.
  • 了解PKI如何在集群模式下工作.
docker, container, cluster, 群模式, node

by  icopy.site