搭建 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

相关内容