使用 Docker Swarm 對 Docker 進行規模擴展

jopen 9年前發布 | 17K 次閱讀 Docker

我們很高興地宣布第一個Swarm的Beta版已經發布, 它是一個Docker的本地集群工具.

過去的兩年里, Docker讓數以百萬計的開發人員的生活變得簡單,通過容器來使構建, 傳輸和運行應用變得簡單. 但是, 當處理在一個分布式環境下超過一個主機的Docker容器時,事情就變得復雜起來. 

這就是Swarm應用的地方. Swarm將幾個Docker引擎集合起來作為一個單獨的虛擬Docker引擎暴露給外界. 它提供標準的Docker API, 所以任何已經在Docker工作的工具現在都可以透明地擴展到多個主機.

回到十二月份, 為了解決在分布式環境下工作的問題, 我們發布了一個Swarm的技術預覽版, 它基于這幾個核心原則:

  • 極其容易入門

  • 相同的Docker API

  • “可插拔式的架構” 實現發現和調度

從那時起, 隨著社區幫助, 我們努力工作來讓Swarm成為現實, 今天我們自豪地放出了這個項目的一個Beta版.

特性

簡單設置

因為 Swarm 是一個標準的 Docker image 并且不依賴于外部的架構,啟動它是簡單的三個步驟:

  1. 運行一個命令去創建一個集群.

    1. 運行另一個命令去啟動Swarm.
    2. 在運行有Docker Engine的每個主機上,運行一個命令與上面的集群相連
       </p>
      
      </li> </ol>

      關于設置的過程請參考 documentation.

      Docker API兼容性

      大部分 Docker API 端都可以在Swarm上找到,這意味著基于Swarm上構建的工具都是可以使用的這些API,包括Docker CLI.

      這就為Docker用戶確保了一致性:無論你是在你的筆記本上開發,在準生產環境上測試或者部署在有幾百臺主機的生產環境,使用感受都是一樣的因為你將使用和你已經熟悉的相同的工具。
      比如,通過將Docker CLI指向Swarm,運行一個交互式的shell就如下這樣簡單:

      docker run -H swarm_ip:swarm_port -it ubuntu bash

      命令行的后面,Swarm將會在其中的一個主機上創建一個container,并且將標準的輸入/輸出代理會CLI

      資源管理

      Swarm認為在集群上資源是可用的,并將放置相應的容器。

      標準的布局策略(placement strategy)考慮資源容器的需求,并且利用可用的主機資源組成的集群去優化布局,并使用了一個容器包裝算法。

      舉例來說,下面的命令將會調度一個Redis容器在任何有足夠資源的機器上操作1G存儲。

      docker run -d -m 1g redis


      約束

      為了讓每個容器符合這種特殊的需求,他們的布局可以用約束(constraints)來調整。舉例來說,Swarm可以被通知在一個主機上用flash存儲運行MySQL:

      docker run -d -e constraint:storage==ssd mysql

      約束操作在Docker守護進程上標注。拿上一個例子來說,Docker必須以這樣的選項開始–label storage=ssd

      還有更多高級的表達式被支持:

      docker run --rm -d -e constraint:node!=fed*
      docker run --rm -d -e constraint:node==/ubuntu-[0-9]+/

      相關性

      在某些情況下,一個容器的放置必須要相對于其他容器. Swarm可以通過affinities讓你定義這些關系.

      下面的代碼將會運行兩個Redis服務器, 保證它們不是在同一個機器上被調度: 

      docker run -d --name redis_1 -e ‘affinity:container!=redis_*’ redisdocker run -d --name redis_2 -e ‘affinity:container!=redis_*’ redis

      當容器之間的關系是隱含的時候Affinities就被自動生成. 使用如 –link, –volumes-from–net=container: 等選項的容器被聯合調度在同一個主機上.

      TLS

      TLS 驗證可以確保與Swarm之間的通信的安全性.

      未來


      容錯調度

      在某些點, Swarm將可以在主機故障時重調度容器.

      看看這個對帶有一些限制條件的前端容器的調度: 

      docker run -d -e constraint:storage==ssd nginx

      如果這個容器的主機發生宕機, Swarm 將可以檢測中斷和在其他主機重新調度這個容器并遵守這個限制條件storage==ssd

      高可用性調度器

      現在,Swarm運行在單一主機模式。在未來Swarm將會支持主機選舉。這意味著如果一個Swarm主機宕機,另一個主機將會被選舉,集群上的容器調度將不會中斷。

      內置電池但可更換

      從這個項目開始那天,可更換就作為默認的內置功能被提供。

      調度器

      我們興奮地宣布:調度器驅動API已經被詳細說明而且將要實施。這個API將會允許Swarm與其它集群解決方案(例如Mesos和Kubernetes)相集成。

      合作伙伴

      Swarm可以很好地與第三方容器編配產品和運供應商提供的編配服務整合,我們與Mesosphere合作開發一個用于Mesos和Mesosphere DCOS的調度驅動,它將作為調度驅動API的一個參考實例這個整合方案允許Swarm在成百上千臺機器上批量編配和調度容器。這個整合方案同樣計劃用于Amazon EC2容器服務(ECS), Google Kubernetes, IBM Bluemix容器服務, Joyent智能數據中心和Microsoft Azure。


      發現

      為了發現主機是一個集群的一部分,Swarm依賴于一項發現服務.

      默認情況下,它將會使用Docker Hub來執行發現。因為這是無需依賴外部設備的最簡單的方法。

      但是,通過Swarm發現API,也可以使用其它服務。目前,支持的其它發現服務包括:Zookeeper,Consul和etcd。

      編配

      Swarm是Docker編配工具的一部分,與Machine和Compose并列。這三種工具可以單獨使用,但同樣設計用于協同工作。

      想了解使用它們協同工作,可以閱讀這篇博文:用Machine,Swarm和Compose編配Docker.

      感謝

      我們想要感謝所有通過提交貢獻來使這個版本發布的社區成員,他們是:

      Chanwit Kaewkasi, Jeff Chien, Pierre Wacrenier, Shijiang Wei, Jessica B. Hamrick, Rob Haswell, zhangbaitong, Ankush Agarwal, Derek Schultz, Gp De Ciantis, Keegan Lowenstein, Luke Marsden, Matt Drollette, Matthew Fisher, Nick Schuch, Omer Katz, Radek Simko, Ranjandas, Thimo, Thomas Meson.

      了解更多關于Swarm的信息

      我們希望得到你關于這第一個Beta版的反饋,所以請測試它:

      •  <p>
             Swarm<a href="/misc/goto?guid=4958865513434157252" rel="nofollow"><span style="font-family:Microsoft YaHei;">安裝指南</span></a>        </p>
        
        </li>
      •  <p>
             <span style="font-family:Microsoft YaHei;">在</span><a href="/misc/goto?guid=4958869515338993345" rel="nofollow"><span style="font-family:Microsoft YaHei;">GitHub</span></a><span style="font-family:Microsoft YaHei;">上報告問題和提交貢獻</span>        </p>
        
        </li>
      •  <p>
             <span style="font-family:Microsoft YaHei;">我們很高興在IRC上回答你的問題和得到你的反饋,</span><a  target="_blank" rel="nofollow"><span style="font-family:Microsoft YaHei;">#docker-swarm on Freenode</span></a>         </p>
        
        </li>
      •  <p>
             <a href="/misc/goto?guid=4958869513460589150" rel="nofollow"><span style="font-family:Microsoft YaHei;">了解更多關于使用Machine,Swarm和Compose編配Docker的信息</span></a>         </p>
        
        </li>
      •  <p>
             <span style="font-family:Microsoft YaHei;">在這個論壇注冊</span><a href="/misc/goto?guid=4958869515538574710" target="_blank" rel="nofollow"><span style="font-family:Microsoft YaHei;">Online Meetup on Machine, Swarm and Compose</span></a>         </p>
        
        </li> </ul>

        了解更多關于Docker的信息

        •  <p>
               <span style="font-family:Microsoft YaHei;">不熟悉Docker? 試試我們的十分鐘</span><a href="/misc/goto?guid=4958869515631055375" rel="nofollow"><span style="font-family:Microsoft YaHei;">在線教程</span></a>        </p>
          
          </li>
        •  <p>
               <span style="font-family:Microsoft YaHei;">使用一個</span><a href="/misc/goto?guid=4958847589223769224" rel="nofollow"><span style="font-family:Microsoft YaHei;">免費Docker Hub賬號</span></a><span style="font-family:Microsoft YaHei;">分享圖片,自動構建和其它</span>       </p>
          
          </li>
        •  <p>
               <span style="font-family:Microsoft YaHei;">閱讀Docker Engine 1.5的</span><a href="/misc/goto?guid=4958869515761393651" target="_blank" rel="nofollow"><span style="font-family:Microsoft YaHei;">發行說明</span></a>       </p>
          
          </li>
        •  <p>
               <span style="font-family:Microsoft YaHei;">訂閱</span><a href="/misc/goto?guid=4958869515852157773" rel="nofollow"><span style="font-family:Microsoft YaHei;">Docker Weekly</span></a>        </p>
          
          </li>
        •  <p>
               <span style="font-family:Microsoft YaHei;">參加即將到來的</span><a href="/misc/goto?guid=4958869515938729621" rel="nofollow"><span style="font-family:Microsoft YaHei;">Docker Meetups</span></a>      </p>
          
          </li>
        •  <p>
               <span style="font-family:Microsoft YaHei;">注冊</span><a href="/misc/goto?guid=4958834803306309363" rel="nofollow"><span style="font-family:Microsoft YaHei;">DockerCon 2015</span></a>       </p>
          
          </li>
        •  <p>
               <span style="font-family:Microsoft YaHei;">開始</span><a href="/misc/goto?guid=4958869516064254853" rel="nofollow"><span style="font-family:Microsoft YaHei;">對Docker作貢獻</span></a>       </p>
          
          </li> </ul>
     本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
     轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
     本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!