簡介
Kubernetes 這個詞的來源,是一個希臘詞,意爲舵手或飛行員。縮寫K8s是通過用數字8替換“ ubernete ”的八個字母得到的。
Kubernetes 是一個可移植的,可擴展的開源平臺,用於管理容器化的工作負載和服務,可促進聲明式配置和自動化。它擁有一個龐大且快速增長的生態系統(growing ecosystem)。Kubernetes 的服務,支持和工具被廣泛使用。
Kubernetes 消除了部署和擴展容器化應用程序涉及的許多手動過程。例如,開發人員可以將運行Linux容器的主機組集羣在一起,而 Kubernetes 可以幫助您輕鬆高效地管理這些集羣。這些集羣可以跨越公共雲,私有云或混合雲中的主機。因此,Kubernetes 是託管需要快速擴展的雲原生應用程序的理想平臺,比如通過 Apache Kafka 進行實時數據流傳輸。
Kubernetes 最初是由Google的工程師開發和設計的。谷歌(Google)是Linux容器技術的早期貢獻者之一,並公開談論瞭如何將谷歌所有的服務在容器中運行(這是Google的雲服務背後的技術)。Google每週產生超過20億個容器部署,所有部署均由內部平臺 Borg 提供支持。Borg 是 Kubernetes 的前身,多年來開發 Borg 的經驗教訓成爲大多數 Kubernetes 技術背後的支持。
想要更深入瞭解 Kubernetes 的前世今生,需要了解項目部署的歷史。
項目部署歷史演化
圖片地址:https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/#going-back-in-time
傳統部署時代(Traditional deployment era): 早期,部署在物理服務器上運行應用程序。無法爲物理服務器中的應用程序定義資源邊界,這會導致資源分配問題。例如,如果在物理服務器上運行多個應用程序,則可能會出現一個應用程序佔用大部分資源的情況,結果,另一個應用程序的性能將下降。一種解決方案是在不同的物理服務器上運行每個應用程序。但是,這並沒有有效解決因爲產生資源利用不足,而且維護諸多物理服務器的成本也不菲。
虛擬化部署時代(Virtualized deployment era):虛擬化提供瞭解決方案,它允許您在單個物理服務器的CPU上運行多個虛擬機(VM)。虛擬化允許在VM之間隔離應用程序,並提供安全級別,因爲一個應用程序的信息不能被另一應用程序自由訪問。
虛擬化可以更好地利用物理服務器中的資源,並可以實現更好的可伸縮性,因爲可以輕鬆地添加或更新應用程序,降低硬件成本等等。藉助虛擬化,開發人員可以將一組物理資源呈現爲一組一次性( a cluster of disposable)虛擬機。
每個虛擬機都是一臺完整的計算機,在虛擬化硬件之上運行所有組件,包括其自己的操作系統。
容器部署時代(Container deployment era):容器類似於VM,但是它們具有輕鬆的隔離屬性,可以在應用程序之間共享操作系統(OS)。因此,容器是輕量級的。與VM相似,容器具有自己的文件系統,CPU,內存,進程空間等。由於它們與基礎架構分離,因此可以跨雲和OS分發進行移植。
容器之所以受歡迎,是因爲它們提供了額外的好處,例如:
- 敏捷的應用程序創建和部署:與使用VM鏡像相比,容器鏡像創建的簡便性和效率更高。
- 持續開發,集成和部署:通過快速輕鬆的回滾(由於鏡像不可更改),提供可靠且頻繁的容器鏡像構建和部署。
- 開發和運營的關注點分離:在構建/發佈時而不是在部署時創建應用程序容器鏡像,從而將應用程序與基礎架構分離。可觀察性不僅可以顯示操作系統級別的信息和指標,還可以顯示應用程序的運行狀況和其他信號。
- 跨開發,測試和生產的環境一致性:在便攜式計算機上與在雲服務商進行的是相同地運行。
- 雲服務和操作系統分發的可移植性:可在Ubuntu,RHEL,CoreOS,本地,Google Kubernetes Engine和其他任何地方運行。
- 以應用程序爲中心的管理:提高抽象級別,從在虛擬硬件上運行操作系統到使用邏輯資源在操作系統上運行應用程序。
- 鬆散耦合,分佈式,彈性,解放的微服務:應用程序被分解成多個較小的獨立部分,並且可以動態部署和管理,而不是在一臺大型單用途機器上運行的整體式堆棧。
- 資源隔離:可預測的應用程序性能。
- 資源利用:高效率和高密度。
Kubernetes的作用
基於容器的微服務架構極大地改變了開發和運營團隊測試和部署現代軟件的方式。容器通過使應用程序易於擴展和部署來幫助公司實現現代化,但是容器還通過創建全新的基礎架構生態系統而帶來了新的挑戰和更高的複雜性。
大型和小型軟件公司現在都每天要部署數千個容器實例,這是他們必須管理如此複雜的規模。那麼他們如何做到的呢?
Kubernetes 使在微服務架構中部署和操作應用程序變得容易。它是通過在一組主機之上創建抽象層來實現的,以便開發團隊可以部署其應用程序並讓 Kubernetes 管理。
Kubernetes 爲開發者提供了在物理或虛擬機集羣上調度和運行容器的平臺。更廣泛地說,它可以幫助開發者在生產環境中部署完全實現並依賴基於容器的基礎結構。而且由於 Kubernetes 全部涉及自動化操作任務,因此開發者可以爲容器執行許多其他應用程序平臺或管理系統可以執行的許多相同操作。
Kubernetes 的操作:
- 跨多個主機協調容器。
- 更好地利用硬件,以最大化運行企業應用程序所需的資源。
- 控制和自動化應用程序部署和更新。
- 掛載並添加存儲以運行有狀態的應用程序。
- 快速擴展容器化應用程序及其資源。
- 以聲明方式管理服務,以確保已部署的應用程序始終以開發者部署它們的方式運行。
- 通過自動放置,自動重啓,自動複製和自動縮放功能對應用程序進行運行狀況檢查和自我修復。
爲什麼需要Kubernetes?
實際的生產應用程序跨越多個容器。這些容器必須跨多個服務器主機部署。 容器的安全性是多層的,可能會很複雜。這就是 Kubernetes 可以提供幫助的地方, Kubernetes 爲開發者提供了針對這些工作負載大規模部署容器所需的編排和管理功能。 Kubernetes 編排允許開發者構建跨多個容器的應用程序服務,在集羣中調度這些容器,擴展這些容器並隨時管理這些容器的運行狀況。藉助 Kubernetes ,開發者可以採取切實措施提高IT安全性。
Kubernetes 還需要與網絡,存儲,安全,遙測和其他服務集成,以提供全面的容器基礎架構。
圖片地址:http://newrelic-wpengine.netdna-ssl.com/wp-content/uploads/kubernetes_architecture.jpg
參考資料
What is Kubernetes(什麼是Kubernetes)
What is Kubernetes(什麼是Kubernetes)
What Is Kubernetes? An Introduction to the Wildly Popular Container Orchestration Platform.(什麼是K8S,一個受歡迎的容器編排平臺)
What is Kubernetes (k8s)? Introduction, Glossary, and Definitions for Kubernetes(什麼是Kubernetes(k8s)?Kubernetes的簡介,術語和定義)