互联网技术 / 互联网资讯 · 2024年3月9日

Docker Swarm任务和日程安排运行原理:云计算核心技术Docker教程

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

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

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

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

云计算核心技术Docker教程:Docker Swarm 任务和日程安排运行原理

待定服务

服务可以以这样的方式配置,即当前群中的任何节点都不能运行其任务。在这种情况下,服务保持在状态pending。以下是一些服务何时可能保持在 state 中的示例pending。

注意:如果您的唯一目的是阻止部署服务,请将服务扩展到 0,而不是尝试以保留在pending.

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

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

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

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

OpenMagic API

Need more than content? Move into the product flow.

If you are here for model access, pricing, developer docs, or the future API console, the dedicated product path now lives on api.openmagic.ai.