【问题标题】:Docker Swarm managers acting nodes?Docker Swarm 管理器代理节点?
【发布时间】:2016-08-26 14:24:26
【问题描述】:

我创建了具有 3 个集群管理器和 3 个节点的设置。

您可以在下面看到,在 3 个 master 和 3 个 worker 的情况下,实际上我有 3 个 manager 和 6 个节点。管理人员也能够运行容器,而不仅仅是工作人员,这是不是一个想法?我是在设置中遗漏了什么,还是打算按现在的方式工作?

当我执行 docker info 命令时,我得到这个输出:

ubuntu@manager3:~$ docker info
Containers: 4
 Running: 3
 Paused: 0
 Stopped: 1
Images: 3
Server Version: 1.12.0
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 23
 Dirperm1 Supported: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: overlay bridge host null
Swarm: active
 NodeID: 9uv3xhwzibx52xghpsa0sp3f7
 Is Manager: true
 ClusterID: 04r095rvj6b4i7ygbnr2quo9e
 **Managers: 3
 Nodes: 6**
 Orchestration:
  Task History Retention Limit: 5
 Raft:
  Snapshot interval: 10000
  Heartbeat tick: 1
  Election tick: 3
 Dispatcher:
  Heartbeat period: 5 seconds
 CA configuration:
  Expiry duration: 3 months
 Node Address: 172.100.0.23
Runtimes: runc
Default Runtime: runc
Security Options: apparmor
Kernel Version: 3.13.0-92-generic
Operating System: Ubuntu 14.04.4 LTS
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 992.5 MiB
Name: manager3
ID: MUXB:GUNV:HIDO:APRJ:S2JU:763E:QSOL:2554:EZJL:L4OI:6TS5:RD7O
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
WARNING: No swap limit support
Insecure Registries:
 127.0.0.0/8

当我创建一些服务在 swarm 集群上运行时:

docker service create --replicas=3 --name redis redis:latest

其中一些将运行在经理身上,一些运行在工人身上。这让我很困惑。

如果我创建更多服务

docker service create --replicas=6 --name redis redis:latest

它们将在集群中的所有机器上运行。由于端口冲突,增加更多将开始失败。

【问题讨论】:

    标签: docker docker-machine docker-swarm


    【解决方案1】:

    就运行服务而言,作为 swarm manager 运行的节点(主机)与作为 worker 运行的节点(主机)没有什么不同。拥有一个 3 个节点的 swarm,每个节点上都有一个 swarm 管理器(并且没有 worker)是非常好的。

    关于端口冲突,需要在创建服务时指定公共端口(在主机上)。例如:

    docker create service --name redis --publish 8080:80 --replicas 5 redis:latest
    

    Docker 然后将对任何节点上端口 8080 的任何传入请求负载平衡到集群上的一个 redis 容器(不一定与传入请求在同一节点上)

    【讨论】:

    • 那么没有可能限制管理人员运行服务?还有一个问题:如果我在服务发现代码中使用 Consul 来运行一些微服务,并且我在 --net=host 模式下有 consul 代理,那么来自覆盖网络的微服务是否有机会找到并路由来自/到 --net 的流量=主机网络? :$
    • @DušanŠušić 可以将管理器配置为不运行容器。见:docs.docker.com/engine/swarm/admin_guide/#/…
    • 正如@Mark O'Connor 所写,您可以指定经理不充当工人。您还可以在创建/更新服务时使用约束来指定它们在哪些节点上运行。请参阅:docs.docker.com/engine/reference/commandline/service_create/#/…。至于您的其他问题,请创建一个新的 stackoverflow 帖子,否则其他人将找不到它。这个问题也不是很清楚。尝试包括细节,代码示例。
    【解决方案2】:

    感谢@Mark O'Connor 的回答是:

    默认情况下,管理节点也充当工作节点。

    经理可以被耗尽并保持“唯一”经理,因此您将执行此命令以使经理不再是工人:

    docker node update --availability drain *manager_name*
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-11
      • 2019-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多