概述

Kubernetes 是一個可移植、可擴充套件的開源平臺,用於管理容器化工作負載和服務,方便宣告式配置和自動化。它擁有一個龐大且快速增長的生態系統。Kubernetes 服務、支援和工具隨處可見。

此頁面是 Kubernetes 的概覽。

Kubernetes 這個名字來源於希臘語,意為舵手或領航員。K8s 是一個縮寫,透過計算“K”和“s”之間的八個字母而來。Google 在 2014 年開源了 Kubernetes 專案。Kubernetes 結合了 Google 超過 15 年大規模執行生產工作負載的經驗以及社群中最佳的理念和實踐。

為什麼你需要 Kubernetes 以及它能做什麼

容器是打包和執行應用程式的好方法。在生產環境中,你需要管理執行應用程式的容器並確保沒有停機時間。例如,如果一個容器宕機,需要啟動另一個容器。如果這種行為由一個系統來處理,會不會更容易呢?

這就是 Kubernetes 來救援的原因!Kubernetes 為你提供了一個框架,以彈性方式執行分散式系統。它負責應用程式的擴充套件和故障轉移,提供部署模式等等。例如:Kubernetes 可以輕鬆管理你係統的金絲雀部署。

Kubernetes 為你提供

  • 服務發現和負載均衡 Kubernetes 可以使用 DNS 名稱或自己的 IP 地址暴露容器。如果容器的流量很高,Kubernetes 能夠進行負載均衡並分配網路流量,從而使部署保持穩定。
  • 儲存編排 Kubernetes 允許你自動掛載你選擇的儲存系統,例如本地儲存、公共雲提供商等。
  • 自動化部署和回滾 你可以使用 Kubernetes 描述已部署容器的所需狀態,它可以在受控速率下將實際狀態更改為所需狀態。例如,你可以自動化 Kubernetes 為你的部署建立新容器,移除現有容器並將所有資源分配給新容器。
  • 自動裝箱 你為 Kubernetes 提供一個節點叢集,它可以用來執行容器化任務。你告訴 Kubernetes 每個容器需要多少 CPU 和記憶體 (RAM)。Kubernetes 可以將容器部署到你的節點上,以最大化利用你的資源。
  • 自我修復 Kubernetes 會重啟失敗的容器,替換容器,終止不響應你使用者定義健康檢查的容器,並且在它們準備好提供服務之前不會將其宣傳給客戶端。
  • Secret 和配置管理 Kubernetes 允許你儲存和管理敏感資訊,例如密碼、OAuth 令牌和 SSH 金鑰。你可以在不重建容器映象的情況下部署和更新 Secret 和應用程式配置,並且不會在你的堆疊配置中暴露 Secret。
  • 批處理執行 除了服務,Kubernetes 還可以管理你的批處理和 CI 工作負載,如果需要,可以替換失敗的容器。
  • 水平擴充套件 透過簡單的命令、UI 或根據 CPU 使用率自動擴充套件你的應用程式。
  • IPv4/IPv6 雙棧 為 Pod 和 Service 分配 IPv4 和 IPv6 地址
  • 可擴充套件性設計 在不更改上游原始碼的情況下為你的 Kubernetes 叢集新增功能。

Kubernetes 不是什麼

Kubernetes 不是一個傳統的、包羅永珍的 PaaS(平臺即服務)系統。由於 Kubernetes 執行在容器級別而不是硬體級別,它提供了一些 PaaS 產品常見的通用功能,例如部署、擴充套件、負載均衡,並允許使用者整合其日誌、監控和警報解決方案。然而,Kubernetes 不是一個單一的整體,這些預設解決方案是可選和可插拔的。Kubernetes 為構建開發人員平臺提供了構建塊,但在重要的地方保留了使用者的選擇和靈活性。

Kubernetes

  • 不限制支援的應用程式型別。Kubernetes 旨在支援極其多樣化的工作負載,包括無狀態、有狀態和資料處理工作負載。如果應用程式可以在容器中執行,它應該在 Kubernetes 上執行良好。
  • 不部署原始碼,也不構建你的應用程式。持續整合、交付和部署 (CI/CD) 工作流由組織文化和偏好以及技術要求決定。
  • 不提供應用程式級服務,例如中介軟體(例如,訊息匯流排)、資料處理框架(例如,Spark)、資料庫(例如,MySQL)、快取或叢集儲存系統(例如,Ceph)作為內建服務。此類元件可以在 Kubernetes 上執行,和/或可以透過可移植機制(例如 Open Service Broker)由在 Kubernetes 上執行的應用程式訪問。
  • 不強制使用日誌、監控或警報解決方案。它提供了一些整合作為概念驗證,以及收集和匯出指標的機制。
  • 不提供也不強制使用配置語言/系統(例如,Jsonnet)。它提供了一個宣告式 API,可以由任意形式的宣告式規範作為目標。
  • 不提供也不採用任何全面的機器配置、維護、管理或自我修復系統。
  • 此外,Kubernetes 不僅僅是一個編排系統。事實上,它消除了對編排的需求。編排的技術定義是執行一個定義的工作流:首先做 A,然後做 B,然後做 C。相反,Kubernetes 包含一組獨立的、可組合的控制程序,它們不斷地將當前狀態驅動到所提供的期望狀態。你如何從 A 到 C 並不重要。也不需要集中控制。這使得系統更易於使用,更強大,更健壯,更具彈性和可擴充套件性。

Kubernetes 的歷史背景

讓我們回到過去,看看為什麼 Kubernetes 如此有用。

Deployment evolution

傳統部署時代

早期,組織在物理伺服器上執行應用程式。物理伺服器中無法為應用程式定義資源邊界,這導致了資源分配問題。例如,如果多個應用程式在物理伺服器上執行,可能會出現一個應用程式佔用大部分資源的情況,結果導致其他應用程式效能下降。解決這個問題的方法是將每個應用程式執行在不同的物理伺服器上。但這無法擴充套件,因為資源利用率低下,而且組織維護許多物理伺服器的成本很高。

虛擬化部署時代

作為解決方案,引入了虛擬化。它允許你在單個物理伺服器的 CPU 上執行多個虛擬機器 (VM)。虛擬化允許應用程式在虛擬機器之間隔離,並提供一定程度的安全性,因為一個應用程式的資訊不能被另一個應用程式自由訪問。

虛擬化允許更好地利用物理伺服器中的資源,並允許更好的可擴充套件性,因為應用程式可以輕鬆新增或更新,降低了硬體成本,等等。透過虛擬化,你可以將一組物理資源呈現為一次性虛擬機器叢集。

每個虛擬機器都是一臺完整的機器,在虛擬化硬體之上執行所有元件,包括自己的作業系統。

容器部署時代

容器類似於虛擬機器,但它們的隔離屬性較寬鬆,可以共享作業系統 (OS) 之間的應用程式。因此,容器被認為是輕量級的。類似於虛擬機器,容器有自己的檔案系統、CPU 份額、記憶體、程序空間等等。由於它們與底層基礎設施解耦,因此可以在雲和作業系統發行版之間移植。

容器之所以流行,是因為它們提供了額外的優勢,例如

  • 敏捷的應用程式建立和部署:與使用 VM 映象相比,容器映象的建立更加容易和高效。
  • 持續開發、整合和部署:透過快速高效的回滾(由於映象的不可變性),提供可靠且頻繁的容器映象構建和部署。
  • 開發和運維關注點分離:在構建/釋出時而不是部署時建立應用程式容器映象,從而將應用程式與基礎設施解耦。
  • 可觀測性:不僅能顯示作業系統級別的資訊和指標,還能顯示應用程式健康狀況和其他訊號。
  • 開發、測試和生產環境的一致性:在筆記型電腦上執行與在雲中執行相同。
  • 雲和作業系統發行版的可移植性:在 Ubuntu、RHEL、CoreOS、本地、主要公共雲以及其他任何地方執行。
  • 以應用程式為中心的管理:將抽象級別從在虛擬硬體上執行作業系統提升到使用邏輯資源在作業系統上執行應用程式。
  • 鬆散耦合、分散式、彈性、自由的微服務:應用程式被分解成更小、獨立的片段,可以動態部署和管理——而不是執行在一臺大型單一用途機器上的單體堆疊。
  • 資源隔離:可預測的應用程式效能。
  • 資源利用率:高效率和高密度。

下一步

最後修改時間:2024 年 9 月 11 日下午 3:17 PST:刪除重複段落 (7e71096044)