什麼是 Kubernetes?

Alan Zeichick | 資深撰稿人 | 2025 年 9 月 5 日

Kubernetes 是一個開源平台,用於管理包含大量容器化服務的大型應用程式。Kubernetes 由 Google 工程師於 2014 年開發,並在不久後作為開源平台發布,現在是一個蓬勃發展的生態系統,幾乎受到每家雲端供應商的支援。Kubernetes 可用於管理使用微服務建置的雲端原生應用程式,以及在內部部署中或雲端執行的傳統應用程式。

Kubernetes 的強大功能之一是其自動化功能,可大幅減少跨網路管理應用程式所需的工作量。

什麼是 Kubernetes?

Kubernetes 是一個開源系統,用於部署、管理與擴展容器化應用程式,特別是使用微服務撰寫的雲端原生應用程式。Kubernetes 有時縮寫為 K8s,它允許管理員將容器叢集在一起,使其更易於管理。

Kubernetes 的作用為何?首先,它會部署容器,這些容器包含完整的應用程式或應用程式的元件 (通常稱為服務)。這些容器會部署到伺服器上,這些伺服器可能位於雲端、內部部署、分散於多雲組態的多個雲端,或混合雲/內部部署組態中。

容器部署完成後,Kubernetes 會提供探索功能,使應用程式或服務能夠從其他容器中找到其所需的服務。Kubernetes 會將流量導向受其控制的正確資源。如果系統正在執行容器化應用程式或服務的多個複本,Kubernetes 會自動執行負載平衡 (通常是為了因應高需求)。

Kubernetes 的強大功能之一,在於它能以對部署有意義的方式,將容器分組。例如,它可以將共用相同儲存體與網路的數個容器組成一個 Pod - 這是您經常會看到的一個術語。另一個常見的術語是 Kubernetes 節點 (nodes)。這些是存放容器的獨立機器,可能是實體伺服器,也可能是傳統的虛擬機器。執行 Kubernetes 的節點集合 (即一組實體或虛擬容器) 稱為叢集 (cluster)。

對於每個容器、Pod、節點與叢集,Kubernetes 都會管理儲存體資源,偵測並重新啟動故障的容器 - 此程序稱為「修復 (healing)」,甚至針對特定的分散式應用程式全面實施安全性通訊協定。經過設定,它可以處理密碼、安全性符記與加密金鑰,從而更輕鬆地保護關鍵資產。

Kubernetes 平台的開發由 雲端原生運算基金會 (CNCF,Cloud Native Computing Foundation) 負責監督。

容器與虛擬機器

容器通常會取代另一種雲端部署模型:虛擬機器 (VM)。容器比虛擬機器更輕量,因為它們會使用主機伺服器的底層作業系統與裝置驅動程式。相比之下,虛擬機器較大且需要更多處理資源,因為每個虛擬機器都包含自己的作業系統。因此,一部伺服器可以執行的容器數量比虛擬機器更多;更重要的是,伺服器能將更多處理器與記憶體資源專門用來執行應用程式,而不是維護多個作業系統實例 (每部虛擬機器一個)。雖然在某些特殊情況下仍需使用虛擬機器,但對大多數雲端應用程式部署而言,容器提供了一種效率遠高於虛擬機器的模型。

Kubernetes 與容器的比較

雖然 Kubernetes 與容器相關,但最好將它們視為互補技術。Kubernetes 是容器的管理平台,通常用於數量達數百或數千個容器的大規模部署。容器本身會將功能 (無論是微服務或完整的應用程式) 所需的所有程式碼與相依項目放入單一可執行格式中。

Kubernetes 則是同時管理多個容器的工具,通常用於雲端。Kubernetes 有時也稱為雲端作業系統,因為它能讓組織大規模管理容器。

重點精華

  • Kubernetes 會透過自動部署、擴充,甚至是修復與重新啟動大規模雲端部署中的容器,協調大量的容器部署。
  • 藉由最大化雲端資源的利用率,Kubernetes 可以降低部署企業應用程式的成本。
  • Kubernetes 提供了一個豐富的生態系統 - 建置與部署容器化應用程式、以及在生產環境中管理容器所需的一切,盡在其中。

Kubernetes 解析

Kubernetes 是一個能夠自動部署、調整規模並管理容器的平台。Kubernetes 還具備修復容器的能力 - 也就是偵測容器何時發生故障,並予以修正。Kubernetes 的核心在於協調:就像交響樂團的指揮家指揮樂手一樣,它清楚該做什麼、確保所有容器各就其位並正常運作,並在發生問題時採取行動。

正如指揮家需要同時參考鋼琴、小提琴、幾大提琴與銅管樂部的樂譜Kubernetes 也有一份文件來說明應用程式容器的預期狀態。此文件稱為組態檔 (configuration file),描述了使應用程式運作所需的功能,並指定哪些容器可以提供這些功能。組態檔還會列出可供應用程式容器使用的伺服器、儲存裝置、網路與其他實體機器。

啟動應用程式時,Kubernetes 會根據組態檔將必要的容器載入到可用的伺服器上,然後開始在這些容器內執行軟體。它會監控每部伺服器 (或節點) 的資源利用率,確保系統不會過載。如果過載,它會啟動新容器並停止舊容器,將容器移至負載較輕的伺服器。如果容器本身過載,Kubernetes 會在另一部伺服器上啟動該容器的相同複本,並自動配置負載平衡器,在兩者之間分配工作負載。隨著需求增加,它會啟動第三個容器,並視需要依此類推。稍後,如果工作負載減少,Kubernetes 會關閉任何不必要的容器,以協助降低成本,並釋放伺服器資源供其他任務使用。

容器發生故障時,Kubernetes 會迅速在另一部伺服器上啟動新容器,並將網路流量導離故障區域,提供快速的容錯移轉 (failover)。

為何要使用 Kubernetes?

想像您有一個需要數百或數千個容器的應用程式,每個容器都提供該應用程式所需的服務。系統管理員可以手動部署與管理容器 - 或許可以借助自動化工具,執行負載平衡或偵測故障等特定任務。事實上,甚至還有可用來管理小規模部署中容器的工具。這些工具最常由軟體開發人員與 DevOps 團隊在建置與測試容器化軟體時使用。

然而,如果沒有更完整的協調系統,系統管理的需求最終會變得令人難以負荷。

Kubernetes 的優點在於它是單一平台,可處理從部署容器、擴充規模到解決故障等各種自動化任務。此外,Kubernetes 是開源的且受到廣泛支援,包括所有主要的雲端供應商。簡而言之,它早已無所不在。這使得 Kubernetes 成為管理大型容器化企業應用程式的首選系統。

使用 Kubernetes 的優勢

當組織決定將其應用程式容器化時,採用 Kubernetes 來協調這些容器顯然是明智之舉 - 尤其是考慮到其廣泛的效益。

  • 高可用性:Kubernetes 的設計旨在實現高可用性 (HA)。它的自動修復功能 - 透過在相同或不同伺服器上重新啟動故障容器 - 是其高可用性配方的一環。同樣地,Kubernetes 能夠啟動一個容器的多個複本,將其放置在不同的伺服器甚至不同的資料中心,然後在它們之間分配工作負載。額外功能:如果您將軟體更新部署到容器化應用程式,可將 Kubernetes 設定為逐步發布更新後的容器。如果偵測到故障,便可以還原至先前的版本。
  • 隔離:每個容器都在其專屬的隔離環境中運作,為應用程式執行提供了安全且受保護的空間。此隔離機制旨在防止外部干擾與資源衝突,有助於維持應用程式的穩定性與完整性。由於 Kubernetes 在自動化容器部署與路由網路流量時皆遵循其組態檔,因此能提供額外的一層防護,避免可能影響系統正常運行時間的人為錯誤。
  • 可攜性:容器在不同類型的伺服器甚至不同雲端之間具備高度可攜性。唯一的實際限制在於:容器必須針對特定的作業系統建置。例如,為 Linux 編寫的容器內軟體必須在 Linux 伺服器上執行,而為 Windows 編寫的容器內軟體則必須在 Windows 伺服器上執行。即使有這項限制,Kubernetes 仍可以在伺服器、資料中心甚至雲端之間移動容器。事實上,Kubernetes 可以管理跨多個資料中心與雲端供應商的大型應用程式 - 同樣地,一切皆由它自動處理。
  • 資源效率:容器對於其執行的伺服器瞭解不多。相比之下,Kubernetes 可以判定每部伺服器對處理器、記憶體、儲存體及網路通訊的利用率。它可以在伺服器之間部署與移動容器,以最大化每部伺服器的利用率,進而協助降低成本。此外,Kubernetes 只會在必要時啟動新容器,並在不再需要時再次關閉它們,這也有助於降低成本。
  • 可擴充性:以一間雜貨店的收銀員為例。如果一個結帳櫃檯排隊太長,經理可以開啟另一條動線。同樣地,如果一個容器化軟體過載,Kubernetes 會偵測到該情況,並啟動另一個具有相同服務的相同容器,在兩者之間分配工作負載。事實上,如果有需要,它可以再啟動一百個相同的容器。這一切都是自動完成的。

Kubernetes 架構的關鍵元件

開發 Kubernetes 的 Google 工程師之所以選擇此名稱,是基於古希臘文中「領航員」或「舵手」(也就是駕駛船隻的人) 一詞,因為它會移動並管理一整隊容器。就像真實的貨櫃船一樣,Kubernetes 依賴許多元件協同工作,將其貨物 (資料) 運送到需要的地方。以下是您在討論容器與 Kubernetes 協調平台時經常會遇到的術語。

  • 叢集 (Cluster):叢集是一組機器 (稱為節點),用於執行由 Kubernetes 管理的容器化應用程式。叢集通常由一個主要節點 (master node) 與多個工作節點 (worker node) 組成。
  • 節點 (node):節點是構成 Kubernetes 叢集一部分的虛擬或實體機器。
  • Pod:意指在 Kubernetes 叢集上執行的單一容器或一組容器。Pod 是 Kubernetes 中的基本部署單位;一個 Pod 是由一或多個保證在同一個節點上共置 (colocated) 的容器組成。
  • 控制平面 (control plane):由 Kubernetes API 伺服器、Kubernetes 排程器 (scheduler)、Kubernetes 控制器管理員 (controller manager)、應用程式控制器與雲端控制器管理員組成。它負責管理跨叢集的節點與 Pod,以實現高可用性。
  • 容器 (container):容器是一個封裝了軟體及其相依項目的映像檔 (image),構成了容器化的基礎。
  • 部署 (deployment):部署負責管理複寫的應用程式 (以 Pod 表示),這些應用程式會被部署到叢集的節點上。
  • 複本集 (replicaset):複本集是指同時執行相同服務的一定數量 Pod 複本,為其所有容器提供備援與高可用性。
  • 服務 (service):服務描述了如何存取由一組 Pod 代表的應用程式。服務通常與負載平衡器配合使用,以最佳化對叢集的內部與外部存取。

Kubernetes 的關鍵功能

Kubernetes 不僅是一個容器管理平台,更是一個精密複雜的協調工具,能夠自動化並簡化從設計、部署到生產使用的整個應用程式生命週期。其強大的功能集有助於高效管理複雜的分散式應用程式。以下是 Kubernetes 的一些關鍵功能:

  • 容器協調:Kubernetes 可自動執行容器的部署、擴充規模與維護。它能智慧地管理容器配置,最佳化資源利用率,並實現高效的負載平衡。
  • 自我修復與自動擴充:Kubernetes 可以自動偵測並回應故障。它可以迅速重新啟動、複寫或重新排程容器,維持應用程式的健全性與可用性。
  • 服務探索與負載平衡:Kubernetes 透過內建的服務探索功能,實現容器間的通訊。它還提供負載平衡功能,將傳入流量分配到多個容器,以提供高可用性和資源利用效率。
  • 儲存協調:Kubernetes 允許應用程式存取本機、公有雲與私有雲上的各種儲存系統,進而簡化儲存管理。
  • 自動推出和倒回:Kubernetes 可自動執行新軟體版本的推出,將其逐步引入生產環境。如果出現問題,它可以自動倒回至先前的穩定版本,將對使用者的干擾降至最低。
  • 組態管理:Kubernetes 簡化了組態管理,能夠集中管理跨多個環境的應用程式組態。這也簡化了更新與維護工作。
  • 宣告式組態和自動化:Kubernetes 使用一個組態檔 (configuration file),有時稱為 YAML 檔案,意指「YAML Ain't Markup Language」(YAML 不是標記語言) 或「Yet Another Markup Language」(又一種標記語言),具體取決於您詢問的對象。此檔案對 Kubernetes 與人類而言皆清晰易懂,描述了完整應用程式的樣貌,以及如何自動化管理應用程式容器。
  • 儲存體與資料管理:Kubernetes 可以建立持續性磁碟區,在叢集內佈署與管理儲存體,且獨立於任何特定的 Pod 或容器。它們也可以視需要指派給特定任務。持續性磁碟區可更輕鬆地滿足應用程式的資料管理需求。

採用 Kubernetes 的常見挑戰

Kubernetes 經過多年錘鍊,但其學習曲線仍然相當陡峭。儘管如此,花時間學習 Kubernetes,仍遠勝於使用其他方法來管理大型分散式應用程式。以下是需要考慮的幾項挑戰:

  • 部署和管理的複雜性:大規模應用程式中有許多變動因素,包括軟體需求、以及用於執行軟體的基礎架構。Kubernetes 組態檔需涵蓋叢集擴充、修復、容錯移轉、監控與記錄等概念,以及升級部分系統之計畫。
  • 安全性風險與合規性漏洞:容器與容器化應用程式有潛力實現高度安全性,但這種安全性並非自動實現。例如,必須在 Kubernetes 內正確設定網路原則,以協助保護應用程式的所有部分免受來自叢集內部或外部的惡意存取。如果有密碼與加密金鑰,則必須加以保護 - 不能儲存在諸如 YAML 組態檔等易於讀取的文件中。容器映像檔儲存庫也必須受到保護,以協助防止竄改。而且,所有這些措施都必須妥善記錄。
  • 網路複雜性:簡單來說,即使是中型容器化應用程式的複雜性,在沒有自動化的情況下也十分難以管理。若再加上數十萬個 Pod (每個都由多個容器組成),以及與內部與外部儲存體、其他應用程式、終端使用者、網際網路等的連線,情況又會變得如何?如果應用程式橫跨多個資料中心甚至數個雲端,該怎麼辦?Kubernetes 可以協助進行網路組態設定,但仍有一些決策需要制定。在非常大型的 Kubernetes 部署中,網路組態問題可能十分難以診斷與修復。

Kubernetes 使用案例

企業將 Kubernetes 用於多種類型的應用程式;您可以在電子商務、製造業、研究、金融、公用事業等各行各業中找到它的身影。許多使用容器的大型分散式應用程式,都能從 Kubernetes 的協調與自動化中獲益。以下是 Kubernetes 大放異彩的幾個常見案例:

  • 網路規模的微服務架構:由數百或數千個微服務組成的複雜 Web 應用程式十分常見,這些微服務處理使用者驗證、工作階段管理、搜尋、購物車、付款、庫存管理,以及 AI 驅動的推薦引擎等任務。Kubernetes 可協助將每種類型的微服務隔離在專屬的 Pod 中,然後獨立管理這些服務。
  • 高流量應用程式的彈性擴充:Kubernetes 可以透過動態配置新容器與負載平衡,協助擴充高流量應用程式的服務,以快速因應工作負載的變化。Kubernetes 可以根據資源利用率進行自動調整規模,例如當容器的處理器或記憶體利用率超過特定限制,或伺服器接近其容量時。當需求減少時,它也可以縮減規模。這能讓應用程式的效能保持在預期參數內 (例如特定的回應時間),同時在低流量期間減少資源耗用。
  • 更安全的軟體更新部署:Kubernetes 已與許多軟體開發工具整合,這些工具使用持續整合/持續部署 (CI/CD) 模型來逐步改善企業軟體。Kubernetes 可以在新容器中逐步推出這些更新,並在發生問題時快速倒回至較早的版本。它甚至可以平行執行兩個版本,並提供效能比較報告。

Kubernetes 與人工智慧

Kubernetes 與 AI 的交集可以為企業帶來變革性的影響,因為 Kubernetes 可以在管理與協調雲端中的 AI 工作負載方面扮演關鍵角色。特別是,Kubernetes 為 AI 訓練與部署提供了一個強大且靈活的平台,提供以下幾項優勢:

  • 自動化:Kubernetes 可以自動部署並更新 AI 模型。
  • 容器化:Kubernetes 能將 AI 模型及其相依項目封裝到容器中,有助於確保一致的效能,並在各種環境中輕鬆部署。這種可攜性對 AI 至關重要,因為它允許在不同環境中訓練與部署模型。
  • 高可用性:對於作為關鍵業務流程支柱的 AI 應用程式而言,高可用性至關重要。Kubernetes 的自我修復功能透過自動偵測故障並做出回應,為 AI 應用程式提供高可用性。
  • 可擴充性:AI 應用程式通常需要大量運算資源,特別是在訓練與大規模推論期間。Kubernetes 可以根據需求動態調整 AI 工作負載規模,以實現最佳的資源利用率與成本效益。

擁抱 Kubernetes 生態系統

過去十年 Kubernetes 的廣泛採用,催生了一個蓬勃發展的生態系統,包含工具、服務與支援技術。此生態系統進一步增強了 Kubernetes 的能力,為組織提供多樣化的選項來客製化其基礎架構與開發實務。此生態系統中的主要類別包括:

  • CI/CD 工具:持續整合與持續部署工具與 Kubernetes 整合,以自動執行建置、測試與部署流程。這些工具實現了高效的開發生命週期。
  • 容器登錄檔:這些服務作為集中式儲存庫,用於儲存與管理容器映像。這些登錄檔與 Kubernetes 無縫整合,能輕鬆部署與管理容器化應用程式。
  • 監控和記錄工具:為了提供高效的追蹤與分析,Kubernetes 與數十個監控與記錄系統整合,提供有關應用程式效能、行為與潛在問題的洞察力。
  • 安全性解決方案:Kubernetes 也與一系列安全工具整合,包括容器原生防火牆與執行時期保護工具。這些系統強化了在 Kubernetes 上執行的應用程式,協助防範潛在威脅與漏洞。

任何關於 Kubernetes 生態系統的討論,若不提及由雲端原生運算基金會 (CNCF) 主辦的 Kubernetes 開發人員與使用者年度會議 (KubeCon),都是不完整的。自 2015 年第一屆 KubeCon 召開 (當時有 500 名參與者以來),該活動已大幅成長。2024 年,鹽湖城會議吸引了超過 9,000 名開發人員與工程師。

5 個部署最佳實務

Kubernetes 的最佳實務可以寫成一整本書 - 事實上,已經有許多書籍問世。毫無疑問:Kubernetes 十分複雜。然而,遵循這些最佳實務可以協助企業成功利用此平台。

  1. 最佳化資源配置。 您不會想為應用程式在任何時刻需要的伺服器或其他運算、儲存體與網路資源支付超過實際需求的費用。善用 Kubernetes 的能力,根據即時指標與實際使用情況自動擴充與縮減叢集及 Pod 規模。
  2. 實施可觀察性與日誌記錄。 要完全掌握大規模企業應用程式中發生的情況並不容易。使用最佳的可見度工具進行日誌彙總,讓所有效能與故障報告資料都集中在一個地方。這些工具提供充滿指標的報告與儀表板,以及基於彙總資料的追蹤功能。
  3. 實施 GitOps 與基礎架構即程式碼。 GitOps 是一種佈建雲端基礎架構的流程,其中網路設計儲存在組態檔中,而這些組態檔又儲存在 Git 儲存區域中。Git 是一種熱門的開源軟體組態管理系統。組態檔稱為基礎架構即程式碼 (IaC),Kubernetes 使用它們來建立伺服器、儲存體與連線資源的網路。
  4. 增強安全性和規範。 使用基於角色的存取控制 (RBAC) 與零信任運算方法,建立「預設最小權限」網路,該網路能抵禦攻擊,即使是容器內執行的惡意或損壞軟體。諮詢您的法務部門,瞭解應保留哪些稽核日誌與組態檔以符合規範。
  5. 簡化多雲部署。 Kubernetes 可讓您自動化跨多個資料中心與多個雲端的大規模應用程式部署與協調。在架構設計、管理與疑難排解方面,這種部署本質上十分複雜。請儘可能透過抽象化、集中式身分管理與雲端無關的儲存系統,簡化此類部署。您可以使用 GitOps 與 IaC 在多個資料中心與不同雲端中佈建相同的網路。

使用 Oracle 簡化 Kubernetes 管理

OCI Kubernetes Engine (OKE) 是一項 Oracle 管理的容器調度服務,可以縮短建置雲端原生應用程式所需的時間與成本。OKE 有助於簡化大規模企業級 Kubernetes 的運作,讓您能夠透過自動擴充、修補與升級,輕鬆部署與管理資源密集型工作負載 (例如 AI)。OKE 提供:

  • 自動調整規模:OKE 會根據應用程式負載自動調整運算資源,這可以降低您的成本。
  • 效率:處理器 (包括用於 AI 工作負載的最先進機型) 可能很稀缺,但 OKE 的工作排程可以協助您最大化資源利用率。
  • 可攜性:OKE 在跨雲端與內部部署 (在您自己的資料中心) 方面具有一致性,可實現可攜性並避免供應商鎖定。
  • 簡單性:OKE 可減少管理 Kubernetes 基礎架構複雜性所需的時間與費用。
  • 可靠性:自動升級與安全性修補可以提升企業應用程式的可靠性。

Kubernetes 平台協調與自動化應用程式部署與管理的能力,已徹底改變了應用程式在雲端原生時代的執行方式。隨著 Kubernetes 持續演進並取得動能,它正變得更加重要。採用 Kubernetes 的企業可以獲得顯著的競爭優勢,因此瞭解這項技術對開發人員與業務領導者而言都至關重要。

Kubernetes 對雲端原生開發至關重要 - 這是打造更具韌性、可擴充性與敏捷性應用程式的關鍵,無論它們是在雲端、內部部署,或是在混合雲或多雲模型中執行。

Kubernetes 的常見問題

為何 Kubernetes 是企業雲端策略的關鍵元件?

Kubernetes 至關重要,因為它是企業部署、擴充與管理其分散式應用程式 (特別是在雲端中執行的應用程式) 的方式。Kubernetes 自動化提升了應用程式的可靠性,同時也最大化了資源利用率,進而降低成本。

企業大規模採用 Kubernetes 時,應考慮哪些關鍵因素?

有主要兩個因素需要考慮。第一個是組織準備度:您的工程師與開發人員是否已準備好接受這種應用程式開發與部署模型?另一個是技術面:您是否擁有正確的架構方法,能以安全、穩定且符合管控要求的方式,設計與部署 Kubernetes 及容器?

企業大規模執行 Kubernetes 的主要成本考量為何?

Kubernetes 可以透過充分使用雲端資源,以及在不需要時釋放伺服器與儲存體等資源,協助降低成本。然而,在培訓、工具與最佳化網路及應用程式模型以充分利用可用資源方面,會產生相關成本。

企業如何確保從傳統基礎架構順利轉移到 Kubernetes?

這是一個巨大的轉變!首先,針對可能已在一個或相對少數容器中執行的小型應用程式導入 Kubernetes。請考慮從雲端架構的 Kubernetes 服務開始,由該服務代您管理資料平面,而不是嘗試自行學習、部署與操作所有不同的元素。嘗試進行升級、倒回、監控、故意製造故障等實驗,協助您的團隊獲得處理大型專案所需的經驗,例如將單體式應用程式重構為基於微服務的應用程式。