我有一个 Docker 集群模式设置,其中节点看起来像这样
- 群管理器
- swarm-worker-01
- swarm-worker-02
- swarm-worker-for-my-special-application
- swarm-worker-for-my-special-application-02
swarm-manager
托管反向代理,工作节点托管一堆或多或少无关的小应用程序(我们是一家小型设计机构)。
在大多数情况下,这些应用程序是低带宽的,只是嗡嗡作响而不会互相打扰。但是,我们现在有一个新的应用程序(我们称之为special-application
),它希望能够部署到任何工作节点(因为它是一个高流量的应用程序),但我想限制除了special application
部署到这些节点之外的其他服务。
所以,我想要这样的东西:
- swarm-worker-01(接受任何容器)
- swarm-worker-02(接受任何容器)
- swarm-worker-for-my-special-application (仅接受
special application
) - swarm-worker-for-my-special-application-02(仅接受
special application
)
一种(一种)解决方案是给特殊节点一个标签,例如docker node update --label-add app-constraint=special-application swarm-worker-for-my-special-application
,然后在我的特殊应用程序上,部署:
deploy:
placement:
constraints:
- node.labels.app-constraint == special-application
在我的其他应用程序上:
deploy:
placement:
constraints:
- node.labels.app-constraint != special-application
但是,这有两个缺点。一是我special-application
只会部署在特殊节点上,而不是所有节点上。第二个是我必须通过我的每一个(数十个)其他服务并重新部署一个约束。
基本上,我希望special application
能够在任何地方部署,同时让某些工作人员只接受来自特殊应用程序的部署,实际上为他们保留容量。