Docker Swarm管理器代理节点?

时间:2016-08-25 12:00:50

标签: docker docker-machine docker-swarm

我已经使用3个群体管理器和3个节点创建了设置。

您可以在下面看到,在3个主人和3个工人的情况下,实际上我有 3个管理员和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

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

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

其中一些将针对经理,一些针对工人。那令我困惑。

如果我创建更多服务

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

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

2 个答案:

答案 0 :(得分:3)

作为群集管理器运行的节点(主机)与运行服务的节点(主机)没有区别。拥有一个3节点群并且每个群上都有一个群体管理器(而且没有工作者)是完全没问题的。

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

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

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

答案 1 :(得分:3)

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

  

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

管理员可以被排空并保持“唯一”经理,因此您将执行此命令以使经理停止成为工人:

docker node update --availability drain *manager_name*