K8s集群核心組件全解析:從架構設計到最佳實踐
圖片
控制平面組件
1. API Server
API Server是整個集群的統一入口,負責處理所有REST API請求。它實現了認證、授權、準入控制等重要安全機制。
高級特性:
? 支持水平擴展
? 提供了Watch機制,支持增量更新
? 實現了RBAC細粒度權限控制
?? 注意事項:在高可用架構中,建議至少部署3個API Server實例,并通過負載均衡確保服務可用性。
2. etcd
etcd是集群的數據庫,采用鍵值對格式存儲集群的所有配置信息和狀態數據。
核心特性:
? 強一致性(基于Raft協議)
? 提供watch機制
? 支持數據加密存儲
?? 注意事項:生產環境中,etcd至少需要3個節點構建高可用集群,并且建議使用SSD存儲。
3. Controller Manager
Controller Manager是集群的大腦,負責維護集群的狀態,比如故障檢測、自動擴展、滾動更新等。
主要控制器:
? ReplicaSet Controller:維護Pod副本數
? Node Controller:管理節點狀態
? Endpoint Controller:服務發現相關
? ServiceAccount Controller:管理默認賬戶
?? 注意事項:不同控制器的循環周期可以通過參數調整,需要根據集群規模合理設置。
4. Scheduler
Scheduler負責Pod的調度決策,通過復雜的算法選擇最適合的Node運行Pod。
調度流程:
新建Pod過濾階段打分階段綁定階段Pod運行
核心功能:
? 資源需求和節點資源匹配
? 親和性/反親和性調度
? 污點容忍度檢查
?? 注意事項:可以通過自定義調度器擴展調度策略,滿足特定場景需求。
工作節點組件(Worker Node)
1. Kubelet
Kubelet是每個節點的agent,負責維護容器的生命周期。
核心職責:
? 接收并執行Master的指令
? 管理容器和鏡像
? 上報節點和Pod狀態
?? 注意事項:建議對Kubelet的資源預留進行合理配置,避免節點資源耗盡。
2. Container Runtime
容器運行時引擎,負責真正的容器創建和管理工作。
支持的運行時:
? Containerd(推薦)
? CRI-O
? Docker(已棄用)
?? 注意事項:建議使用Containerd,它更輕量且性能更好。
3. Kube-proxy
Kube-proxy負責集群的網絡代理,實現了Service的抽象。
工作模式:
? iptables(默認)
? IPVS(高性能)
? userspace(已棄用)
?? 注意事項:大規模集群建議使用IPVS模式,性能更好。