1

我在 docker swarm 模式中有 3 个节点。

1 个 Manager 和 2 个 Worker 节点

我在这里有两个疑问?

  1. 如果我将服务扩展到比我们拥有的节点更大的数量,将会产生什么影响。(假设将一项服务扩展到 5 或 6 个

  2. 如果服务有一个限制,即它必须仅在管理器节点上运行,并且我们扩展的数量高于管理器节点的数量,那么规模会发生什么。(例如扩展到 3)

我在管理器节点中运行 mysql 服务,该服务在 docker-compose 中定义了一个约束放置以在管理器节点中运行。这是我尝试将其扩展到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:
4

1 回答 1

1

如果我将服务扩展到比我们拥有的节点更大的数量,将会产生什么影响。(假设将一项服务扩展到 5 或 6 个)

如果扩展超出节点大小,则某些节点将运行同一服务的多个实例。Docker-swarm 根据您施加的约束选择哪些节点:它随机选择一个与约束匹配的节点。

如果没有与约束匹配的节点,则不会扩展服务(它有零个实例)。在添加更多节点或更改约束时,Docker-swarm 会检查它是否可以启动新实例。Docker-swarm 总是尝试遵循所需的状态(如果服务的 scale=3,那么 Docker-swarm 将在任何与约束匹配的节点上启动 3 个实例,即使它只有一个节点,它也会在该节点上启动 3 个实例)。

如果服务有一个限制,即它必须仅在管理器节点上运行,并且我们扩展的数量高于管理器节点的数量,那么规模会发生什么。(例如扩展到 3)

效果和上面一样。

于 2018-04-16T07:37:23.577 回答