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、管理集羣
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(這個我沒用,只作簡單的介紹)