gpt4 book ai didi

不同节点上的 Docker 群副本

转载 作者:行者123 更新时间:2023-12-04 12:17:33 25 4
gpt4 key购买 nike

我正在使用 docker-compose 文件版本 3 及其部署 key 来运行 swarm(docker 版本 1.13),我想复制一个服务以使其再次恢复单节点故障。

但是,当我添加这样的部署部分时:

deploy:
replicas: 2

在我的四节点集群中,有时我会在同一节点上安排两个副本。我缺少的是在不同节点上安排两个实例的约束。

我知道有一个 global我可以使用模式,但这会在每个节点上运行一个实例,即在我的例子中是四个实例,而不是两个。

是否有一种简单的方法可以以通用方式指定此约束,而不必求助于 global 的组合?和一个标签,以防止其他实例远离?

编辑:再次尝试后,我发现这次将容器安排在不同的节点上。我开始怀疑我是否有过 'node.hostname == X'约束到位。

编辑 2:在另一个服务更新之后 - 并且没有任何放置限制 - 服务再次被安排在同一节点上(如 ManoMarks Visualizer 所示):

enter image description here

最佳答案

docker/cli PR 1612似乎解决了 issue 26259 ,并已在 docker 19.03 中发布.

Added new switch --replicas-max-per-node switch to docker service

How to verify it

Create two services and specify --replicas-max-per-node one of them:

docker service create --detach=true --name web1 --replicas 2 nginx
docker service create --detach=true --name web2 --replicas 2 --replicas-max-per-node 1 nginx

See difference on command outputs:

$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
0inbv7q148nn web1 replicated 2/2 nginx:latest
9kry59rk4ecr web2 replicated 1/2 (max 1 per node) nginx:latest

$ docker service ps --no-trunc web2
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
bf90bhy72o2ry2pj50xh24cfp web2.1 nginx:latest@sha256:b543f6d0983fbc25b9874e22f4fe257a567111da96fd1d8f1b44315f1236398c limint Running Running 34 seconds ago
xedop9dwtilok0r56w4g7h5jm web2.2 nginx:latest@sha256:b543f6d0983fbc25b9874e22f4fe257a567111da96fd1d8f1b44315f1236398c Running Pending 35 seconds ago "no suitable node (max replicas per node limit exceed)"


错误消息是:
no suitable node (max replicas per node limit exceed)

来自 Sebastiaan van Stijn 的示例:

Create a service with max 2 replicas:

docker service create --replicas=2 --replicas-max-per-node=2 --name test nginx:alpine
docker service inspect --format '{{.Spec.TaskTemplate.Placement.MaxReplicas}}' test
2

Update the service (max replicas should keep its value)

docker service update --replicas=1 test
docker service inspect --format '{{.Spec.TaskTemplate.Placement.MaxReplicas}}' test
2

Update the max replicas to 1:

docker service update --replicas-max-per-node=1 test
docker service inspect --format '{{.Spec.TaskTemplate.Placement.MaxReplicas}}' test
1

And reset to 0:

docker service update --replicas-max-per-node=0 test
docker service inspect --format '{{.Spec.TaskTemplate.Placement.MaxReplicas}}' test
0

关于不同节点上的 Docker 群副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42624791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com