kubernetes是一個可移植的、可擴充套件的、開放原始碼的平臺,用於管理容器化的工作負載和服務,它有利於宣告性配置和自動化。它有一個巨大的,快速增長的生態系統。kubernetes服務、支援和工具是廣泛可用的。
kubernetes這個名字來源於希臘語,意思是舵手或飛行員。谷歌在2014年開放了kubernetes專案。kubernetes建立在google在大規模執行生產工作負載方面的15年經驗的基礎上,結合來自社群的最佳想法和實踐。
讓我們回顧一下為什麼kubernetes如此有用。
軟體部署主要經過了幾個週期: 傳統部署,虛擬化部署,容器化部署
傳統部署時代
: 一臺伺服器上執行一個或者多個程式,沒有優雅的方法對資源進行資源隔離限制,可能出現一個程式佔用大部分的資源,其他程式沒有分配到可用的資源; 如果資源不足擴充套件很不方便,維護成本高
虛擬化部署時代
: 單臺伺服器可以建立多個虛擬機器(vm), 通過虛擬機器進行資源隔離,安全性有一定提高(程式不能互相訪問);虛擬化更好的利用物理伺服器資源,可以輕鬆更新擴充套件程式,每個vm都是一個完整的機器,在虛擬化硬體之上執行所有的元件,包括自己的os
容器部署時代
:容器類似於vm,但它們具有寬鬆的隔離屬性,以便在應用程式之間共享作業系統(os)。因此,容器被認為是輕量級的。與vm類似,容器有自己的檔案系統、cpu、記憶體、程式空間等等。由於它們與底層基礎設施分離,因此可以跨雲和作業系統分佈進行移植。
使用容器部署好處:
敏捷的應用程式建立和部署:與vm映像的使用相比,容器映像的建立更加容易和高效。
持續開發、整合和部署:提供可靠和頻繁的容器映像構建和部署,並提供快速和輕鬆的回滾(由於映像的不變性)。
開發和操作關注點分離:在構建/釋出時而不是部署時建立應用程式容器映像,從而將應用程式與基礎架構分離。
可觀測性不僅顯示作業系統級的資訊和度量,還顯示應用程式的執行狀況和其他訊號。
跨開發、測試和生產的環境一致性:在膝上型電腦上執行與在雲中執行相同。
雲和作業系統分佈的可移植性:執行在ubuntu、rhel、coreos、prem、google kubernetes引擎和其他任何地方。
以應用程式為中心的管理:將抽象級別從在虛擬硬體上執行作業系統提升到使用邏輯資源在作業系統上執行應用程式。
鬆散耦合、分散式、彈性、自由的微服務:應用程式被分解成更小的、獨立的部分,可以動態部署和管理,而不是執行在一臺大型單用途機器上的單一堆疊。
資源隔離:可預測的應用程式效能。
資源利用:高效密集
容器是打包和執行應用程式是一種比較優雅方式。在生產環境中,你怎樣管理應用程式,應用釋出更新且在不停機的狀態下進行, 擴充套件應用程式等.
k8s是這樣解決! kubernetes為您提供了一個框架來彈性地執行分散式系統。它可以滿足您的擴充套件需求、故障轉移、部署模式等。例如,Kubernetes可以輕鬆的實現金絲雀部署.
Kubernetes為您提供:
- 服務發現和負載平衡: Kubernetes 可以使用DNS名稱或使用它們自己的IP地址公開容器。如果到容器的流量很高,kubernetes能夠平衡負載並分配網路流量,從而使部署穩定。
- 儲存業務流程: kubernetes允許您自動掛載您選擇的儲存系統,如本地儲存、公共雲提供商等。
- 自動展開和回滾: 您可以使用k8s描述部署容器的期望狀態,並且它可以以受控速率將實際狀態更改為期望狀態。例如,可以自動化Kubernetes為部署建立新容器,刪除現有容器並將所有資源都採用新容器。
- 自動裝箱: kubernetes允許您指定每個容器需要多少cpu和記憶體(ram)。當容器具有指定的資源請求時,Kubernetes可以做出更好的決策來管理容器的資源。
- 自愈: kubernetes重新啟動失敗的容器,替換容器,殺死不響應使用者定義的執行狀況檢查的容器,並且在客戶機準備好服務之前不向客戶機公佈這些容器。
- 機密和配置管理: kubernetes允許您儲存和管理敏感資訊,如密碼、oauth令牌和ssh金鑰。您可以部署和更新祕密和應用程式配置,而不必重建容器映像,而不會在堆疊配置中公開祕密。
kubernetes不是一個傳統的、包羅永珍的paas(平臺即服務)系統。由於kubernetes是在容器級別而不是硬體級別執行的,因此它提供了一些paas提供的通用特性,如部署、擴充套件、負載平衡、日誌記錄和監視。但是,kubernetes不是單一的,這些預設解決方案是可選的和可插入的。kubernetes為構建開發人員平臺提供了構建塊,但在重要的地方保留了使用者選擇和靈活性。
不限制支援的應用程式型別。kubernetes旨在支援各種各樣的工作負載,包括無狀態、有狀態和資料處理工作負載。如果應用程式可以在容器中執行,那麼它應該在Kubernetes上執行得很好。
不部署原始碼,也不生成應用程式。持續整合、交付和部署(ci/cd)工作流由組織文化和偏好以及技術要求決定。
不提供應用程式級服務,例如中介軟體(例如,訊息匯流排)、資料處理框架(例如,SPARK)、資料庫(例如,MySQL)、快取或群集儲存系統(例如,CEPH)作為內建服務。這樣的元件可以在Kubernetes上執行,和/或可以通過諸如開放服務代理之類的便攜機制在KubNeNETs上執行的應用程式訪問。
不要求記錄、監視或警報解決方案。它提供了一些整合作為概念的證明,以及收集和匯出度量的機制。
不提供或強制要求配置語言/系統(例如,jsonnet)。它提供了一個宣告性api,可以由任意形式的宣告性規範作為目標。
不提供或採用任何全面的機器配置、維護、管理或自愈系統。
此外,k8s不僅僅是一個編曲系統。事實上,它消除了編排的需要。編排的技術定義是執行已定義的工作流:首先執行a、b、c。相反,kubernetes包含一組獨立的、可組合的控制過程,這些過程不斷地將當前狀態驅動到所提供的所需狀態。從A到C應該不重要,也不需要集中控制。這使得系統更易於使用、更強大、更健壯、更具彈性和可擴充套件性