搭建 Docker Swarm 集群
搭建 Docker Swarm 集群
准备三台主机 A:192.168.1.5 B:192.168.1.7 C:192.168.1.10 Docker Swarm集群中的节点主机开放以下三个端口 2377端口, 用于集群管理通信 7946端口, 用于集群节点之间的通信 4789端口, 用于overlay网络流量 关闭防火墙 systemctl stop firewalld.service systemctl disable firewalld.service 在A上执行 创建集群并加入集群 $ docker swarm init --advertise-addr 192.168.1.5:2377 --listen-addr 192.168.1.5:2377 initialized: current node (sf4zgbesw21ko536rrgpxspv4) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-3mlkj1pouzqm8mjdqdnj5gw30i4ahjw5aayfu177vzernbzmod-1svbkyjwzhv0swzojp6xh3shm 192.168.1.5:2377 查看集群中的节点 $ docker node ls 查看 manager 角色的 token $ docker swarm join-token manager To add a manager to this swarm, run the following command: docker swarm join --token SWMTKN-1-3mlkj1pouzqm8mjdqdnj5gw30i4ahjw5aayfu177vzernbzmod-0ib338l48ybx8csrlpr3yn7ug 192.168.1.5:2377 查看 worker 角色的 token $ docker swarm join-token worker To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-3mlkj1pouzqm8mjdqdnj5gw30i4ahjw5aayfu177vzernbzmod-1svbkyjwzhv0swzojp6xh3shm 192.168.1.5:2377 在B上执行 把 B 以 manager 角色加入集群 (上面的 token 那段命令,再接上当前的监听的IP ) $ docker swarm join --token SWMTKN-1-3mlkj1pouzqm8mjdqdnj5gw30i4ahjw5aayfu177vzernbzmod-0ib338l48ybx8csrlpr3yn7ug 192.168.1.5:2377 --advertise-addr 192.168.1.7:2377 --listen-addr 192.168.1.7:2377 查看一下节点 $ docker node ls 在C上执行 把 C 以 worker 角色加入集群(上面的 token 那段命令,再接上当前的监听的IP ) $ docker swarm join --token SWMTKN-1-3mlkj1pouzqm8mjdqdnj5gw30i4ahjw5aayfu177vzernbzmod-1svbkyjwzhv0swzojp6xh3shm 192.168.1.5:2377 --advertise-addr 192.168.1.10:2377 --listen-addr 192.168.1.10:2377 在 worker 节点查看集群中的节点会报没有权限的错误 $ docker node ls Error response from daemon: This node is not a swarm manager. Worker nodes can't be used to view or modify cluster state. 集群建好了,就开始创建服务,可以在任意 manager 角色的主机上创建 这个创建容器几乎一样,--replicas 5 在集群中运行五个实例副本 -p 80:8080 服务绑定 80 端口 $ docker service create --name web-fa -p 80:8080 --replicas 5 nigelpoulton/pluralsight-docker-ci k4qpts36rterzzsy0ys0f7rjw overall progress: 5 out of 5 tasks 1/5: running [==================================================>] 2/5: running [==================================================>] 3/5: running [==================================================>] 4/5: running [==================================================>] 5/5: running [==================================================>] 打开浏览器,输入 A B C 任意主机的 IP 访问一下,看看能否打开一个web页面 查看服务列表 $ docker service ls ID NAME MODE REPLICAS IMAGE PORTS k4qpts36rter web-fa replicated 5/5 nigelpoulton/pluralsight-docker-ci:latest *:80->8080/tcp 查看具体服务中运行的任务 $ docker service ps web-fa ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS 94thjgudevf0 web-fa.1 nigelpoulton/pluralsight-docker-ci:latest host Running Running 7 minutes ago o0ll8yuo5w0x web-fa.2 nigelpoulton/pluralsight-docker-ci:latest host Running Running 7 minutes ago nkonamy3qa97 web-fa.3 nigelpoulton/pluralsight-docker-ci:latest host Running Running 7 minutes ago k311fuxvvz0c web-fa.4 nigelpoulton/pluralsight-docker-ci:latest aaa Running Running 7 minutes ago sttj7tt70k99 web-fa.5 nigelpoulton/pluralsight-docker-ci:latest host Running Running 7 minutes ago 查看服务的详细信息 docker service inspect --pretty web-fa 还有一些实用命令 退出集群: docker swarm leave -f 删除服务: docker service rm <service-name> 总结一下,当任务副本数大于集群中的节点数时,势必有节点得运行两个容器实例。通过 docker ps 可以看到多个容器实例并没有绑定到宿主机的端口,如果绑定同一个端口,势必会冲突。 建议,如果想学得深入点,还是得买书呀,网上都是教程都近似于笔记,很多细节没有讲。《深入浅出 Docker》还可以,书也不厚,最烦那种外文翻译出来厚厚地书了,有些真是一半都是废话,浪费生命啊。。。 查看节点为例:[linuxidc@host ~]$ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION ioi5usennpdgjpb6ehxmkifgm host Down Active 19.03.4 ozeybjcrl9z913qtx2xqkexiq host Ready Active Reachable 19.03.4 sf4zgbesw21ko536rrgpxspv4 * host Ready Active Leader 19.03.4 x5yvbr44s6294qjf1bx9fhcro host Ready Active Reachable 19.03.4
说明: sf4zgbesw21ko536rrgpxspv4 * : 这个 * 表示当前执行命令的主机 HOSTNAME:由于我是虚拟机副本创建的,都是一样的名字。你可以在其中一台上用 sodu hostname aaa 来临时改变主机名,然后再运行一下 docker node ls 会看到列表中主机名变了 MANAGER STATUS:直译就叫管理员状态,这一栏为空就表示 worker 节点, Leader 领导者,Reachable 追随者
linuxboy的RSS地址:https://www.linuxboy.net/rssFeed.aspx
本文永久更新链接地址:https://www.linuxboy.net/Linux/2020-04/162864.htm
评论暂时关闭