docker集羣管理之swarm

1、簡介node

       docker集羣管理工具備swarm、k8s、mesos等,我所用到的是swarm和k8s,這篇文章主要介紹swarm;swarm是docker集成的原生linux

       管理工具,只要你安裝上docker以後,就能夠直接使用docker swarm -h 來查看用法web

2、組建集羣redis

       剛剛已經說過swarm是原生集成的,因此搭建起來也是比較簡單的,咱們在manager節點只須要運行docker swarm init --advertise-addr  IP地址docker

       就能夠生成一個token串,和一個node節點加入manager節點的命令(so easy!!),個人顯示以下:網絡

       你只要把這行命令在node節點執行就能夠了,前提是執行成功哈,若是不成功,看是否是防火牆或者selinux的緣由;node節點執行完以後,工具

       你就能夠在manager節點執行docker node ls進行查看了,其中個人節點以下:spa

       狀態值爲Ready說明node節點時可用的,下面咱們開始建立集羣3d

3、初始網絡日誌

         docker network ls就能夠查看網絡信息,以下圖所示(紅色框內表示創建swarm以前的網絡):

         若是你想查看某個網絡的詳細信息,使用docker network inspsct 網絡名 , 就能夠了;那個ngx_net是本身建立的網絡,下面咱們看下

    怎麼建立一個自定義的網絡:

         docker network create --driver overlay  --subnet 10.10.19.0/24 ngx_net

         詮釋:

         --driver  指定網絡存儲驅動是overlay的形式,存儲驅動有aufs、overlay、zfs等,後面會介紹

指定overlay驅動以後你會發現scope是swarm,這是swarm集羣所獨特的,不能改變,只能如此!!!!

 --subnet 指定網絡的IP地址段

 ngx_net 就是網絡的名稱

4、管理集羣

  1.        本實例使用的有三個node節點(主機名分別爲:redis13六、redis13七、redis138),manager節點的主機名爲jenkins
  2.        我直接上我寫的例子,而後再描述裏面的參數含義:

manager節點執行:docker service create --name byit-config  --network ngx_net -p 3001:3001  --replicas 1 10.0.10.133:5000/byit-config

                             詮釋

 docker service create 意思是建立一個service,而後在node節點上建立容器

                                        --name 是指定service的名稱

                                        --network 是指定本身建立的網絡,若是不指定就會默認使用ingress網絡,

 -p  指定宿主機端口:容器端口,這一步就至關於咱們以前使用iptables作的端口映射

 --replicas 1  意思就是在這三個node節點上只建立一個容器,具體建立到那一臺,目前還不知道

 10.0.10.133:5000/byit-config   這個就是我要從私有倉庫中下載的鏡像

如今咱們在master節點上就能夠查看到service了,docker service ls

其中第二個就是咱們建立的service,若是咱們想看它部署到了那臺node節點上了,咱們能夠經過docker service inspect byit-config來查看

固然,也能夠經過這個命令來查看沒部署成功的日誌信息,你們能夠看到個人是部署到了redis136這個節點上了:

承上啓下

那個--replicas指定爲1,就是說部署一個容器,當redis136上這個容器掛掉以後,會嘗試重啓或者在其它node節點再建立一個容器,

總而言之就是,在這個集羣環境中要維持一個byit-config容器的啓動,swarm纔會罷休

5、swarm調度策略

部署容器到指定的node上:

方法一

docker node update --label-add env=test  (redis136 |redis137)       #能夠把label加到一臺或者多臺node上

而後在你docker service create 的時候,加上--constraint node.labels.env==test選項就能夠了

docker service update --constraint-rm node.labels.env==test my_web      

docker service update --constraint-add node.labels.env==prod  my_web   #兩個步驟實現了pod的遷移工做

方法二

在docker service create 的時候加上--constraint 'node.hostname==redis136',就能夠指定部署容器到指定節點

6、總結

若是咱們想把這個service中的容器個數提高到2個,能夠這樣作:docker service byit-config scale=2就能夠了;

swarm最簡單的集羣搭建以及管理就是這樣的,咱們還可使用compose的yaml,而後docker stack *.yaml去建立,

後面我會單獨再寫一篇文章,介紹docker的三劍客:swarm、compose、machine(這個我沒用,只作簡單的介紹)

相關文章
相關標籤/搜索