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