容器化技術-Swarm資源管理

Swarm資源管理


Swarm是Docker官方提供的一款集羣管理工具,其主要作用是把若干臺Docker主機抽象爲一個整體,並且通過一個入口統一管理這些Docker主機上的各種Docker資源。Swarm和Kubernetes比較類似,但是更加輕,具有的功能也較kubernetes更少一些。

Swarm的基本架構如下圖所示
在這裏插入圖片描述

這個圖作爲一個整體實際上都處於一個所謂的集羣中,它可能對應了一到多臺的實際服務器。每臺服務器上都裝有Docker並且開啓了基於HTTP的DockerAPI。這個集羣中有一個SwarmManager的管理者,用來管理集羣中的容器資源。管理者的管理對象不是服務器層面而是集羣層面的,也就是說通過Manager,我們只能籠統地向集羣發出指令而不能具體到某臺具體的服務器上要幹什麼(這也是Swarm的根本所在)。至於具體的管理實現方式,Manager向外暴露了一個HTTP接口,外部用戶通過這個HTTP接口來實現對集羣的管理。對於稍微大一點的集羣,最好是拿出一臺實際的服務器作爲專門的管理者,作爲學習而言,也可以把管理者和被管理者放在一臺服務器上。

構建swarm集羣和節點

啓動一個swarm集羣

docker swarm init --listen-addr 172.16.218.146:8888 --advertise-addr 172.16.218.146
  • –listen-addr指出的是這個集羣暴露給外界調用的HTTPAPI的socket地址。
  • –advertise-addr如果你的Docker主機有多個網上,擁有多個IP,必須使用—advertise-addr指定IP。

命令執行成功會提示一串類似於這樣的信息

docker swarm join --token SWMTKN-1-4exqiy0mat3d1sy7yff3cdqr1h8huz88tng253bj7id3tttlfk-e5dns1ykhe74pllubpvy4vrv6 172.16.218.146:8888

爲方便下面稱管理者角色的機器爲Master,另兩臺爲Node1、Node2。

在Node1,Node2執行了上面這個命令後,在Master上執行命令docker node ls

列出Docker節點信息

[root@k8s-master ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
qs3re8fwfadofgamifcm1w1dt *   k8s-master          Ready               Active              Leader              18.06.3-ce
tsrjx3bxnykmi41vddwkcl4vf     k8s-node1           Ready               Active                                  18.06.3-ce
gzfsco0lufbf7bvpiikfu8wvd     k8s-node2           Ready               Active                                  18.06.3-ce

構建服務

docker service create --replicas 1 --name swarmTomcat consol/tomcat-7.0:latest
  • docker service create創建服務
  • –replicas參數指出希望保持這個服務始終有多少容器在運行
  • –name參數指定的是服務的名字而非容器的名字

查看swarmTomcat這個service的各個容器到底在哪個節點運行且運行狀態如何。

[root@k8s-master ~]# docker service ps swarmTomcat 
ID                  NAME                IMAGE                      NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
vlwlvfp35lny        swarmTomcat.1       consol/tomcat-7.0:latest   k8s-master          Running             Running 25 seconds ago        

容器擴展

[root@k8s-master ~]# docker service scale swarmTomcat=3
swarmTomcat scaled to 3
1/3: running   [==================================================>] 
2/3: running   [==================================================>] 
3/3: running   [==================================================>] 
verify: Service converged 

docker service scale swarmTomcat=3,可以將服務現有的replica爲1的狀態擴展到3,期間已經啓動的容器不受影響。

此時再查看swarmTomcat這個服務的節點信息及狀態

[root@k8s-master ~]# docker service ps swarmTomcat 
ID                  NAME                IMAGE                      NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
vlwlvfp35lny        swarmTomcat.1       consol/tomcat-7.0:latest   k8s-master          Running             Running 38 minutes ago                       
kpf4vo0h7ff0        swarmTomcat.2       consol/tomcat-7.0:latest   k8s-node2           Running             Running 2 minutes ago                        
i4nwm9bvpnjt        swarmTomcat.3       consol/tomcat-7.0:latest   k8s-node1           Running             Running 25 minutes ago                       

節點管理

之前的演示中,三個節點始終都保持着Active的可用性。Swarm管理器會自動根據算法將任務(啓停容器等)分配給Active的節點。

除了Active,其它常見的可用性狀態還有Drain,處於Drain的節點不會被分配新任務,而且當前運行的容器也會被停止,swarm管理器則會在其它節點上創建這些任務。

運行命令

docker node update --availability drain k8s-node2

演示

[root@k8s-master ~]# docker node update --availability drain k8s-node2
k8s-node2
[root@k8s-master ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
qs3re8fwfadofgamifcm1w1dt *   k8s-master          Ready               Active              Leader              18.06.3-ce
tsrjx3bxnykmi41vddwkcl4vf     k8s-node1           Ready               Active                                  18.06.3-ce
gzfsco0lufbf7bvpiikfu8wvd     k8s-node2           Ready               Drain                                   18.06.3-ce
[root@k8s-master ~]# docker service ps swarmTomcat 
ID                  NAME                IMAGE                      NODE                DESIRED STATE       CURRENT STATE               ERROR               PORTS
vlwlvfp35lny        swarmTomcat.1       consol/tomcat-7.0:latest   k8s-master          Running             Running about an hour ago                       
rv2y10e9x8xy        swarmTomcat.2       consol/tomcat-7.0:latest   k8s-master          Running             Running 3 seconds ago                           
kpf4vo0h7ff0         \_ swarmTomcat.2   consol/tomcat-7.0:latest   k8s-node2           Shutdown            Shutdown 19 seconds ago                         
i4nwm9bvpnjt        swarmTomcat.3       consol/tomcat-7.0:latest   k8s-node1           Running             Running 39 minutes ago     

由於k8s-node2不再接受 任務並關停了現有任務,所以swarmTomcat.2這個容器被轉移到k8s-master節點上。

如果再次將k8s-node2的可用性更改爲active,那麼k8s-node2節點就可以再次獲取任務了,PS:剛纔被轉移到k8s-master上的任務是不傳再轉回來的,所以k8s-node2的任務只有在接下來的分配中獲得。

最後,一個處於Active狀態的節點可能收到新的任務,當服務規模擴大時,滾動更新時,其它節點被設置爲Darin而本節點需要擔當時,其它節點上的任務啓動失敗時。

docker node update --availability active k8s-node2
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章