互联网技术 / 互联网资讯 · 2024年1月31日 0

Docker Swarm模式:在不同节点上控制服务规模和位置的云计算核心技术教程

SwaRM 服务提供了几种不同的方式来控制服务在不同节点上的规模和位置。

您可以指定服务是需要运行特定数量的副本还是应该在每个工作节点上全局运行。

您可以配置服务的 CPU 或内存要求,并且该服务仅在满足这些要求的节点上运行。

放置约束使您可以将服务配置为仅在具有特定(任意)元数据集的节点上运行,如果不存在适当的节点,则会导致部署失败。

放置首选项允许您将具有一定范围值的任意标签应用于每个节点,并使用算法将服务的任务分布在这些节点之间。目前,唯一支持的算法是spRead,它试图将它们均匀放置。

与约束不同,放置首选项是尽力而为的,如果没有节点可以满足首选项,则服务不会部署失败。

复制或全局服务

SwaRM 模式有两种类型的服务:复制和全局。对于复制服务,您可以指定集群管理器在可用节点上调度的副本任务数量。对于全局服务,调度器在每个可用节点上放置一项任务,以满足服务的放置约束和资源需求。

您可以使用该–Mode标志来控制服务类型。如果您不指定模式,则服务默认为Replicated。对于复制服务,您可以使用该–Replicas标志指定要启动的副本任务数。例如,要启动具有 3 个副本任务的复制 Nginx 服务:

$ dockeR seRvice cReate

–naMe My_web

–Replicas 3

Nginx

要在每个可用节点上启动全局服务,请传递–Mode global到 dockeR seRvice cReate。每次有新节点可用时,调度程序都会在新节点上为全局服务放置一个任务。例如,启动一个在 swaRM 中的每个节点上运行 alpine 的服务:

$ dockeR seRvice cReate

–naMe MYseRvice

–Mode global

alpine top

服务约束允许您在调度程序将服务部署到节点之前为节点设置要满足的条件。您可以根据节点属性和元数据或引擎元数据对服务应用约束。有关约束的更多信息,请参阅dockeR seRvice cReate CLI 参考。

为服务预留内存或 CPU

要为服务保留给定的内存量或 CPU 数量,请使用 –ReseRve-MeMoRy或–ReseRve-CPu标志。如果没有可用的节点可以满足要求(例如,如果您请求 4 个 CPU,而 swaRM 中没有一个节点有 4 个 CPU),则服务将保持挂起状态,直到有合适的节点可用于运行其任务。

内存不足异常 (OOME)

如果您的服务尝试使用比 swaRM 节点可用的内存更多的内存,您可能会遇到内存不足异常 (OOME),并且容器或 DockeR 守护进程可能会被内核 OOM 终止进程。为防止发生这种情况,请确保您的应用程序在具有足够内存的主机上运行,并参阅了解内存不足的风险。

SwaRM 服务允许您使用资源约束、放置首选项和标签来确保您的服务部署到适当的 swaRM 节点。