Kubernetes 是一套開源的容器管理平台,專門用來自動化管理大量容器化應用程式的部署、擴展與故障恢復。服務數量少於 5 個時不需要它;當服務超過 5 個、彼此有依賴關係,而且不好管理,Kubernetes 就是讓你不用半夜手動救火的關鍵工具。
這篇文章從「你的系統規模」出發,帶你判斷 Kubernetes 是什麼、解決什麼問題,以及你現在是否真的需要學它。
Kubernetes 是什麼?一句話先說清楚
Kubernetes 是一套容器編排(Container Orchestration)系統,讓你可以用一套統一的方式,管理跑在不同機器上的幾十甚至幾百個容器,包含自動部署、自動重啟、自動擴展、流量路由,全部都能自動化處理。
容器編排的意思是:當你的應用程式被打包成容器之後,你需要有人負責「指揮」這些容器在什麼機器上跑、出問題時怎麼處理、流量大的時候要不要多開幾個。
Kubernetes 就是扮演這個「指揮家」的角色。
K8s 這個縮寫怎麼來的
你在技術文章裡看到「K8s」,指的就是 Kubernetes。
縮寫的由來很簡單:Kubernetes 這個字在 K 和 s 之間剛好有 8 個字母(ubernete),所以工程師直接縮寫成 K8s。
這個命名方式在技術圈很常見,例如 i18n 代表 internationalization(i 和 n 之間有 18 個字母)。
往後你在搜尋資料、看文件的時候,K8s 和 Kubernetes 指的完全是同一件事,可以互換使用。

Kubernetes 和 Docker 的差別:不是競爭,是合作
這是新手最常搞混的一個問題。
Docker 是用來「建立和執行單一容器」的工具。你用 Dockerfile 定義應用程式環境,用 docker run 把容器跑起來,就這樣。
PS. Container 是一種技術,而在這個技術上出現非常多「廠商」,Docker 是巿佔率最高的一家,因為巿佔率太高了,所以大家很容易把 Docker 等同於 Container。
Kubernetes 則是用來「管理一大群容器」的平台。它自己不負責建立容器,而是依賴 Docker(或其他容器執行環境)把容器跑起來,然後在上面做調度、監控、擴展。
換句話說:Docker 是廚師,負責做出一道菜;Kubernetes 是餐廳的排班系統,負責決定今天要幾個廚師上班、哪個廚師負責哪個爐台、某個廚師請假時要怎麼補位。
兩者分工不同,實際上是一起搭配運作的。

沒有 Kubernetes 之前,工程師怎麼管容器?
單一容器的時代:在虛擬機上跑
當你的應用程式只有一個服務,例如一個 API 或一個網站,你根本不需要 Kubernetes,你可以直接在原有的虛擬機器上跑。
因為環境很單純,容器就像一個更小的虛擬器,可以直接 SSH 連進去做各種管理工作。
而在 GCP 上,Cloud Run 就能幫你把單一容器跑起來,自動處理 HTTPS、自動擴展、用多少付多少,設定時間不超過 10 分鐘。
這個階段引入 Kubernetes 反而是過度工程,徒增複雜度。很多團隊在這個階段就已經運作得很好,完全不需要 K8s。
系統變複雜之後,手動管理的三個痛點
當系統從 1 個服務成長到 5 個、10 個服務之後,手動管理容器會出現三個具體問題:
- 故障處理靠人工:某個容器因為記憶體不足崩潰,你必須自己登入伺服器、手動重啟。如果是凌晨三點發生,就要凌晨三點爬起來。
- 流量暴增應變慢:當某個服務突然湧入大量流量,你要手動判斷要多開幾個容器實例、在哪台機器上開、開完之後流量要怎麼導過去,每一步都是手動作業。
- 服務間通訊難維護:A 服務要找 B 服務,B 服務的 IP 在容器重啟後會改變,你要手動更新設定檔。這個問題在服務數量超過 5 個之後會變得非常頻繁。
這三個痛點,就是 Kubernetes 出現要解決的核心問題。

Kubernetes 解決了什麼問題?
自動重啟:容器掛掉不用半夜爬起來
Kubernetes 持續監控每一個容器的健康狀態。
當某個容器因為程式錯誤、記憶體溢出或其他原因停止回應時,Kubernetes 會在 30 秒內自動偵測到異常,並在同一台或另一台節點上重新啟動一個新的容器來替代它。
整個過程不需要人工介入。對使用者來說,服務中斷的時間可以壓縮到幾秒鐘以內,而不是「等工程師醒來處理」的幾十分鐘。
自動擴展:流量暴增時不用手動加機器
Kubernetes 的 Horizontal Pod Autoscaler(水平自動擴展,簡稱 HPA)是一套根據指標自動調整容器執行數量的機制,可以根據 CPU 使用率或自定義指標,自動增加或減少容器的執行數量。
例如你設定「當 CPU 使用率超過 70% 時,自動增加容器數量」,Kubernetes 就會在流量高峰時自動擴展,在流量退去後自動縮減。
這個功能讓你不需要在流量高峰前手動預估資源、提前擴容,也不用擔心流量退潮後忘記縮容浪費費用。
服務發現:多個服務之間怎麼找到彼此
在傳統部署方式下,服務 A 要連線到服務 B,需要知道服務 B 的 IP 位址。
但容器每次重啟後 IP 都會改變,這讓服務間的連線設定變成一場惡夢。
Kubernetes 用「Service」物件解決了這個問題。每個服務都有一個固定的 DNS 名稱,例如 user-service.default.svc.cluster.local,不管後面的容器 IP 怎麼變,這個 DNS 名稱永遠有效。
服務 A 只要用這個名稱呼叫服務 B,Kubernetes 自動幫你把請求導到正確的容器上。

你需要 Kubernetes 嗎?用系統規模來判斷
情境一:單一服務、流量穩定 → 不需要
如果你的系統只有 1 到 3 個獨立服務,彼此之間沒有複雜的依賴關係,流量也相對穩定,引入 Kubernetes 只會讓你多花時間在維護基礎設施,而不是開發功能。
這個階段最適合的工具是 Cloud Run(GCP)、App Engine,或者是最單純的 Compute Engine VM。
設定快、成本低、出問題好追蹤。
情境二:多個服務互相依賴 → 開始考慮
當你的系統開始出現微服務架構,例如前端、後端 API、資料處理服務、通知服務各自獨立部署,服務之間的相依關係會讓你管理越來越繁雜。
手動管理的痛點開始產生:服務上線順序要協調、某個服務掛掉其他服務跟著受影響、部署新版本要小心翼翼,因為牽一髮而動全身。
這是開始評估要不要用 Kubernetes 的時機。
情境三:需要高可用、自動擴展 → 強烈建議
如果你的系統有以下任何一個需求,Kubernetes 幾乎是必選項:
- 服務不能中斷超過 1 分鐘(高可用需求)
- 流量有明顯的尖峰與離峰(需要彈性擴縮)
- 需要零停機時間的滾動更新部署
- 有超過 10 個以上的微服務需要統一管理

判斷要不要導入 K8s 的 3 個問題
在決定要不要導入 Kubernetes 之前,先問自己這 3 個問題:
- 我的系統有幾個獨立部署的服務? 少於 5 個,先考慮更簡單的方案。
- 我的團隊有沒有人願意負責維護 K8s 叢集? 沒有專人維護,建議直接選 GKE Autopilot 或其他代管服務。
- 我現在的痛點是什麼? 如果痛點不是「容器管理太複雜」,Kubernetes 不是解答。
Kubernetes 的核心概念:看懂這 5 個詞就夠了
學 Kubernetes 不需要一次搞懂所有東西。
以下 5 個核心物件是你一定會碰到的,先建立基本印象就夠了。
Pod:容器的最小包裝單位
Pod 是 Kubernetes 中最小的部署單位,一個 Pod 裡面通常包含 1 個容器,但在特殊情況下也可以包含 2 到 3 個緊密相關的容器,它們共享同一個網路和儲存空間。
你可以把 Pod 想成是一個「容器的宿舍」——裡面住的是你的應用程式容器,宿舍本身負責提供網路連線和磁碟空間。
Pod 的生命週期很短,隨時可能被建立或銷毀,所以不要把重要資料直接存在 Pod 裡面。
Node:跑 Pod 的工作機器
Node 是 Kubernetes 叢集裡的工作節點,也就是實際跑 Pod 的機器。
Node 可以是實體伺服器,也可以是雲端上的虛擬機器(在 GKE 上就是 Compute Engine VM)。
一個 Kubernetes 叢集裡會有多個 Node,Kubernetes 的調度器會自動決定每個 Pod 要跑在哪個 Node 上,確保資源使用均衡。

Deployment:告訴 K8s「我要幾個副本」
Deployment 是 Kubernetes 中用來管理應用程式副本數量與更新策略的物件,你告訴它「我要這個應用程式跑幾份」,它就負責維持這個狀態。
例如你設定 replicas: 3,Kubernetes 就會確保永遠有 3 個相同的 Pod 在運行。如果其中一個 Pod 掛掉,Deployment 會立刻建立新的 Pod 來補位,讓總數維持在 3 個。
當你要更新應用程式版本時,Deployment 也會協調滾動更新的過程,讓新舊版本交替上線,不中斷服務。
Service:讓其他人找得到你的 Pod
因為 Pod 的 IP 會隨著重啟而改變,Kubernetes 用 Service 物件提供一個穩定的網路端點。
Service 就像是 Pod 群組的「固定門牌」,不管後面的 Pod 怎麼換,外部呼叫方只要記住這個門牌(DNS 名稱),就永遠能找到正確的 Pod。
Service 同時也做負載平衡,當有 3 個 Pod 在跑同一個服務時,Service 會把流量平均分配給這 3 個 Pod。

Ingress:對外開放的統一入口
Ingress 是 Kubernetes 叢集對外的流量入口物件,負責把外部的 HTTP 和 HTTPS 請求,根據 URL 路徑或網域名稱,路由到叢集內正確的 Service。
舉例來說,當使用者訪問 api.example.com/users 時,Ingress 把請求導向 user-service;訪問 api.example.com/orders 時,導向 order-service。
這樣你只需要一個對外 IP,就能管理多個內部服務的流量入口。

自己架 Kubernetes vs 用雲端代管服務
自己架的成本:光設定環境就要幾天
自己在虛擬機器上架設 Kubernetes(俗稱 self-hosted K8s)需要處理以下步驟:
- 安裝並設定 Control Plane(Master Node)
- 設定 Worker Node 並讓它們加入叢集
- 設定網路插件(CNI Plugin)讓 Pod 之間可以通訊
- 設定儲存方案(Storage Class)
- 設定監控、日誌收集、備份機制
從零開始,一個有經驗的工程師要花 2 到 5 天才能把環境架好,更別說後續的版本升級和安全性維護。
這些時間成本,對大多數團隊來說都不划算。

GKE、EKS、AKS 的差別在哪裡
三大雲端平台都有提供代管 Kubernetes 服務:
- GKE(Google Kubernetes Engine):Google Cloud 的代管 K8s。因為 Kubernetes 本身就是 Google 開源的,GKE 在相容性和新功能支援上往往最快。
- EKS(Amazon Elastic Kubernetes Service):AWS 的代管 K8s,與 AWS 其他服務(IAM、VPC、ALB)整合最深。
- AKS(Azure Kubernetes Service):Microsoft Azure 的代管 K8s,與 Azure DevOps 和 Active Directory 整合完善。
三者核心功能差異不大,選擇的關鍵通常是「你已經在用哪家雲」,而不是 K8s 功能本身的差異。
在 GCP 上為什麼推薦 GKE
GKE 有兩個對初學者特別友善的優點。
第一,GKE Autopilot 模式讓你完全不需要管理 Node。你只要定義要跑什麼應用程式,Google 自動幫你配置和維護底層節點,費用也只針對你實際使用的 Pod 資源計算,沒有部署應用程式的時候不收 Node 的費用。
第二,GKE 是 Kubernetes 的發源地,新功能和安全性修補的支援速度在三大雲中最快,官方文件和社群資源也最豐富。
如果你的雲端環境已經在 GCP 上,GKE 是進入 Kubernetes 世界成本最低的起點。

Kubernetes 值不值得學?給不同背景的人的建議
後端工程師:了解概念就夠,不一定要會操作
如果你是後端工程師,工作內容以開發功能為主,你需要的是「看得懂 K8s 設定檔、能和 DevOps 溝通」的程度,不一定需要自己架叢集或寫 YAML 設定。
重點是理解 Pod、Deployment、Service 這幾個核心物件的用途,知道你的程式碼被打包成容器之後,在 K8s 上是怎麼跑起來的。
這個程度大概需要 2 到 3 天的學習時間就能建立起來。
DevOps / 雲端架構師:必學,沒有例外
如果你的職涯目標是 DevOps 工程師或雲端架構師,Kubernetes 是 2024 年之後幾乎所有大型企業的標配基礎設施,不會 K8s 等於少了一張重要的入場券。
你需要學到的程度包含:
- 能夠自己建立和管理叢集
- 寫 Kubernetes YAML 設定檔
- 設定 CI/CD 流水線整合 K8s 部署
- 處理常見的故障排查
想考 GCP 證照的人:考前要懂的 K8s 核心考點
GCP 的 Associate Cloud Engineer 和 Professional Cloud Architect 兩張證照,都會考到 GKE 和 Kubernetes 相關知識。
考試中高頻出現的考點包含:
- GKE Standard 和 Autopilot 模式的差異與適用情境
- Deployment、Service、Ingress 物件的用途
- kubectl 常用指令(get、apply、delete)
- GKE 和 Cloud Run 的選擇判斷題
考前不需要實際操作建叢集,但要能看懂題目描述的情境,並判斷哪個 K8s 物件或哪種 GKE 設定最合適。

結語:搞懂 Kubernetes 是什麼之後,下一步去哪?
Kubernetes 是管理容器化系統的標準平台,但它不是每個人都需要的工具。
系統服務數量少於 5 個,先用 Cloud Run。服務開始互相依賴、需要高可用,再評估 GKE。你在 GCP 上,GKE Autopilot 是成本和複雜度最平衡的起點。
搞懂概念之後,下一步建議直接動手:在 GKE 上建立你的第一個 Cluster,部署一個真實的容器應用程式——這篇文章有完整的手把手操作流程,從建 Cluster 到部署 Ingress 全部都有截圖說明。
如果想看實際操作影片,可以參考 YouTube 上的 GKE 教學手把手實作。
常見問題(FAQ)
Q1:Kubernetes 和 Docker Compose 有什麼不同?
A:Docker Compose 是在單台機器上同時啟動多個容器的工具,適合本機開發或小型部署。Kubernetes 是設計給跨多台機器、需要高可用和自動擴展的生產環境使用的容器編排平台。當你的應用程式需要跑在超過 1 台機器上,Docker Compose 就不夠用了,這時候才是 Kubernetes 的用武之地。
Q2:Kubernetes 學起來難嗎?需要多久?
A:入門概念(Pod、Deployment、Service)大約需要 1 週時間可以理解並動手操作。能夠獨立管理生產環境的 K8s 叢集,需要 3 到 6 個月的實際操作經驗。最快的學習方式是直接在 GKE 上操作真實的叢集,而不是只看文件。
Q3:不用 Kubernetes,能不能用其他方式管理多個容器?
A:可以。常見的替代方案包含 Docker Swarm(較簡單,但功能有限)、HashiCorp Nomad(支援非容器工作負載)、或直接用雲端平台的託管服務(GCP 的 Cloud Run、AWS 的 ECS)。當你的規模不需要 Kubernetes 的全部功能時,這些替代方案的維護成本更低。
Q4:Kubernetes 本身是免費的嗎?費用從哪裡來?
A:Kubernetes 開源軟體本身是免費的。費用來自於執行叢集所需的基礎設施:你需要付費給雲端平台使用的虛擬機器(Node)、儲存空間和網路流量。GKE 在 Autopilot 模式下另外收取叢集管理費,但在 Standard 模式下每個帳號有 1 個免費的區域性叢集。
Q5:Kubernetes 適合個人專案或小型新創嗎?
A:在 95% 的情況下,個人專案和小型新創(團隊少於 5 人、服務數量少於 5 個)使用 Kubernetes 是過度工程。Cloud Run 或類似的 serverless 容器服務,在這個規模下成本更低、維護更簡單。等到服務複雜度真的撐不住了,再遷移到 Kubernetes 也不遲。
Q6:什麼是 Helm?學 Kubernetes 一定要學 Helm 嗎?
A:Helm 是 Kubernetes 的套件管理工具,讓你可以用「Helm Chart」的格式打包和部署應用程式,類似 npm 之於 Node.js。對初學者來說,先學會基本的 kubectl 操作和 YAML 設定之後,再學 Helm 比較合理。Helm 不是必學,但在實際工作環境中使用率極高。
Q7:Kubernetes 和 Service Mesh(如 Istio)是什麼關係?
A:Service Mesh 是建立在 Kubernetes 上的進階網路管理層,提供服務間流量的加密(mTLS)、詳細的流量觀測、流量控制(金絲雀部署)等功能。Istio 是目前最主流的 Service Mesh 實作之一。你需要先學會 Kubernetes,才有辦法理解 Service Mesh 解決的是什麼層次的問題。
Q8:GKE 和 Cloud Run 怎麼選?
A:Cloud Run 最適合無狀態的 HTTP 服務,設定簡單、自動擴展到零、按請求計費。GKE 適合有複雜部署需求、多個相互依賴的服務、或需要自定義網路和儲存設定的情況。判斷關鍵在於:你的應用程式是否有狀態(Stateful),以及你需不需要精細控制 Kubernetes 的部署設定。
Q9:Kubernetes 的 YAML 設定檔看起來很複雜,有沒有簡化的方法?
A:有 3 個方向可以降低 YAML 的複雜度。第一,使用 Helm Chart 把常用設定打包成模板;第二,使用 Kustomize 做環境差異的設定管理(開發環境和生產環境共用同一份基礎設定);第三,在 GKE 上使用 Google Cloud Console 的圖形介面建立基本物件,再從介面上匯出對應的 YAML 來學習格式。
Q10:Kubernetes 版本更新很快,學了會不會很快過時?
A:Kubernetes 核心概念(Pod、Deployment、Service、Ingress)從 1.0 版本至今幾乎沒有根本性的改變,這些概念不會過時。版本更新主要是功能新增、效能改善和安全性修補,不會讓你原本學的知識失效。建議追蹤每個版本的 Changelog 了解新增功能,但不需要因為版本更新而重新學習基礎。