Kubernetes,簡稱 K8s,是用 8 代替中間 8 個字符 「ubernete」 而成的縮寫,是一個開源的,用於管理雲平臺中多個主機上的容器化的應用,Kubernetes 的目標是讓部署容器化的應用簡單而且高效(powerful),Kubernetes 提供了應用部署,規劃,更新,維護的一種機制。Kubernetes 是一個分佈式系統:有一臺控制工做機器的主機器,工做被安排在不一樣的工做機器上。而後,每臺機器在容器中運行工做。html
從單體架構應用,部署應用只有一個或幾個,部署與伸縮的確不算是麻煩,此時Kubernetes的確沒有必要了。當擁有龐大的微服務架構時,或者每一個租戶都有專用實例,同時又有不少租戶時,Kubernetes纔有意義。數據庫
另外,服務應該是無狀態的,而且狀態應該存儲在羣集以外的數據庫中。Kubernetes的另外一個賣點是對網絡的精細漸變控制。並且,也許使用Kubernetes的最廣泛的論點是它提供了容易的可伸縮性。微信
若是服務嚴重依賴磁盤,那麼是否要遷移到Kubernetes都應該三思。基本上,一個磁盤只能鏈接到一個節點,所以全部服務都須要駐留在該節點上。所以,將失去節點自動縮放功能,這是Kubernetes的最大賣點之一。出於相似的緣由,若是不在公共雲中託管基礎架構,則可能不該該使用K8S。在本地運行應用程序時,您須要事先購買硬件,而不能僅僅憑空想像一下機器。所以,基本上,您也將失去節點自動擴展功能,除非您願意使用混合雲並經過分解公共雲中的某些計算機來消除一些多餘的負載。網絡
若是有一個爲全部客戶提供服務的總體應用程序,而且須要在各處進行擴展,那麼雲服務提供商能夠經過自動擴展組爲您處理該應用程序。確實沒有必要爲此引入Kubernetes。架構
基於微服務的常規體系結構,該體系結構包含許多經過HTTP和消息傳遞隊列進行通訊的服務。每一個服務都有其本身的數據庫,而且大多數服務都在Minio中存儲了一些文件。Minio是一個實現S3 API的對象存儲系統。運維
當系統容許運行多服務時,很容易就會編寫許多服務。其實,這並非個好主意。分佈式
首先,分佈式應用程序很難編寫,服務越多,問題就會越多。
其次,分佈式應用程序很難調試,可能須要新的工具和日誌記錄來調試。微服務
微服務實際上是一種組織層面的擴展技術,當 500 名開發人員在共同開發一個網站時,不一樣的開發團隊須要獨立工做,這時支付大規模分佈式系統的成本是有意義的,若是是一個 5 人團隊,微服務是沒有意義的。工具
除非你的應用程序真的複雜到必須使用 Kubernetes,不然使用其它工具也能夠很好的完成工做,例如單機 Docker Compose、相似 Heroku 的系統、用於計算管道的 Snakemake 等等。性能
若有想了解更多軟件設計與架構, 系統IT,企業信息化, 團隊管理 資訊,請關注個人微信訂閱號:
做者:Petter Liu
出處:http://www.cnblogs.com/wintersun/ 本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。 該文章也同時發佈在個人獨立博客中-Petter Liu Blog。