docker - 是否可以使用 Docker Swarm 在不同节点上运行不同数量的副本?
问题描述
我在 2 个节点(1 = 经理和 1 = 工人)上运行 Docker Swarm。
我有以下服务:
- PHP-FPM
- 雷迪斯
- Nginx 网络服务器
- 玛丽亚数据库
由于许多队列工作人员(Laravel Horizon),我正在运行一个 Laravel 应用程序,该应用程序在后台进行了大量处理。它工作得很好。
但我想要的是例如在节点 2(主机 2)上运行 2 个 PHP-FPM 副本,并且在节点 1(主机 1)上仅运行 1 个副本。所以总共有3个副本。
当我简单地更改replicas: 3
第三个副本时,可能会出现在节点 1或节点 2上。
但是由于资源的原因,我不想在 node1 上再有 PHP-FPM 副本,因为我的数据库、Redis、Web 服务器也已经在运行。
目前我有 2 个副本分布在我的 2 个节点上。
deploy:
mode: replicated # "global": exactly one container per swarm node; "replicated": a specified number of containers
replicas: 2
placement:
# max_replicas_per_node: 1
# constraints:
# - node.hostname == small-websites-3
# - node.role == manager
preferences:
- spread: node.hostname == host1
- spread: node.hostname == host2
正如您在上面的 docker-compose.yml 配置中看到的那样,我已经注释掉了放置约束,因为它们没有达到我想要的效果。
所以是的,我希望有一种方法可以在奇数副本的情况下为每个节点指定不同数量的副本,因为我相信当我有偶数时 Docker Swarm 可以很好地管理它(即 4 个副本会去:2x on节点 1 和节点 2 上的 2x)。
我希望这是有道理的并且是可能的(无需升级我的 node1 并使用偶数数量的副本)?
解决方案
推荐阅读
- javascript - 根据 Material-UI 组件的 props 动态创建第 n 个子选择器
- kubernetes - 未找到 GKE Ingress 错误网关或后端
- python - Python将json文件转换为字典
- encryption - openssl devcrypto 引擎支持 GCM、OFB、OFC 和 XTS
- python - 我们如何找到与时区缩写相对应的可能时区名称?
- magento - Magento 2 'ERR_TOO_MANY_REDIRECTS'
- python - 如何在数据框中找到存在某些特定值且值不依赖于列的行
- wildfly - 野蝇 2x | 服务器简历
- c++ - Assimp,OpenGL:围绕其原点旋转骨骼
- rest - 从 System.Web.Http.ApiController 实例外部获取数据