任何人都可以分享他们更改docker swarm调度策略的经验,因为有3种(传播,binpack和random)。传播是docker swarm使用的默认策略,我希望将其更改为binpack。
您列出的Swarm调度策略是针对Classic Swarm的,它是作为独立容器实现的,可充当各种Docker引擎的反向代理。大多数人都在使用较新的Swarm Mode而不是它,并且Classic Swarm的开发工作很少。
较新的Swarm模式包括可调整的调度程序的单个选项。唯一的选择是HA Spread算法。当您有一个服务的多个副本时,它将首先设法将这些副本分布在满足所需条件的多个节点上。在副本最少的节点中,它将首先选择其他调度的容器最少的节点。
此算法的调整包括约束和放置首选项。约束允许您要求服务在具有特定标签或平台的节点上运行。放置首选项使您可以将工作负载分散在给定标签的不同值上,这对于确保所有副本不在同一可用区中运行非常有用。
Swarm模式下的所有配置均不包含装箱选项。如果您希望减少群集集群中的节点数,则可以更新节点状态以从节点上消耗工作量。这将正常停止该节点上的所有群集管理的容器,并将它们迁移到其他节点。或者,您可以简单地暂停在节点上计划新的工作负载,这将随着服务在其他节点上的更新和计划而逐渐删除副本,而不是抢先停止在该节点上运行副本。这两个选项由docker node update --availability
控制:
$ docker node update --help
Usage: docker node update [OPTIONS] NODE
Update a node
Options:
--availability string Availability of the node ("active"|"pause"|"drain")
--label-add list Add or update a node label (key=value)
--label-rm list Remove a node label if exists
--role string Role of the node ("worker"|"manager")
有关约束和放置首选项的更多详细信息,请参见:https://docs.docker.com/engine/reference/commandline/service_create/#specify-service-constraints---constraint