任务是一种单向机制。它通过一系列状态单调前进:分配、准备、运行等。如果任务失败,协调器将删除任务及其容器,然后根据服务指定的所需状态创建一个新任务来替换它。
Docker swarm 模式的底层逻辑是一个通用的调度器和编排器。服务和任务抽象本身不知道它们实现的容器。假设您可以实现其他类型的任务,例如虚拟机任务或非容器化进程任务。调度器和协调器不知道任务的类型。但是,当前版本的 Docker 仅支持容器任务。
下图显示了 swarm 模式如何接受服务创建请求并将任务调度到工作节点。
待定服务
服务可以以这样的方式配置,即当前群中的任何节点都不能运行其任务。在这种情况下,服务保持在状态pending。以下是一些服务何时可能保持在 state 中的示例pending。
注意:如果您的唯一目的是阻止部署服务,请将服务扩展到 0,而不是尝试以保留在pending.
如果所有节点都已暂停或耗尽,并且您创建了一个服务,则该服务将处于挂起状态,直到节点变为可用为止。实际上,第一个可用的节点会获得所有任务,因此在生产环境中这不是一件好事。
您可以为服务保留特定数量的内存。如果 swarm 中没有节点具有所需的内存量,则服务将保持挂起状态,直到有一个可以运行其任务的节点可用。如果您指定一个非常大的值,例如 500 GB,则任务将永远处于挂起状态,除非您确实有一个可以满足它的节点。
您可以对服务施加放置约束,并且可能无法在给定时间遵守这些约束。
此行为说明您的任务的要求和配置与群的当前状态没有紧密联系。作为 swarm 的管理员,您声明了您的 swarm 所需的状态,并且管理器与 swarm 中的节点一起创建该状态。您不需要对 swarm 上的任务进行微观管理。
声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多企业信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。投资有风险,需谨慎。