docker swarm英文文件學習-5-在swarm模式中執行Docker引擎
Run Docker Engine in swarm mode在swarm模式中執行Docker引擎
當你第一次安裝並開始使用Docker引擎時,預設情況下禁用swarm模式。在啟用叢集模式時,需要處理通過docker service命令管理的服務的概念。
在叢集模式下執行引擎有兩種方式:
- 建立一個新的叢集,本文將對此進行介紹。
- 加入現有的群體。
當你在本地機器上以叢集模式執行引擎時,你可以基於你建立的映象或其他可用映象建立和測試服務。在你的生產環境中,swarm模式提供了一個容錯平臺,該平臺具有叢集管理功能,可以保持服務的執行和可用性。
這些說明假設你已經在機器上安裝了Docker引擎1.12或更高版本,作為叢集中的管理器節點。
如果你還沒有讀過叢集模式的關鍵概念,請閱讀
Create a swarm建立叢集
當你執行建立叢集的命令時,Docker引擎將以叢集模式執行。
執行docker swarm init在當前節點上建立一個單節點叢集。引擎設定叢集如下:
- 將當前節點切換到叢集模式。
- 建立一個名為default的叢集。
- 指定當前節點為叢集的leader manager節點。
- 用機器主機名命名節點。
- 將管理器配置為偵聽埠2377上的活躍網路介面。
- 將當前節點設定為Active可用性,這意味著它可以從排程程式接收任務。
- 啟動參與叢集的引擎的內部分散式資料儲存,以維護叢集及其上執行的所有服務的一致檢視。
- 預設情況下,為群集生成自簽名根CA。
- 預設情況下,為worker和manager節點生成令牌以加入叢集。
- 建立一個名為ingress的覆蓋網路,用於釋出叢集外部的服務埠。
- 為你的網路建立覆蓋的預設IP地址和子網掩碼
docker swarm init的輸出提供了連線命令,當你將新的工作節點加入到swarm時可以使用:
$ docker swarm init Swarm initialized: current node (dxn1zf6l61qsb1josjja83ngz)is now a manager. To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \ 192.168.99.100:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
Configuring default address pools配置預設地址池
預設情況下,Docker Swarm為全域性範圍(覆蓋)網路使用預設的地址池10.0.0.0/8。沒有指定子網的每個網路都將從這個池中依次分配子網。在某些情況下,可能需要為網路使用不同的預設IP地址池。
例如,如果預設的10.0.0.0/8範圍與網路中已經分配的地址空間衝突,那麼最好確保網路使用不同的範圍,而不需要Swarm使用者使用--subnet命令指定每個子網。
要配置自定義預設地址池,必須在叢集初始化時使--default-addr-pool命令列選項定義池。這個命令列選項使用CIDR符號來定義子網路掩碼。要為Swarm建立自定義地址池,必須定義至少一個預設地址池和一個可選的預設地址池子網掩碼。例如,對於10.0.0.0/27,使用值27。
Docker從--default-addr-pool選項指定的地址範圍分配子網地址。例如,命令列選項default-addr-pool 10.10.0.0/16表示Docker將從/16地址範圍分配子網。如果--default-addr-pool-mask-len未指定或顯式設定為24,則會生成256個 /24個網路,形式為10.10.X.0/24。
子網範圍來自--default-addr-pool,(如10.10.0.0/16)。其中16的大小表示在預設addr池範圍內可以建立的網路數量。預設地址池選項可能出現多次,每個選項都為docker提供用於覆蓋子網的額外地址。
命令格式為:
$ docker swarm init --default-address-pool <IP range in CIDR> [--default-address-pool <IP range in CIDR> --default-addr-pool-mask-length <CIDR value>]
比如要為10.20.0.0網路建立具有a /16 (B類)的預設IP地址池,如下所示:
$ docker swarm init --default-addr-pool 10.20.0.0/16
要為10.20.0.0和10.30.0.0網路建立一個a /16 (B類)的預設IP地址池,併為每個網路建立一個/26的子網掩碼,如下所示:
$ docker swarm init --default-addr-pool 10.20.0.0/16 --default-addr-pool 10.30.0.0/16 --default-addr-pool-mask-length 26
在本例中,docker network create -d overlay net1將產生10.20.0.0/26作為分配給net1的子網,docker network create -d overlay net2將產生10.20.0.64/26作為分配給net2的子網。這種情況一直持續到所有子網耗盡為止。
有關詳情,請參閱以下網頁:
- Swarm networking獲取關於預設地址池使用情況的更多資訊
- 有關安裝前規劃網路設計的更多資訊,請參見UCP Installation Planning
docker swarm init
CLI reference以獲得關--default-address-pool標誌的更多細節。
Configure the advertise address配置advertise地址
管理節點使用一個advertise地址來允許叢集中的其他節點訪問Swarmkit API和覆蓋網路。叢集中的其他節點必須能夠訪問其advertise地址上的manager節點。
如果沒有指定advertise地址,Docker將檢查系統是否只有一個IP地址。如果是,Docker預設使用監聽埠2377的IP地址。如果系統有多個IP地址,你必須指定正確的--advertising -addr以支援管理器間通訊和覆蓋網路:
$ docker swarm init --advertise-addr <MANAGER-IP>
如果其他節點到達第一個管理器節點的地址與管理器看到的地址不相同,還必須指定--advertising-addr。例如,在跨不同區域的雲設定中,主機既有用於在區域內訪問的內部地址,也有用於從該區域外訪問的外部地址。在這種情況下,使用--advertising-addr指定外部地址,以便節點可以將該資訊傳播到隨後連線到它的其他節點。
有關advertise地址的詳細資訊,請參閱docker swarm init
CLI reference。
View the join command or update a swarm join token 檢視連線命令或更新叢集連線令牌
節點需要一個祕密令牌才能加入叢集。工作節點的令牌與管理節點的令牌不同。節點在加入叢集時只使用join-token。在節點已經加入群之後輪換連線令牌不會影響節點的群成員關係。令牌更改確保一箇舊的令牌不能被任何試圖加入群的新節點使用。
要檢索連線命令,包括工作節點的連線令牌,請執行:
$ docker swarm join-token worker To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \ 192.168.99.100:2377 This node joined a swarm as a worker.
要檢視連結命令和管理節點的令牌,執行:
$ docker swarm join-token manager To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-59egwe8qangbzbqb3ryawxzk3jn97ifahlsrw01yar60pmkr90-bdjfnkcflhooyafetgjod97sz \ 192.168.99.100:2377
傳遞--quiet標誌去要求列印令牌訊息:
$ docker swarm join-token --quiet worker SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c
小心使用連線令牌,因為它們是加入叢集所必需的金鑰。特別是,將金鑰簽入版本控制是一種不好的做法,因為它允許任何訪問應用程式原始碼的人向叢集中新增新節點。Manager令牌特別敏感,因為它們允許一個新的Manager節點加入並獲得對整個叢集的控制。
我們建議你在以下情況下更換連線令牌:
- 如果一個令牌意外地簽入到版本控制系統中,分組聊天或意外地列印到日誌中。
- 如果你懷疑某個節點已被破壞。
- 如果你希望保證沒有新的節點可以加入群。
此外,對於任何金鑰(包括叢集連線令牌),最好實現一個常規的輪換計劃。我們建議你至少每6個月輪換一次你的令牌。
執行swarm join-token --rotate使舊的令牌無效並生成一個新令牌。指定要為工作節點還是管理節點輪換令牌:
$ docker swarm join-token --rotate worker To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-2kscvs0zuymrsc9t0ocyy1rdns9dhaodvpl639j2bqx55uptag-ebmn5u927reawo27s3azntd44 \ 192.168.99.100:2377