☸️ Understanding Kubernetes (K8s) From Zero → Hero (Kubernetes (K8s) 從零到英雄的實戰理解)
原始來源與檔名:2026-05-14T092845+0800-☸️ Understanding Kubernetes (K8s) From Zero → Hero.md
前言/背景
隨著雲端與容器化技術的普及,Kubernetes (簡稱 K8s) 已成為現代雲端環境中運行生產應用程式的絕對標準。然而,許多初學者在面對 K8s 時,常因為龐雜的架構、陌生的術語以及缺乏實作環境而感到受挫。本文透過生活化的類比(如外送平台、大樓管理員),抽絲剝繭地從基礎概念、核心架構到實務指令,為讀者建立清晰且實用的 Kubernetes 心智模型。
章節詳細總結
為什麼我們需要 Kubernetes?
在沒有容器編排的環境中,面對應用程式崩潰、流量突增或版本更新時,往往需要大量的人工介入。
- 演進歷程:實體伺服器 (一機一應用) → 虛擬機 (資源隔離但笨重) → 容器 (輕量化,解決封裝問題) → Kubernetes (解決大規模管理問題)。
- 核心價值:你只需宣告「期望狀態 (Desired state)」(例如:我要保持 3 個 NGINX 實例運行),K8s 就會自動處理健康檢查、自動重啟、負載均衡與存儲掛載等所有的「如何達成 (How)」。
Kubernetes 架構解析
Kubernetes 叢集 (Cluster) 主要分為兩大部分:
- 控制平面 (Control Plane) - 大腦
- API Server:整個系統的唯一入口點。
- etcd:儲存叢集所有狀態與設定的分散式資料庫。
- Scheduler:負責將新的 Pod 分配到合適的工作節點上。
- Controller Manager:持續監控並確保系統的「當前狀態」與「期望狀態」一致。
- 工作節點 (Worker Nodes) - 肌肉
- kubelet:節點上的代理人,負責確保容器正常運行。
- kube-proxy:處理節點內部與外部的網路轉發。
- Container Runtime:實際執行容器的底層引擎(現多預設為 ContainerD,取代了早期的 Docker)。
核心建構區塊 (Core Building Blocks)
- Pod:K8s 中最小的部署單元。K8s 不直接調度容器,而是調度 Pod。一個 Pod 內通常包含一個容器,但也可包含多個緊密耦合的容器(共用網路 IP 與存儲空間),這被稱為 Sidecar 模式。
- Labels & Selectors:用於標記與查詢資源的鍵值對機制。
- Namespaces:提供邏輯上的隔離區(如區分 Dev, Test, Prod 環境)。
工作負載、網路與存儲
- 工作負載 (Workloads):依據應用特性選擇。無狀態應用使用 Deployment;資料庫等有狀態應用使用 StatefulSet;需要在每個節點都運行的背景程式(如監控)使用 DaemonSet;批次任務使用 Job / CronJob。
- 網路與服務 (Networking & Services):
- Service:為會動態銷毀重建的 Pod 提供穩定的內部 IP 與 DNS。
- Ingress:像飯店的接待員,負責處理外部 HTTP/HTTPS 流量的智慧路由。
- 存儲 (Storage):將存儲的提供 (PV, 就像銀行的保險箱) 與請求 (PVC, 就像申請保險箱的憑證) 分離,確保資料持久性。
關鍵機制:配置、排程與擴展
- 配置與機密:使用 ConfigMap 處理一般設定,使用 Secret 處理敏感資訊。
- 健康檢查 (Probes):Liveness 確保程式活著(死掉就重啟),Readiness 確保程式準備好接客(準備好才給流量)。
- 水平擴展 (Scaling):極度重要。當流量增加時,K8s 的擴展方式「絕對不是」在同一個 Pod 裡面塞入更多容器,而是創建全新的 Pod 實例,並將它們分散部署到不同的節點上。
總結與結論
- 宣告式哲學:Kubernetes 的核心哲學是「宣告式配置」。架構師不寫腳本告訴系統怎麼做,而是提交 YAML 定義最終藍圖,剩下的全部交由系統自治。
- 平台中的平台:K8s 本身不是 CI/CD 工具,也不是監控系統。它是一個強大且可擴展的「基礎設施 API」,讓開發者能夠在其上建置各種複雜的平台與自動化系統。
- 基礎知識即戰力:對於所有 DevOps 與後端工程師而言,理解 K8s 的「Pod、Deployment、Service」鐵三角運作機制,是跨入現代雲原生架構開發的最重要門檻。