Docker Swarm 管理器代理节点?
Docker Swarm managers acting nodes?
我已经创建了包含 3 个集群管理器和 3 个节点的设置。
你可以在下面看到,在有 3 个 master 和 3 个 worker 的情况下,实际上我有 3 个 managers 和 6 个 nodes。管理人员是否也能够 运行 容器,而不仅仅是工人?我是不是在设置中遗漏了一些东西,或者这是为了像现在这样工作?
当我执行 docker 信息命令时,我得到这个输出:
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
它们将 运行 在集群中的所有机器上。由于端口冲突,增加更多将开始失败。
就 运行 服务而言,作为集群管理器的节点(主机)运行 与作为工作者的 运行 没有什么不同。拥有一个 3 节点群,每个节点上都有一个群管理器(并且没有工作人员)是非常好的。
关于端口冲突,您需要在创建服务时指定public端口(在主机上)。例如:
docker create service --name redis --publish 8080:80 --replicas 5 redis:latest
Docker 然后会将 任何节点上的端口 8080 的任何传入请求负载均衡 到集群上的一个 redis 容器(不一定在同一个节点作为传入请求)
感谢@Mark O'Connor 的回答是:
By default manager nodes also act as a worker nodes.
Manager 可以被 drained 并保留 "only" manager,所以你将执行此命令来让 manager 不再是 worker:
docker node update --availability drain *manager_name*
我已经创建了包含 3 个集群管理器和 3 个节点的设置。
你可以在下面看到,在有 3 个 master 和 3 个 worker 的情况下,实际上我有 3 个 managers 和 6 个 nodes。管理人员是否也能够 运行 容器,而不仅仅是工人?我是不是在设置中遗漏了一些东西,或者这是为了像现在这样工作?
当我执行 docker 信息命令时,我得到这个输出:
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
它们将 运行 在集群中的所有机器上。由于端口冲突,增加更多将开始失败。
就 运行 服务而言,作为集群管理器的节点(主机)运行 与作为工作者的 运行 没有什么不同。拥有一个 3 节点群,每个节点上都有一个群管理器(并且没有工作人员)是非常好的。
关于端口冲突,您需要在创建服务时指定public端口(在主机上)。例如:
docker create service --name redis --publish 8080:80 --replicas 5 redis:latest
Docker 然后会将 任何节点上的端口 8080 的任何传入请求负载均衡 到集群上的一个 redis 容器(不一定在同一个节点作为传入请求)
感谢@Mark O'Connor 的回答是:
By default manager nodes also act as a worker nodes.
Manager 可以被 drained 并保留 "only" manager,所以你将执行此命令来让 manager 不再是 worker:
docker node update --availability drain *manager_name*