總覽
Kubernetes 是一個可移植、可擴展的開源平台,用於管理容器化的工作負載與服務,能促進宣告式配置與自動化。它擁有一個龐大且快速增長的生態系統。Kubernetes 的服務、支援與工具隨處可見。
此頁面是 Kubernetes 的概覽。
「Kubernetes」一詞源自希臘語,意為「舵手」或「領航員」。縮寫為「K8s」是因為在「K」和「s」之間有八個字母。Google 於 2014 年將 Kubernetes 專案開源。Kubernetes 結合了 Google 超過 15 年運作大規模生產環境工作負載的經驗,以及來自社群的最佳想法與實踐。
為什麼你需要 Kubernetes 以及它能做什麼
容器是封裝與執行應用程式的好方法。在生產環境中,你需要管理執行應用程式的容器,並確保沒有停機時間。例如,如果一個容器停止運作,另一個容器就需要啟動。如果這種行為能由系統來處理,那不是更簡單嗎?
這就是 Kubernetes 來救援的原因!Kubernetes 為你提供了一個架構,用來韌性地執行分散式系統。它負責應用程式的自動擴展與故障轉移、提供部署模式等。例如:Kubernetes 可以輕鬆管理系統的金絲雀部署(canary deployment)。
Kubernetes 為你提供:
- 服務發現與負載平衡 Kubernetes 可以使用 DNS 名稱或其自有的 IP 位址公開容器。如果容器的流量很高,Kubernetes 能夠負載平衡並分配網路流量,使部署保持穩定。
- 儲存編排 Kubernetes 允許你自動掛載所選的儲存系統,例如本地儲存、公有雲供應商等。
- 自動化部署與回滾 你可以使用 Kubernetes 描述已部署容器的預期狀態,它能以受控的速率將實際狀態變更為預期狀態。例如,你可以自動化 Kubernetes 為你的部署建立新容器、刪除現有容器,並將它們的所有資源轉移到新容器中。
- 自動裝箱(Bin packing) 你為 Kubernetes 提供一組可用於執行容器化任務的節點叢集。你告訴 Kubernetes 每個容器需要多少 CPU 和記憶體(RAM)。Kubernetes 可以將容器放入你的節點中,以充分利用資源。
- 自我修復 Kubernetes 會重啟失敗的容器、替換容器、殺死對使用者定義的健康檢查沒有回應的容器,並且在它們準備好服務之前,不會將它們宣告給客戶端。
- 密鑰與配置管理 Kubernetes 讓你儲存與管理敏感資訊,例如密碼、OAuth 權杖(token)和 SSH 金鑰。你可以在不重建容器映像檔的情況下部署與更新密鑰和應用程式配置,且不會在堆疊配置中洩漏密鑰。
- 批次執行 除了服務之外,Kubernetes 還可以管理你的批次(batch)與 CI 工作負載,如果需要,還可以替換失敗的容器。
- 水平擴展 使用簡單的命令、UI 或根據 CPU 使用率自動化地對應用程式進行水平擴展或縮減。
- IPv4/IPv6 雙堆疊 為 Pod 與服務分配 IPv4 與 IPv6 位址。
- 專為可擴展性而設計 在不更改上游原始碼的情況下,為你的 Kubernetes 叢集新增功能。
Kubernetes 不做什麼
Kubernetes 不是傳統的、全包式的 PaaS(平台即服務)系統。由於 Kubernetes 在容器層級而非硬體層級運作,它提供了一些 PaaS 產品常見的通用功能,例如部署、擴展、負載平衡,並讓使用者整合自己的日誌、監控與警報解決方案。然而,Kubernetes 並非單體架構,這些預設解決方案是可選且可插入的。Kubernetes 為建構開發者平台提供了積木,但在重要之處保留了使用者的選擇權與靈活性。
Kubernetes
- 不限制支援的應用程式類型。Kubernetes 的目標是支援極其多樣化的工作負載,包括無狀態(stateless)、有狀態(stateful)以及資料處理工作負載。如果應用程式可以在容器中執行,它就應該能在 Kubernetes 上完美執行。
- 不會部署原始碼,也不會建構你的應用程式。持續整合、持續交付與部署(CI/CD)工作流程由組織文化、偏好以及技術需求決定。
- 不會提供應用程式層級的服務,例如中介軟體(例如訊息匯流排)、資料處理框架(例如 Spark)、資料庫(例如 MySQL)、快取,或叢集儲存系統(例如 Ceph)作為內建服務。這些元件可以在 Kubernetes 上執行,並且/或者可以透過可移植機制(例如 Open Service Broker)被在 Kubernetes 上執行的應用程式存取。
- 不指定日誌、監控或警報解決方案。它提供了一些整合方案作為概念驗證,以及收集與匯出指標的機制。
- 不提供也不強制使用配置語言/系統(例如 Jsonnet)。它提供了一個宣告式 API,可由任意形式的宣告式規格作為目標。
- 不提供也不採用任何全面的機器配置、維護、管理或自我修復系統。
- 此外,Kubernetes 不僅僅是一個編排系統。事實上,它消除了對編排的需求。編排的技術定義是執行已定義的工作流程:先做 A,然後 B,然後 C。相比之下,Kubernetes 包含了一組獨立、可組合的控制程序,持續將當前狀態驅動向所提供的預期狀態。你如何從 A 到 C 達成目標並不重要。也不需要集中式控制。這造就了一個更易於使用,且更強大、穩健、具備韌性與可擴展性的系統。
Kubernetes 的歷史背景
讓我們回顧過去,看看為什麼 Kubernetes 如此有用。

傳統部署時代
早期,組織在實體伺服器上執行應用程式。沒有辦法在實體伺服器中定義應用程式的資源邊界,這導致了資源分配問題。例如,如果多個應用程式在同一台實體伺服器上執行,可能會發生一個應用程式佔用了大部分資源,導致其他應用程式效能不佳的情況。解決方案是在不同的實體伺服器上執行每個應用程式。但這無法擴展,因為資源利用率不足,且組織維護大量實體伺服器的成本很高。
虛擬化部署時代
作為解決方案,虛擬化被引入。它允許你在單個實體伺服器的 CPU 上執行多個虛擬機器(VM)。虛擬化允許應用程式在 VM 之間隔離,並提供一定程度的安全性,因為一個應用程式的資訊不能被另一個應用程式自由存取。
虛擬化允許更好地利用實體伺服器中的資源,並提供更好的擴展性,因為可以輕鬆新增或更新應用程式,降低硬體成本等等。透過虛擬化,你可以將一組實體資源呈現為一個可丟棄的虛擬機器叢集。
每個 VM 都是一台完整的機器,在虛擬化硬體之上執行所有元件,包括其自己的作業系統。
容器部署時代
容器與 VM 類似,但它們具有較寬鬆的隔離屬性,可以在應用程式之間共享作業系統(OS)。因此,容器被認為是輕量級的。與 VM 類似,容器擁有自己的檔案系統、CPU 配額、記憶體、程序空間等。由於它們與底層基礎設施解耦,因此可以在雲端與作業系統發行版之間移植。
容器變得流行是因為它們提供了額外的好處,例如:
- 敏捷的應用程式建立與部署:與使用 VM 映像檔相比,容器映像檔的建立更簡單且有效率。
- 持續開發、整合與部署:提供可靠且頻繁的容器映像檔建置與部署,並具有快速且有效的回滾能力(歸功於映像檔的不可變性)。
- 開發與維運的關注點分離:在建置/發布時間而不是部署時間建立應用程式容器映像檔,從而將應用程式與基礎設施解耦。
- 可觀測性:不僅呈現作業系統層級的資訊與指標,還包括應用程式健康狀況與其他訊號。
- 跨開發、測試與生產環境的一致性:在筆記型電腦上執行的效果與在雲端上執行的效果相同。
- 雲端與作業系統發行版可移植性:可在 Ubuntu、RHEL、CoreOS、地端環境、主流公有雲以及任何其他地方執行。
- 以應用程式為中心的管理:將抽象層級從在虛擬硬體上執行作業系統,提升為使用邏輯資源在作業系統上執行應用程式。
- 鬆散耦合、分散式、彈性、自由的微服務:應用程式被分解成更小的、獨立的片段,並可以動態部署與管理——而不是在單一大型專用機器上執行的單體堆疊。
- 資源隔離:可預測的應用程式效能。
- 資源利用率:高效率與高密度。
接下來
最後修改日期:2026 年 3 月 1 日,下午 2:32 (PST):
將 kubectl 概念頁面新增至概覽章節 (2e10c1ef0e)