想象一下,你面對一個複雜的分佈式系統,它能自動管理成千上萬個容器,卻像一台精密儀器般運轉自如。但如果核心組件出現故障,整個系統會瞬間癱瘓——這正是 Kubernetes 的魅力與挑戰。本文將帶你深入 Kubernetes 的架構框架,層層拆解控制平面與節點組件,幫助你構建專業認知框架。無論你是初學者還是運維專家,這份指南都能讓你在實際操作中游刃有餘。
1. Kubernetes 架構概述
Kubernetes(簡稱 K8s)是一個開源的容器編排平台,設計用於自動化部署、擴展和管理容器化應用。其架構採用主從模型:控制平面(Control Plane)負責決策和狀態管理,工作節點(Worker Nodes)執行實際任務。根據最新2025年資料,K8s 強調高可用性和可擴展性,支持多雲和混合環境部署。
核心框架:
- 控制平面:集羣大腦,管理整體狀態。
- 工作節點:執行容器運行。
- 關鍵交互:通過 API Server 實現組件間通信。
2. 控制平面組件詳解
控制平面是 K8s 的指揮中心,通常部署在 Master 節點上。以下表格從功能、要點和故障角度專業剖析每個組件:
|
組件
|
一句話記憶
|
深度要點
|
故障徵兆
|
|
kube-apiserver |
唯一入口,RESTful API 網關
|
所有組件和客户端(如 kubectl)僅通過它交互;內置鑑權鏈(認證→授權→准入控制);支持水平擴展,前端負載均衡器確保高可用。
|
集羣“假死”:kubectl 命令報錯,無法連接服務器。
|
|
etcd |
集羣“賬本”,分佈式 KV 存儲
|
使用 Raft 協議確保強一致性,通常部署奇數節點(3/5/7);存儲所有資源狀態(如 Pod、ConfigMap);支持定期快照和壓縮以優化性能。
|
API Server 超時;集羣無法創建或更新資源。
|
|
kube-scheduler |
Pod“HR”,負責資源分配
|
調度流程:過濾節點 → 打分排序 → 綁定 Pod;考慮因素包括資源利用、親和性、污點;可自定義擴展(Scheduler Framework)。
|
Pod 長期處於 Pending 狀態,事件顯示無可用節點。
|
|
kube-controller-manager |
集羣“自動糾偏中心”
|
集成多個控制器(如 Deployment、Node);持續調諧實際狀態至期望狀態;支持 Leader Election 防止衝突。
|
副本數異常;Node 狀態未知;Endpoint 丟失。
|
|
cloud-controller-manager(可選) |
雲廠商“翻譯官”
|
將 K8s 事件轉換為雲 API 調用(如負載均衡);解耦核心邏輯,支持多雲環境。
|
雲資源(如外部 IP)無法自動 provision。
|
這些組件協同工作,確保集羣狀態一致。根據2025年更新,etcd 性能優化已成為焦點,推薦使用 SSD 存儲以提升 I/O 速度。
3. 工作節點組件詳解
工作節點是 K8s 的執行層,每個節點運行以下組件,負責容器生命週期管理:
|
組件
|
一句話記憶
|
深度要點
|
故障徵兆
|
|
kubelet |
Pod“小隊長”
|
監聽 Pod 規範,通過 CRI 創建容器;彙報節點狀態;內置探針(Liveness、Readiness、Startup)。
|
節點 NotReady;Pod 卡在 ContainerCreating。
|
|
kube-proxy |
Service“四層負載均衡”
|
模式:iptables(默認)或 IPVS(高性能);維護流量規則,支持會話親和。
|
Service 訪問超時;ClusterIP 無法路由。
|
|
容器運行時(CRI) |
容器引擎
|
推薦 containerd 或 CRI-O;實現鏡像拉取、容器執行等接口;Docker 已棄用。
|
鏡像拉取失敗;運行時崩潰導致 Pod 錯誤。
|
節點組件強調本地自治,2025年趨勢是集成更多安全特性,如 webhook 鑑權。
4. 組件交互流程(以創建 Pod 為例)
理解流程有助於調試。以下是簡化的步驟:
- 用户通過 kubectl apply 提交 Deployment → API Server 驗證並存入 etcd。
- Deployment Controller 檢測變化 → 創建 ReplicaSet 和 Pod 清單。
- Scheduler 過濾並綁定 Pod 到節點。
- Kubelet 在節點上拉取鏡像、啓動容器,並進行健康檢查。
- Kube-proxy 更新路由規則,使 Service 可達。
這個流程體現了 K8s 的聲明式設計:描述期望狀態,系統自動調諧。
5. 高頻面試問題與解答
基於專業框架,以下是常見追問點:
|
問題
|
關鍵詞解答
|
|
etcd 能否使用偶數節點? |
不推薦;Raft 需要過半投票,奇數節點(如3/5)提供更好容錯。
|
|
kubelet 與 API Server 通信如何安全? |
使用 HTTPS 和雙向 TLS 認證;證書自動輪轉。
|
|
Scheduler 如何自定義? |
通過 Scheduler Framework 在擴展點插入插件。
|
|
IPVS 比 iptables 優勢? |
O(1) 規則查找;支持更多調度算法;適合大規模 Service。
|
|
運行時崩潰後果? |
節點 NotReady;Pod 被驅逐(若啓用污點)。
|
6. 架構腦圖(文本版)
Kubernetes 集羣
├── 控制平面 (Master Nodes)
│ ├── kube-apiserver ← 暴露 API,負載均衡
│ ├── etcd ← 分佈式存儲,Raft 一致性
│ ├── kube-scheduler ← Pod 調度
│ ├── kube-controller-manager ← 狀態調諧
│ └── cloud-controller-manager ← 雲集成(可選)
└── 工作節點 (Worker Nodes)
├── kubelet ← 容器管理
├── kube-proxy ← 網絡代理
└── 容器運行時 ← containerd 等
這個腦圖便於記憶,建議打印並反覆審視。