问题描述
在使用Docker Swarm时,有一个需求是希望防止服务A和服务B被放置在同一节点上。他在文档中只找到了基于节点属性(如标签和角色)的放置限制的信息,但找不到如何基于已在给定节点上运行的服务来配置放置的方法。他想知道如何实现这个需求。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
目前,Swarm模式不支持服务与节点上其他容器/服务之间的亲和性或反亲和性。但是,根据您的目标,有其他选项可供选择。
方案1:保留资源
一种选择是为您的容器保留资源,如CPU和内存。这将确保两个资源密集型应用程序不会在同一节点上调度,如果资源不足的话。
方案2:使用标签和约束
另一种选择是使用标签和约束,您可以为多个节点分配相同的标签,通常用于指定节点类型,或将节点分配给特定的团队/项目/环境。
这两种选项都会降低容错能力,特别是如果您将标签分配给一个或少数几个节点。如果带有标签的节点宕机,Docker将无法在另一个节点上重新调度您的服务。
请注意,官方文档中也提到了类似的内容:https://docs.docker.com/engine/swarm/services/#control-service-placement
正文完