Muh*_*eed 5 system-requirements docker docker-compose docker-swarm
在Docker Swarm中,您可以设置最大系统要求,如下所示:
my-service
image: hello-world
deploy:
resources:
limits:
cpus: '2'
memory: 4GB
Run Code Online (Sandbox Code Playgroud)
我有一个容器,其最低系统要求是2个CPU内核和4GB RAM,这是我的Docker Swarm中节点的确切大小.这意味着当此容器运行时,它必须是该节点上运行的唯一容器.
但是,当我将容器与其他容器一起运行时,其他容器将放置在同一节点上.如何确保Docker为此容器提供最低级别的CPU和RAM?
我reservations按照@yamenk的建议添加了,但是我仍然在同一节点上启动其他容器,这会导致我试图保护的容器出现性能问题:
my-service
image: hello-world
deploy:
resources:
reservations:
cpus: '2'
memory: 4GB
Run Code Online (Sandbox Code Playgroud)
更新
\n\n显然, docker swarm中内存预留的效果没有得到很好的记录,并且它们已尽力工作。要了解内存预留标志的作用,请查看文档:
\n\n\n\n\n设置内存预留后,Docker 会检测内存争用或内存不足,并强制容器将其消耗限制在预留限制内。
\n\n...
\n\n内存预留是一项软限制功能,不保证不会超过该限制。相反,该功能尝试确保当内存竞争激烈时,根据预留提示/设置分配内存。
\n
要强制同一节点上没有其他容器运行,您需要设置服务约束。您可以做的是为群中的节点提供特定标签,并使用这些标签来安排服务仅在具有这些特定标签的节点上运行。
\n\n如此处所述,可以使用以下命令将节点标签添加到节点:
\n\ndocker node update --label-add hello-world=yes <node-name>\nRun Code Online (Sandbox Code Playgroud)\n\n然后在堆栈文件中,您可以限制容器仅在具有指定标签的节点上运行,而在其他容器上运行以避免标有hello-world=yes.
my-service:\n image: hello-world\n deploy:\n placement:\n constraints:\n - node.labels.hello-world == yes\n\nother-service:\n ...\n deploy:\n placement:\n constraints:\n - node.labels.hello-world == no\nRun Code Online (Sandbox Code Playgroud)\n\n如果你想在多个节点上启动 my-service 的副本,并且每个节点上仍然运行一个容器,则需要设置 my-service 的全局模式,并为要运行容器的节点添加相同的标签。
\n\n全局模式确保只有一个容器将运行满足服务约束的每个节点:
\n\nmy-service:\n image: hello-world\n deploy:\n mode: global\n placement:\n constraints:\n - node.labels.hello-world == yes\nRun Code Online (Sandbox Code Playgroud)\n\n旧答案:
\n\n您可以这样设置资源预留:
\n\nversion: \'3\'\nservices:\n redis:\n image: redis:alpine\n deploy:\n resources:\n reservations:\n cpus: \'1\'\n memory: 20M\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1527 次 |
| 最近记录: |