我在docker swarm模式中有3个节点,其中。
1个经理和2个工作人员节点
我在这里遇到了2个疑问?
如果我将服务扩展到比我们拥有的节点更大的数量,会有什么影响。 (假设将一项服务扩展为5或6 )
如果服务具有必须仅在管理器节点上运行的约束,并且我们将数量扩展到高于管理器节点数量(例如,缩放到3)
>我在管理器节点中运行了mysql服务,该服务器在docker-compose中定义了一个约束放置,以便在manager节点中运行。这是我在尝试将其缩放到 6 时看到的效果,尽管我只有3个节点。 docker service logs
显示4/6正在运行 并且 甚至波动有时显示6/6且有时5/6 < /强>
这里的docker-compose.yml
version: '3.4'
networks:
smstake:
ipam:
config:
- subnet: 10.0.10.0/24
services:
db:
image: mysql:5.7
networks:
- smstake
ports:
- "3306"
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: mydb
MYSQL_USER: myuser
MYSQL_PASSWORD: password
volumes:
- mysql_data_2:/var/lib/mysql
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
app:
image: SMSTAKE_VERSION
ports:
- 8000:80
networks:
- smstake
depends_on:
- db
# - migration
deploy:
mode: replicated
replicas: 3
migration:
# build: .
image: SMSTAKE_VERSION
command: sh -xc "sleep 10 && pwd && php artisan migrate:fresh --seed 2>&1"
networks:
- smstake
depends_on:
- app
- db
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
volumes:
mysql_data_2:
答案 0 :(得分:1)
如果我将服务扩展到比我们拥有的节点更大的数量,会有什么影响。 (假设将一个服务扩展到5或6)
如果扩展超出节点大小,则某些节点将运行同一服务的多个实例。 Docker-swarm选择哪些节点取决于您施加的约束:它随机选择一个匹配约束的节点。
如果没有与约束匹配的节点,则不缩放服务(它具有零实例)。在添加更多节点或更改约束的情况下,Docker-swarm会检查它是否可以启动新实例。 Docker-swarm总是尝试遵循所需的状态(如果服务具有scale = 3,那么Docker-swarm将在匹配约束的任何节点上启动3个实例,即使它只是一个节点,它将在该节点上启动3个实例)。
如果服务具有必须仅在管理器节点上运行的约束,并且我们将数量扩展到高于管理器节点数量(例如,缩放到3)
,那么规模会发生什么?
与上述效果相同。