docker 蜂拥而至。 运行 每个节点只提供一次服务
docker swarm . Run some service only once per node
我用的是docker版本
Client:
Version: 18.06.1-ce
API version: 1.38
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:24:51 2018
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: 18.06.1-ce
API version: 1.38 (minimum version 1.12)
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:23:15 2018
OS/Arch: linux/amd64
Experimental: false
和 docker-compose 用于配置我的服务。我想在一些特别标记的 3 个节点上有 3 个 运行 服务器的副本。为此,我使用像 :
这样的 yaml 配置
version: '3.7'
services:
ser:
deploy:
placement:
constraints:
- "node.labels.cloud.type == nodesforservice"
replicas: 3
restart_policy:
condition: any
rollback_config:
delay: 0s
parallelism: 0
update_config:
delay: 6s
parallelism: 1
environment:
- affinity:service!=stackname_servicename
image: service:latest
并通过
部署此配置
docker stack deploy --compose-file docker-stack.yml stackname
但我发现 affinity:service!=stackname_servicename
无法正常工作(或根本无法工作)。它仅适用于已弃用的独立模式。如果当前只有 2 个节点可用,则服务将被部署到某个节点两次。这是我试图避免的。
是否有可能 docker swarm 明确表示不允许使用同一服务的 2 个容器?我发现只能使用 --mode global
创建全局服务,但我只需要 3 个实例,而不是更多。
这是一个相当古老的话题,但是使用节点标签作为放置约束并结合全局模式部署可以解决问题。
deploy:
mode: global
placement:
constraints:
- node.labels.cloud.type == nodesforservice
当然需要将节点标签"cloud.type=nodesforservice"应用于所需数量的节点。
对于Docker swarm 没有亲和力这回事。
如果您正在使用 docker 创建服务,您可以使用 --replicas-max-per-node 1 强制容器和节点之间的 1:1 关系。
如果您使用的是撰写文件,您可以在以下位置声明 max_replicas_per_node:
deploy:
placement:
max_replicas_per_node: 1
如果您需要进一步控制哪个节点可以运行容器使用标签,请将标签匹配放置在约束块下。
此处有更多详细信息:Compose and Docker compatibility matrix
我用的是docker版本
Client:
Version: 18.06.1-ce
API version: 1.38
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:24:51 2018
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: 18.06.1-ce
API version: 1.38 (minimum version 1.12)
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:23:15 2018
OS/Arch: linux/amd64
Experimental: false
和 docker-compose 用于配置我的服务。我想在一些特别标记的 3 个节点上有 3 个 运行 服务器的副本。为此,我使用像 :
这样的 yaml 配置version: '3.7'
services:
ser:
deploy:
placement:
constraints:
- "node.labels.cloud.type == nodesforservice"
replicas: 3
restart_policy:
condition: any
rollback_config:
delay: 0s
parallelism: 0
update_config:
delay: 6s
parallelism: 1
environment:
- affinity:service!=stackname_servicename
image: service:latest
并通过
部署此配置docker stack deploy --compose-file docker-stack.yml stackname
但我发现 affinity:service!=stackname_servicename
无法正常工作(或根本无法工作)。它仅适用于已弃用的独立模式。如果当前只有 2 个节点可用,则服务将被部署到某个节点两次。这是我试图避免的。
是否有可能 docker swarm 明确表示不允许使用同一服务的 2 个容器?我发现只能使用 --mode global
创建全局服务,但我只需要 3 个实例,而不是更多。
这是一个相当古老的话题,但是使用节点标签作为放置约束并结合全局模式部署可以解决问题。
deploy:
mode: global
placement:
constraints:
- node.labels.cloud.type == nodesforservice
当然需要将节点标签"cloud.type=nodesforservice"应用于所需数量的节点。
对于Docker swarm 没有亲和力这回事。
如果您正在使用 docker 创建服务,您可以使用 --replicas-max-per-node 1 强制容器和节点之间的 1:1 关系。
如果您使用的是撰写文件,您可以在以下位置声明 max_replicas_per_node:
deploy:
placement:
max_replicas_per_node: 1
如果您需要进一步控制哪个节点可以运行容器使用标签,请将标签匹配放置在约束块下。
此处有更多详细信息:Compose and Docker compatibility matrix