我個人認為在另一台伺服器上運作Swarm master服務本身是一個不錯的想法。該伺服器并不需要大量的資源,但它卻需要用很多的檔案描述符來處理所有的TCP流量的輸入和輸出。在下面例子中,我會使用<code>dockerswarm01</code>來作為專用的Swarm master服務。
在預設情況下Swarm有各種各樣的配置,當涉及到運作守護程序及其配套的基礎設施時,配置過程的靈活性就變得很強。下面列出了不同類别的配置選項以及它們是如何進行配置的。
Swarm使用的發現服務是一種維護叢集狀态的機制。它可以與各種後端服務協同工作,基本的工作流程都是一緻的,都涉及到以下的概念:
後端服務維護着Docker結點的清單,這些服務應該是叢集的一部分。
通過節點的清單,Swarm 會檢查每一個結點的健康狀況并且跟蹤進出叢集的節點。
節點發現僅需要通過指令行來完成。這是最基本的發現機制類型,它并不需要對配置檔案或者其他相關内容進行維護。Swarm守護程序使用節點發現的啟動指令會是這樣:
檔案發現利用放置在檔案系統中 (例如:/etc/swarm/cluster_config)的配置檔案,使用<code>&lt;IP>:&lt;Port></code>的格式來列出叢集中的Docker主機。雖然該清單是靜态的,但是通過健康檢查服務仍然可以确定健康和不健康的節點,并且可以過濾對不健康的節點請求。基于檔案發現的啟動指令和配置檔案的例子如下:
之後Swarm master會從Consul服務中讀取主機清單,它以這樣的方式運作:
這些基于鍵/值的基本配置模式會引發一個問題:Swarm叢集的健康狀況檢查服務如何與Swarm用戶端(在 join模式下)協同工作?由于通過鍵/值存儲的清單本身就是動态的,它是否需要運内部Swarm健康檢查服務呢?我對相關的功能并不熟悉,是以不妄加評論,但這個問題應該引起注意。
通過以下指令,Docker Swarm master 服務會連接配接EtcD,搜尋所提供的路徑資訊并且成節點清單:
Swarm用戶端(與Docker一起):
Swarm Master:
我還沒有使用過這個功能,在這點上沒有多少可以總結的。
排程機制的主要功能是選擇在哪個伺服器上建立并啟動一個容器。它是由一個裝箱算法(packing algorithm)和過濾器(或标簽)組合而成。每個Docker守護程序啟動的時候都帶着一組标簽,像以下這樣:
然後,當開啟一個Docker容器時,Swarm将基于過濾器選擇一組伺服器,然後根據排程機制來配置設定每次運作的指令。過濾器會告訴Swarm哪些伺服器上的容器是可用的或是不可用的,之後排程器會把指令分發到可用的伺服器上。以下是幾個過濾機制:
類同(Affinity )
類同可以以兩種方式工作:容器類同或鏡像類同。為了在同一台主機上啟動兩個容器可以運作以下指令:
由于Swarm并沒有對鏡像進行管理,設定類同鏡像也是可行的。這意味着一個容器僅能在已包含鏡像的節點上啟動。這就避免了在開啟一個容器之前需要在背景等待拉取鏡像的過程。舉個例子:
端口(Port) 端口過濾可以防止在同一主機上任意兩個具有相同靜态端口映射的容器啟動。這樣做的意義很大,你不能重複在Docker主機上端口映射。例如,兩個節點以<code>-p 80:80</code>開啟不會被允許在同一Docker主機上運作。
健康狀況(Healthy) 它阻止了對不健康節點進行排程。
一旦Swarm将主機清單限制在一組符合上述條件的節點上,它就會讓對容器進行排程,從以上結點中選出一個,在上面建立并啟動容器。目前以下排程是器内置的:
随機配置設定(Random) 将容器随機分布在可用的結點上。
裝箱(Binpacking) 用容器将節點填滿(每個容器得到的資源固定),然後再移動到下一個節點。如果在運作時需要動态地給容器配置設定資源,采用這個政策可能會使過程變得更複雜。這意味着即使為每個容器的記憶體和CPU設定上限,也并不能保證運作期間一切正常。我個人比較喜歡讓容器彼此之間競争,看哪個容器能得到資源。
令人高興的是,Swarm可以在TLS啟用下運作。這使得用戶端、Swarm守護程序以及Docker守護程式之間的互動變更安全。這是一件好事,因為在我研究安全方面的夥伴看來,在網絡中并沒有邊界。

按照上面部落格中的内容,一旦證書生成并安裝,Docker與Swarm守護程序就可以進行如下操作:
Docker:
Swarm master:
然後用戶端必須知道連接配接TLS。以下是環境變量設定:
這樣你就設定好了TLS。
當涉及到複雜的叢集軟體的配置時,還有很多内容可以讨論,但我覺得對于一個概述性的介紹來說,以上内容已經足夠,這可以讓你設定、運作并思考如何配置你的Swarm叢集。下一篇部落格中我會介紹關與Swarm叢集架構的一些例子。敬請關注,并歡迎在下面發表評論!
===========================
譯者介紹
原文釋出時間為:2015-02-03
本文作者:田浩浩
本文來自雲栖社群合作夥伴DockerOne,了解相關資訊可以關注DockerOne。
原文标題:Docker Swarm入門(二)配置選項與基本運作環境要求