docker - 如何指定某个节点在 SWARM 中接收更多的服务副本
问题描述
我有 3 台服务器,其中一台的硬件比其他的多。当我运行docker stack deploy
每个服务器时,我有一个具有 25 个副本的服务,它接收到该特定服务器的相同数量的副本。
我可以在 dockercompose 文件中指定某种百分比的副本以重定向到该特定节点吗?
解决方案
您可以为您运行的容器定义资源预留,docker 会根据这些内存和 CPU 预留来避免调度容器是资源不足的节点。请注意,这应该对所有正在调度的容器进行,并且您需要分析您的应用程序以确定适当的预留和限制数量。请记住,在重负载期间,这些数字会增加,超过内存限制的响应是杀死容器并重新启动另一个实例,这在峰值负载期间会很糟糕,所以让你的限制足够大。
这是Docker 文档中的示例:
version: "3.7"
services:
redis:
image: redis:alpine
deploy:
resources:
limits:
cpus: '0.50'
memory: 50M
reservations:
cpus: '0.25'
memory: 20M
另请参阅 Docker 的资源约束文档:https ://docs.docker.com/config/containers/resource_constraints/
第二个不太理想的选项是定义节点标签,将节点分成大小相等的组,其中大小基于资源。然后,您可以滥用允许跨 HA 区域分配工作负载的功能,以根据机器资源在机器之间分配工作负载。为此,您将使用放置首选项分布策略在标签的不同值之间分布工作负载:
version: "3.7"
services:
db:
image: postgres
deploy:
placement:
preferences:
- spread: node.labels.zone
推荐阅读
- android - Android P FingerprintManager.hasEnrolledFingerprints 替换
- mysql - MySQL 从 txt 文件导入浮点值
- python-3.x - 将 pandas 数据框中选定列中的浮动值缩放到 0 到 1 之间
- angular - 如何在我的自定义角度组件上设置属性
- javascript - 如何简单地测试 Web 应用程序的数据是否会在被浏览器删除之前警告用户?
- python - run_until_complete 和 ensure_future 之间的 Python 关系
- apache - 我从 localhost 移动到 webhost 的 php 文件无法正常工作
- types - F# 类型“int list”与类型“int”不匹配
- git-commit - 为什么在 git 中不推送就提交?
- ios - 更新元组数组中的每个键