docker探索-swarm搭建docker集群(七)


前言

Swarm 在 Docker 1.12 版本之前屬於一個獨立的項目,在 Docker 1.12 版本發布之后,該項目合並到了 Docker 中,成為 Docker 的一個子命令,docker swarm是創建服務器集群的工具,只需要幾條命令就可以創建一個服務器集群。它內置一些服務器集群需要的工具,比如說:服務查找,網絡,負載均衡等等

一、環境

     centos 7.3

    Docker version 1.12.6

ip 角色
192.168.6.130 manager
192.168.6.131 worker
192.168.6.132 worker

 

 

 

 

二、集群

2.1、在192.168.6.130中,初始化集群

[root@jacky jacky]# docker swarm init --advertise-addr 192.168.6.130:2377
Swarm initialized: current node (4devzwb6rpimfpteqr17h2jx9) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-5r3ujri3th4038jp7q66zrfo56eqo0sabyage8ahc10121evog-ah9bptj9d7txdu6y91w7qxd81 \
    192.168.6.130:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

[root@jacky jacky]# 

說明:--advertise-addr 設置監聽Ip和端口號 

2.2、初始化完、查看集群上的節點列表

[root@jacky jacky]# docker node ls
ID                           HOSTNAME           STATUS  AVAILABILITY  MANAGER STATUS
4devzwb6rpimfpteqr17h2jx9 *  jacky.localdomain  Ready   Active        Leader

說明:目前只有一個節點,狀態為Ready,是個Leader

2.3、192.168.6.131,加入集群

首先,切換到192.168.6.131,然后輸入

[root@jacky jacky]#  docker swarm join \
> --token SWMTKN-1-5r3ujri3th4038jp7q66zrfo56eqo0sabyage8ahc10121evog-ah9bptj9d7txdu6y91w7qxd81 \
> 192.168.6.130:2377
This node joined a swarm as a worker.
[root@jacky jacky]# 

2.4、192.168.6.132,加入集群

首先,切換到192.168.6.132,然后輸入

[root@jacky jacky]# docker swarm join \
> --token SWMTKN-1-5r3ujri3th4038jp7q66zrfo56eqo0sabyage8ahc10121evog-ah9bptj9d7txdu6y91w7qxd81 \
> 192.168.6.130:2377
This node joined a swarm as a worker.
[root@jacky jacky]# 

2.5、接着回到192.168.6.130中,查看集群中節點信息

[root@jacky jacky]# docker node ls
ID                           HOSTNAME           STATUS  AVAILABILITY  MANAGER STATUS
4devzwb6rpimfpteqr17h2jx9 *  jacky.localdomain  Ready   Active        Leader
5mjtda2uzzu43v2xuxdco5ogr    jacky.localdomain  Ready   Active        
a8wdtux82dolsbgmv6ff0uu94    jacky.localdomain  Ready   Active

說明:
AVAILABILITY列:
顯示調度程序是否可以將任務分配給節點:

  • Active 意味着調度程序可以將任務分配給節點。
  • Pause 意味着調度程序不會將新任務分配給節點,但現有任務仍在運行。
  • Drain 意味着調度程序不會向節點分配新任務。調度程序關閉所有現有任務並在可用節點上調度它們。

MANAGER STATUS列
顯示節點是屬於manager或者worker

    • 沒有值 表示不參與群管理的工作節點。
    • Leader 意味着該節點是使得群的所有群管理和編排決策的主要管理器節點。
    • Reachable 意味着節點是管理者節點正在參與Raft共識。如果領導節點不可用,則該節點有資格被選為新領導者。
    • Unavailable 意味着節點是不能與其他管理器通信的管理器。如果管理器節點不可用,您應該將新的管理器節點加入群集,或者將工作器節點升級為管理器。

2.6、創建集群網絡overlay

[root@jacky jacky]# docker network create --driver overlay skynet
843z9qb9c6douf7ir7l3iimqn
[root@jacky jacky]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
ad5125729239        bridge              bridge              local               
5a15f008fb38        host                host                local               
6echvokyh2m3        ingress             overlay             swarm               
28068704e605        none                null                local               
843z9qb9c6do        skynet              overlay             swarm

可以看到新創建的網絡名稱為skynet,類型為overlay

三、部署測試

3.1、在管理節點中執行

docker service create -p 80:80 --name webserver --replicas 5 httpd

3.2、查看集群中的服務

[root@node1 jacky]# docker service ls
ID            NAME       REPLICAS  IMAGE                 COMMAND
0blhke4vywh8  viz        0/1       manomarks/visualizer  
7batkp4zv9f3  portainer  1/1       portainer/portainer   -H unix:///var/run/docker.sock
7kw3ovihgqgb  webserver  5/5       httpd    

3.3、查看集群中的webserver服務

[root@node1 jacky]# docker service ps webserver
ID                         NAME             IMAGE  NODE             DESIRED STATE  CURRENT STATE          ERROR
e0jqrg479muha7ow8bf34rv39  webserver.1      httpd  node1.jacky.com  Running        Running 2 hours ago    
23n9df2vww079h5rgkxlri4uy   \_ webserver.1  httpd  node1.jacky.com  Shutdown       Complete 2 hours ago   
8b8cs13u9yjsoru3ybyzzv9e6   \_ webserver.1  httpd  node2.jacky.com  Shutdown       Rejected 20 hours ago  "No such image: httpd:latest"
8lvx0ynaohlcfyp11jgji4m3q  webserver.2      httpd  node1.jacky.com  Running        Running 2 hours ago    
0q8lrzlybo1exl3bngwwfy386   \_ webserver.2  httpd  node1.jacky.com  Shutdown       Complete 2 hours ago   
eoq4a2sqx80a0hly6tizt5ucf   \_ webserver.2  httpd  node3.jacky.com  Shutdown       Shutdown 4 hours ago   
10juv2jp1ay9rjbu5hgw6yhs3   \_ webserver.2  httpd  node3.jacky.com  Shutdown       Failed 20 hours ago    "starting container failed: er…"
7xa8uoa8775i5nl0zzi373xbt   \_ webserver.2  httpd  node3.jacky.com  Shutdown       Failed 20 hours ago    "starting container failed: er…"
6puw8t22w0exgiwqzt5vi8fc1  webserver.3      httpd  node1.jacky.com  Running        Running 2 hours ago    
74osfdgl5ovp1c3e5s012b3f6   \_ webserver.3  httpd  node1.jacky.com  Shutdown       Complete 2 hours ago   
cwzuewjsolewap28ctvy3jxaa   \_ webserver.3  httpd  node3.jacky.com  Shutdown       Shutdown 4 hours ago   
9bb5q38zqk153uqdex1yfcu4e   \_ webserver.3  httpd  node3.jacky.com  Shutdown       Failed 20 hours ago    "starting container failed: er…"
1uvoczhsfz5ncp1emdueljwqa   \_ webserver.3  httpd  node3.jacky.com  Shutdown       Failed 20 hours ago    "starting container failed: er…"
0j9hsq18v3pzoecmrjg0qtynh  webserver.4      httpd  node1.jacky.com  Running        Running 2 hours ago    
dyhyy55xlkm3abw2cqm0k8y6h   \_ webserver.4  httpd  node1.jacky.com  Shutdown       Complete 2 hours ago   
8dymtjskyxhw5zj0ombpv0pm1   \_ webserver.4  httpd  node2.jacky.com  Shutdown       Shutdown 4 hours ago   
1b6u7rtknpgmwyfn3j3p94wm6   \_ webserver.4  httpd  node2.jacky.com  Shutdown       Rejected 20 hours ago  "No such image: httpd:latest"
1af72d5vpu1xg3u0qypnvlier   \_ webserver.4  httpd  node2.jacky.com  Shutdown       Rejected 20 hours ago  "No such image: httpd:latest"
897au9dm88i94l0scg69slu6z  webserver.5      httpd  node1.jacky.com  Running        Running 2 hours ago    
eqt7g4bk6e2kqy6qbnr13gfeh   \_ webserver.5  httpd  node1.jacky.com  Shutdown       Complete 2 hours ago   
7vq8u2eycraafwzlmcgg1e80d   \_ webserver.5  httpd  node3.jacky.com  Shutdown       Shutdown 4 hours ago   
ehu6f1xun8ha6lw7cyex7jjrw   \_ webserver.5  httpd  node2.jacky.com  Shutdown       Shutdown 4 hours ago 

3.4、訪問http://192.168.6.130、http://192.168.6.131或http://192.168.6.132

 說明:192.168.6.131和192.168.6.132沒有部署httpd也能狗訪問,swarm搭建docker集群測試成功

四、安裝Portainer,圖形化管理docker

4.1、關閉selinux

setenforce 0

4.2、在manager節點中執行,如下:

docker service create \
--name portainer \
--publish 9000:9000 \
--constraint 'node.role == manager' \
--mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
portainer/portainer \
-H unix:///var/run/docker.sock

4.3、訪問192.168.6.130.9000

五、swarm集群其他操作

5.1、更新節點的可見性狀態

[root@node1 jacky]# docker node ls
ID                           HOSTNAME         STATUS  AVAILABILITY  MANAGER STATUS
4devzwb6rpimfpteqr17h2jx9 *  node1.jacky.com  Ready   Active        Leader
5mjtda2uzzu43v2xuxdco5ogr    node3.jacky.com  Ready   Active        
a8wdtux82dolsbgmv6ff0uu94    node2.jacky.com  Ready   Active        
[root@node1 jacky]# docker node update --availability Drain node2.jacky.com
node2.jacky.com
[root@node1 jacky]# docker node ls
ID                           HOSTNAME         STATUS  AVAILABILITY  MANAGER STATUS
4devzwb6rpimfpteqr17h2jx9 *  node1.jacky.com  Ready   Active        Leader
5mjtda2uzzu43v2xuxdco5ogr    node3.jacky.com  Ready   Active        
a8wdtux82dolsbgmv6ff0uu94    node2.jacky.com  Ready   Drain         
[root@node1 jacky]# docker node update --availability Active node2.jacky.com
node2.jacky.com
[root@node1 jacky]# docker node ls
ID                           HOSTNAME         STATUS  AVAILABILITY  MANAGER STATUS
4devzwb6rpimfpteqr17h2jx9 *  node1.jacky.com  Ready   Active        Leader
5mjtda2uzzu43v2xuxdco5ogr    node3.jacky.com  Ready   Active        
a8wdtux82dolsbgmv6ff0uu94    node2.jacky.com  Ready   Active        
[root@node1 jacky]# 

5.2、升級或降級節點

您可以將工作程序節點提升為manager角色。這在管理器節點不可用或者您希望使管理器脫機以進行維護時很有用。 類似地,您可以將管理器節點降級為worker角色。
無論您升級或降級節點,您應該始終在群中維護奇數個管理器節點。

  • 升級節點
[root@node1 jacky]# docker node promote node3.jacky.com node2.jacky.com
[root@node1 jacky]# docker node ls
ID                           HOSTNAME         STATUS  AVAILABILITY  MANAGER STATUS
4devzwb6rpimfpteqr17h2jx9 *  node1.jacky.com  Ready   Active        Leader
5mjtda2uzzu43v2xuxdco5ogr    node3.jacky.com  Ready   Active        Unreachable
a8wdtux82dolsbgmv6ff0uu94    node2.jacky.com  Ready   Active        Reachable
  • 降級節點
[root@node1 jacky]# docker node demote node3.jacky.com node2.jacky.com
Manager node3.jacky.com demoted in the swarm.
Manager node2.jacky.com demoted in the swarm.
[root@node1 jacky]# docker node ls
ID                           HOSTNAME         STATUS  AVAILABILITY  MANAGER STATUS
4devzwb6rpimfpteqr17h2jx9 *  node1.jacky.com  Ready   Active        Leader
5mjtda2uzzu43v2xuxdco5ogr    node3.jacky.com  Ready   Active        
a8wdtux82dolsbgmv6ff0uu94    node2.jacky.com  Ready   Active  

5.3、退出docker swarm集群

在對應的worker節點執行如下命令

[root@node1 jacky]# docker swarm leave

如果想把manager節點上已經退出集群的節點信息刪除,如下:

[root@node1 jacky]# docker node rm node2.jacky.com

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM