Kubernetes風頭正盛,Docker何去何從?

danny_2018發表於2018-10-08

讓部署容器化應用更簡單、高效,正是這樣的特性,讓Kubernetes風靡一時,其發展勢頭大有超過Docker的氣勢。很多人一提到Docker ,立刻會想到kubernetes。那是不是代表著,Kubernetes已能替代Docker了呢?顯然,這是技術概念過度熱炒的結果!

什麼是Docker?

雖然,我們一直在談論容器,探討基於容器的基礎設施建設,但其實並沒有理解容器技術的真正內涵,不知道這一技術是如何解決企業業務問題的。在筆者看來,容器技術其實就是“伺服器管理技術”。為什麼這樣說?因為容器技術之所以誕生,最根本原因是伺服器管理帶來的挑戰,尤其是基於Linux系統的伺服器。

當然,並不是說Linux伺服器有多複雜,而是因為Linux是當今唯一和網際網路服務相關的伺服器系統,我們需要考慮如何基於網際網路服務執行伺服器,並確保不受攻擊。然而,有時候,太多的伺服器支撐是一種資源浪費,因此我們又提出微服務概念。微服務是一個新興的軟體架構,是把一個大型的單個應用程式和服務拆分為數十個微服務。

針對微服務概念,Linux在2006年推出了一項被稱為“cgroups”的技術。Cgroups是controlgroups的縮寫,是Linux核心提供的一種可以限制、記錄、隔離程式組(processgroups)所使用的物理資源(如:cpu,memory,IO等等)的機制。cgroups為容器實現虛擬化提供了基本保證,是構建Docker等一系列虛擬化管理工具的基石。但是,如果你不太熟悉Linux核心技術,那麼使用cgroups其實並不是一件特別容易的事,這也是Cgroups為什麼不為人所知的根本原因之一。

Docker的出現,提供了一個比cgroups更方便的Linux伺服器管理工具。Docker太好用了,以至於很多人都沒有意識到自己使用的正是Linux核心技術。藉助Docker,開發者可以在一臺伺服器上執行多個應用,所有應用完全使用沙箱機制,相互之間不會有任何介面,這種隔離機制大大確保了各個應用之間的安全性。其中,Docker Swarm是Docker的最核心工具之一,該應用可以把不同的伺服器組合成一個叢集。當管理多個伺服器時,這種叢集效應就開始發揮作用。

所以,當我們談容器,尤其是Docker時,其實我們基本上談論的是Linux核心技術。

什麼是Kubernetes?

那麼,Kubernetes又是什麼?我們為什麼需要它?要想更好地理解這一點,你可以假設一個應用場景:有一個資料中心,有數以千計的伺服器,運維人員不只是維護一個微服務,而是成千上萬個,這時我們必須藉助一個大的操作平臺來管理。因此,Kubernetes才有了成長沃土。

Kubernetes是Google開源的一個容器編排引擎,它支援自動化部署、大規模可伸縮、應用容器化管理。在生產環境中部署一個應用程式時,通常要部署該應用的多個例項以便對應用請求進行負載均衡。在Kubernetes中,我們可以建立多個容器,每個容器裡面執行一個應用例項,然後透過內建的負載均衡策略,實現對這一組應用例項的管理、發現、訪問,而這些細節都不需要運維人員去進行復雜的手工配置和處理。

為什麼要用Docker,而不是Kubernetes?

我們為什麼要使用Docker,而不是Kubernetes。如前文所述,當我們在談論容器技術時,其實重點是Linux核心技術。如果你希望在專案中使用容器,那麼應該對Linux有一點經驗。Docker容器整合了cgroups技術,提供了一個更理想的工具集,實現了container的資源的隔離和控制。

Kubernetes這項技術並不適用於小型公司,更不適合單個web專案的運營。儘管, 理論上也能用,但是會“大材小用”,就像我們不會乘著火箭去度假一樣。當然,我們不是要打壓Kubernetes,這是一項很棒、還免費的技術,但是並不是所有的技術都適合自己。我們要捫心自問下,是否真的需要這鐘技術。Kubernetes更適用於一個架構龐大、且應用不斷增長的環境,比如:谷歌、亞馬遜、微軟這樣大的網際網路公司。

另外,相比Kubernetes,構建一個輕量級Docker群集環境更容易,其中有很多酷炫的功能和特性。

總之,我們不能只是跟風。到底什麼是Docker,什麼Kubernetes,及我們為什麼要使用Docker?解決了這些基本問題,也就不會盲從於各種概念了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31547898/viewspace-2215584/,如需轉載,請註明出處,否則將追究法律責任。

相關文章