經過docker-machine和etcd部署docker swarm集羣

本片文章介紹一下 使用docker-machine 搭建docker swarm 集羣;docker swarm是docker 官方搭建的容器集羣編排工具;容器編排,就是可使你像使用一太機器同樣來使用一個集羣,你運行的容器可能會在容器中的任何一個節點上運行;html

首先盜一張 docker swarm的架構圖:node

圖片來源 https://yeasy.gitbooks.io/docker_practice/content/swarm/intro.htmlgit

在使用 Swarm 管理docker 集羣時,會有一個 swarm manager 以及若干的 swarm node,swarm manager上運行 swarm daemon,用戶只須要跟 swarm manager 通訊,而後 swarm manager 再根據discovery service的信息選擇一個swarm node 來運行container。github

值得注意的是 swarm daemon 只是一個任務調度器(scheduler)和路由器(router),它自己不運行容器,它只接受 Docker client 發送過來的請求,調度合適的 swarm node 來運行 container。這意味着,即便 swarm daemon 因爲某些緣由掛掉了,已經運行起來的容器也不會有任何影響;docker

swarm manager 須要知道有哪些swarm node, 這就須要進行「服務發現」(有了註冊纔有發現);swarm的服務發現方式有不少種,這裏主要實驗了兩種,即經過docker hub的token 和 etcd;架構

(1)上一篇文章中講到docker-machine,docker-machine是集成了docker swarm的;docker hub token的方式是經過swarm向docker hub token申請一個token,而後將全部的node加入到這個token;ssh

        首先須要經過swarm的create命令來去docker hub去建立一個token, 前一章中,咱們創建了一個叫hehe-dev的docker machine;curl

             docker-machine ssh hehe-dev     登錄到這個machine中分佈式

             dao pull swarm                          將swarm的下載鏡像下載下來,這裏運用daocloud來進行加速工具

             docker run swarm create            運行swarm create命令創建一個token,這個token要牢記下來,下文用SWARM_TOKEN來代替這個token;

             接着退出hehe-dev

             docker-machine create -d virtualbox --swarm --swarm-master --swarm-discovery token://SWARM_TOKEN swarm-master    創建swarm manager而且將其加入到token中;

             docker-machine create -d virtualbox --swarm --swarm-discovery token://SWARM_TOKEN swarm-node-01                                         

             docker-machine create -d virtualbox --swarm --swarm-discovery token://SWARM_TOKEN swarm-node-02                           接着創建起兩個swarm node,名字本身隨便取,我這裏選的是swarm-node-01 和 swarm-node-01 不能有下劃線

             經過上面幾步,其實一個swarm集羣就已經創建起來了,經過docker-machine ls 能夠看到已經創建起來的docker machine; 接着咱們要看看集羣裏面的狀況:

             docker-machine ssh swarm-master                        登錄到swarm-master節點中(其實登錄到集羣中任何一臺機器均可以),而後運行

             sudo docker run --rm swarm list token://SWARM_TOKEN   而後就能夠看到集羣中的節點信息了; 

(2)etcd 是coreOS項目下的一個分佈式鍵值系統,主要用於服務發現和配置分發; 是用etcd做爲swarm的服務發現組件實際上是相似的,將etcd的某個目錄(etcd://ip:port/dir 的格式)暴漏給swarm node,而後每一個swarm node分別鏈接到這個目錄,將本身的ip,端口註冊到裏面;

        首先是安裝etcd,到etcd的官網下載便可;github.com/coreos/etcd/releases, 我是mac os x,安裝和啓動命令以下: 

            curl -L https://github.com/coreos/etcd/releases/download/v2.3.0-alpha.1/etcd-v2.3.0-alpha.1-darwin-amd64.zip -o etcd-v2.3.0-alpha.1-darwin-amd64.zip

            unzip etcd-v2.3.0-alpha.1-darwin-amd64.zip

            cd etcd-v2.3.0-alpha.1-darwin-amd64

            ./etcd --data-dir=/tmp/default.etcd --listen-client-urls 'http://本機IP:4001' --advertise-client-urls 'http://本機IP:4001'

            這樣etcd服務就啓動了。

             docker-machine create -d virtualbox --swarm --swarm-master --swarm-discovery etcd://本機IP:4001/swarm swarm-master-etcd   ;

             docker-machine create -d virtualbox --swarm --swarm-discovery etcd://本機IP:4001/swarm swarm-node-etcd-01                                         

             docker-machine create -d virtualbox --swarm --swarm-discovery etcd://本機IP:4001/swarm swarm-node-etcd-02                           

             上面建立服務的過程其實和token是同樣的,只不過是講etcd的url替換了token,查看swarm集羣組成的時候,同時也是同樣的道理;

相關文章
相關標籤/搜索