Docker Swarm介紹

1 什麼是swarm
Swarm是Docker公司推出的docker集羣管理平臺,它將一羣Docker主機變成了一臺單一的虛擬Docker主機。
Swarm使用標準的Docker API接口,因此,任何支持Docker API的工具都能使用Swarm,包括Docker Compose、Docker Machine、Jenkins等等。
Docker 1.12版本之後,Swarm已經包含在Docker引擎中了,不需要再手動安裝Swarm相關的組件了。
Swarm遵循可插拔原則(swap, plug, and play),它的後臺引擎是可替換的,在大規模生產環境中,可以將Swarm後端替換成更強大的後端(比如Mesos)。

2 swarm中的幾個概念
(1)Node
Swarm節點,是運行Docker引擎的一個實例,通常是一臺物理服務器或者是雲服務器。節點有兩類:
worker node:工作節點,接收和執行任務,運行具體的服務。
manager node:管理節點,用於執行集羣命令,調度任務等等。默認情況下管理節點同時也具有工作節點的功能,可以接收和執行任務。

(2)Service
集羣中具體要運行的容器。

(3)Task
集羣中要執行的命令。

3 Swarm常用命令
(1)集羣和節點操作

使用以下3臺服務器演示swarm命令:

ecs-dev-07
ecs-dev-08
ecs-dev-09

[root@ecs-dev-07 ~]# docker swarm init
Swarm initialized: current node (w45oeu9569u5vcp0f2i0z26xc) is now a manager.

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

    docker swarm join --token SWMTKN-1-3qhvwlzbh084t0xygh7semasver547auakxdo5xzdwp5mt91vk-10eep4z6ic54ws8zc7r6aqmhp 172.19.141.21:2377

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

# 將從節點加入集羣
docker swarm join --token SWMTKN-1-2v0mg19ouxu6svqdc1ufbwgz7tfrd9f0uhwqeriogygdcovowx-4d558q9qb51429j27at6teq2j 172.19.141.21:2377

# 如果希望從節點作爲manager角色加入集羣,則主節點上運行以下命令,重新創建token
[root@ecs-dev-07 ~]# docker swarm join-token manager
To add a manager to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-3qhvwlzbh084t0xygh7semasver547auakxdo5xzdwp5mt91vk-2zhuddonlxe1m0d4agpqzopyw 172.19.141.21:2377

# 查看集羣信息
[root@ecs-dev-07 ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
w45oeu9569u5vcp0f2i0z26xc *   ecs-dev-07          Ready               Active              Leader              19.03.5
x6io92f7wb9sb9ivq0hrr0xja     ecs-dev-08          Ready               Active              Reachable           19.03.4
vsf9pkvxai5m3184evskl2dsc     ecs-dev-09          Ready               Active              Reachable           19.03.5

# 將leader節點停掉,可以看到原來的leader節點狀態變成了Unreachable,另外一臺主機的角色變成了Leader
[root@ecs-dev-08 ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
w45oeu9569u5vcp0f2i0z26xc     ecs-dev-07          Unknown             Active              Unreachable         19.03.5
x6io92f7wb9sb9ivq0hrr0xja *   ecs-dev-08          Unknown             Active              Leader              19.03.4
vsf9pkvxai5m3184evskl2dsc     ecs-dev-09          Unknown             Active              Reachable           19.03.5

# 將當前節點從集羣中刪除
docker swarm leave -f

 (2)服務操作

# 創建一個具有2個實例的nginx集羣
docker service create --name nginx --replicas 2 --network actinia nginx:1.15

# 查看所有的服務列表
[root@ecs-dev-08 ~]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
nyyub2v4xt6s        nginx               replicated          2/2                 nginx:1.15

# 查看nginx服務的具體運行情況
[root@ecs-dev-08 ~]# docker service ps nginx 
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
rb4jd9t95hun        nginx.1             nginx:1.15          ecs-dev-08          Running             Running 45 seconds ago                       
s5ljg8d2nf38        nginx.2             nginx:1.15          ecs-dev-07          Running             Running 46 seconds ago

# 將nginx實例數量變成3個
[root@ecs-dev-08 ~]# docker service scale nginx=3
nginx scaled to 3
overall progress: 3 out of 3 tasks 
1/3: running   [==================================================>] 
2/3: running   [==================================================>] 
3/3: running   [==================================================>] 
verify: Service converged 

# 再次查看nginx服務的運行情況,可以看到當前nginx服務數量已經變成了3個
[root@ecs-dev-08 ~]# docker service ps nginx 
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
rb4jd9t95hun        nginx.1             nginx:1.15          ecs-dev-08          Running             Running 2 minutes ago                       
s5ljg8d2nf38        nginx.2             nginx:1.15          ecs-dev-07          Running             Running 2 minutes ago                       
r6ptddryp0pq        nginx.3             nginx:1.15          ecs-dev-09          Running             Running 8 seconds ago

# 還可以使用更強大的docker service update命令,對服務進行更多的修改,比如服務的鏡像版本、重啓策略、環境變量等等。
# 例如,修改服務的鏡像版本
docker service update --image nginx:1.14 nginx

# 再次查看服務運行情況
# 可以看到1.15版本的nginx服務已經停掉,當前運行的是1.14版本的nginx服務
[root@ecs-dev-08 ~]# docker service ps nginx 
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE                 ERROR               PORTS
xcrxhdhuuajo        nginx.1             nginx:1.14          ecs-dev-09          Running             Running about a minute ago                        
rb4jd9t95hun         \_ nginx.1         nginx:1.15          ecs-dev-08          Shutdown            Shutdown 5 minutes ago                            
afec10q894s9        nginx.2             nginx:1.14          ecs-dev-07          Running             Running 56 seconds ago                            
s5ljg8d2nf38         \_ nginx.2         nginx:1.15          ecs-dev-07          Shutdown            Shutdown about a minute ago

(3)網絡操作

Docker Swarm使用overlay類型的網絡。在同一個overlay網絡中的容器,即使是在不同的宿主機上,互相之間也能通訊。不同的overlay網絡內的容器是相互隔離的。
overlay網絡爲每一個服務提供了一個虛擬IP(VIP)和一個域名,同一個網絡中的容器可以互相通過虛擬IP和域名進行訪問。

# 創建網絡
[root@ecs-dev-07 ~]# docker network create --subnet 172.30.0.0/16 --gateway 172.30.0.1 --driver overlay --attachable actinia

# 查看網絡
[root@ecs-dev-07 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
giepr8kjiq1z        actinia             overlay             swarm
8c85d1fdd11c        bridge              bridge              local
90e4ef8ecdf3        docker_gwbridge     bridge              local
e945204eb642        host                host                local
ho2oi9uyks7h        ingress             overlay             swarm
3c325566a9c8        none                null                local
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章