K8S組件最全詳解(九大組件原理圖解)
K8S
Kubernetes(簡(jiǎn)稱(chēng)K8s),是一個(gè)開(kāi)源的容器編排平臺(tái),用于自動(dòng)化部署、擴(kuò)展和管理容器化應(yīng)用程序。
K8S誕生于Google,基于其多年在生產(chǎn)環(huán)境中運(yùn)行容器的經(jīng)驗(yàn),現(xiàn)已成為現(xiàn)代微服務(wù)架構(gòu)、和云原生應(yīng)用的核心技術(shù)。
圖片
K8S通過(guò)管理容器的生命周期,確保系統(tǒng)在大規(guī)模的生產(chǎn)環(huán)境中,可以高效穩(wěn)定地運(yùn)行。
K8S組件
k8s采用主從架構(gòu),其中集群中的所有節(jié)點(diǎn)都由控制平面管理、和調(diào)度。
如下圖所示:
圖片
K8S組件,主要會(huì)包含兩大最核心的組件:控制平面(Control Plane)、工作節(jié)點(diǎn)(Worker Nodes)。
控制平面(Control Plane):負(fù)責(zé)管理整個(gè)集群的狀態(tài),調(diào)度任務(wù),監(jiān)控集群正常運(yùn)行;
工作節(jié)點(diǎn)(Worker Nodes):運(yùn)行實(shí)際的應(yīng)用容器,負(fù)責(zé):容器的運(yùn)行、和管理。
如果你想掌握好K8s,最核心的就是掌握好:控制平面(Control Plane)和工作節(jié)點(diǎn)(Worker Nodes)。
下面,我就分別詳解:控制平面(Control Plane)和工作節(jié)點(diǎn)(Worker Nodes)@mikechen
控制平面組件
控制平面:負(fù)責(zé)管理 Kubernetes 集群中的所有節(jié)點(diǎn)、和 Pod。
它由以下組件組成,重點(diǎn)關(guān)注下圖的“黃色框”:
圖片
“黃色框”會(huì)涉及到如下組件:API Server、Scheduler、Controller...等核心組件。
API Server
API Server:它是集群的入口,類(lèi)似微服務(wù)網(wǎng)關(guān)這樣,所有操作必須通過(guò) API Server。
負(fù)責(zé)接收來(lái)自用戶(hù)、和其他組件的請(qǐng)求,并通過(guò) REST API 提供集群管理功能。
Controller Manager
Controller Manager :是集群管理中的重要組件,它負(fù)責(zé)確保集群的實(shí)際狀態(tài)與期望狀態(tài)的一致性。
Controller Manager,是由多個(gè)控制器組成,每個(gè)控制器負(fù)責(zé)處理集群中的一種或、多種資源對(duì)象的狀態(tài)管理。
如下圖所示:
圖片
每個(gè)控制器負(fù)責(zé):特定類(lèi)型的資源、或功能。
常見(jiàn)的控制器包括:
- Deployment Controller:管理無(wú)狀態(tài)應(yīng)用的部署,包括“處理副本的創(chuàng)建、更新和滾動(dòng)升級(jí);
- StatefulSet Controller:管理有狀態(tài)應(yīng)用的部署,適合需要持久化存儲(chǔ)、和有序部署的應(yīng)用(如:數(shù)據(jù)庫(kù));
- ReplicaSet Controller:確保指定數(shù)量的 Pod 副本始終運(yùn)行,用于確保 Pod 副本數(shù)目符合期望;
- Job Controller:Job 可以創(chuàng)建多個(gè) Pod,并在成功完成任務(wù)后終止 Pod;
- CronJob Controller:類(lèi)似于 Linux 的 Cron 任務(wù),它會(huì)在指定的時(shí)間間隔內(nèi)創(chuàng)建 Job 實(shí)例;
- DaemonSet Controller:確保每個(gè)節(jié)點(diǎn)上都有一個(gè) Pod 實(shí)例,適合需要在每個(gè)節(jié)點(diǎn)上運(yùn)行的服務(wù),如:日志收集器、監(jiān)控代理...等;
- Namespace Controller:管理命名空間的生命周期,包括:創(chuàng)建/和刪除命名空間,以及相關(guān)資源的清理。
總之,控制器的設(shè)計(jì)使得 K8S,能夠在大規(guī)模環(huán)境中自動(dòng)化管理容器、和服務(wù)。
Scheduler
負(fù)責(zé)根據(jù)調(diào)度策略(如:資源使用率、親和性...等),將新創(chuàng)建的 Pod 分配到合適的節(jié)點(diǎn)上。
比如:通過(guò) CPU、內(nèi)存、GPU ...等資源的要求,Scheduler 確保節(jié)點(diǎn)有足夠的可用資源來(lái)滿(mǎn)足 Pod 的需求。
并且,通過(guò)調(diào)度策略,比如:公平調(diào)度、優(yōu)先級(jí)...等,確保資源的合理分配和高效利用。
etcd
分布式鍵值存儲(chǔ)系統(tǒng),用于保存集群的所有配置信息、和狀態(tài)數(shù)據(jù)。
etcd,重點(diǎn)保證數(shù)據(jù)的一致性、和持久性。
以及,提供集群狀態(tài)的快速讀取、和修改能力。
工作節(jié)點(diǎn)的組件
工作節(jié)點(diǎn)組件:運(yùn)行實(shí)際的應(yīng)用容器,負(fù)責(zé):容器的執(zhí)行、和管理。
每個(gè)工作節(jié)點(diǎn),包含以下“綠色框”所示組件:
圖片
工作節(jié)點(diǎn)是運(yùn)行實(shí)際應(yīng)用程序的地方,它接收 API Server 的調(diào)度指令并運(yùn)行 Pod。
工作節(jié)點(diǎn)上的核心組件包括:
Kubelet
每個(gè)節(jié)點(diǎn)上的代理,負(fù)責(zé)確保 Pod 正常運(yùn)行。
Pod是 K8S中最小的可部署單元,通常由一個(gè)、或多個(gè)緊密耦合的容器組成。
如下圖所示:
圖片
Pod 是 Kubernetes 中的基本構(gòu)建塊,提供了容器的封裝、和管理功能。
它們可以包含一個(gè)、或多個(gè)容器,這些容器共享:網(wǎng)絡(luò)、存儲(chǔ)資源,并在同一個(gè)環(huán)境中運(yùn)行。
當(dāng)創(chuàng)建一個(gè) Pod 時(shí),K8S調(diào)度器,會(huì)將 Pod 調(diào)度到合適的工作節(jié)點(diǎn)上。
調(diào)度器根據(jù)資源需求、節(jié)點(diǎn)的負(fù)載、和調(diào)度策略來(lái)選擇節(jié)點(diǎn)。
一旦 Pod 被調(diào)度到節(jié)點(diǎn)上,kubelet 在節(jié)點(diǎn)上啟動(dòng)并運(yùn)行 Pod 中的容器。
Kube-proxy
網(wǎng)絡(luò)代理,管理網(wǎng)絡(luò)規(guī)則,確保容器、和服務(wù)之間的網(wǎng)絡(luò)通信。
比如:使用 iptables 、或 ipvs 維護(hù)網(wǎng)絡(luò)規(guī)則,將流量轉(zhuǎn)發(fā)到相應(yīng)的 Pods。
容器運(yùn)行時(shí)
負(fù)責(zé)運(yùn)行容器,如:Docker、containerd 等。
主要復(fù)制:拉取容器鏡像,創(chuàng)建、和運(yùn)行容器。
以及,提供容器的生命周期管理,如:?jiǎn)?dòng)、停止和監(jiān)控容器...等等。
總之,K8S的控制平面、和工作節(jié)點(diǎn)是集群正常運(yùn)行的核心,通過(guò)這兩部分的協(xié)同工作,K8S才能夠?qū)崿F(xiàn)高效的容器編排、管理、和自動(dòng)化運(yùn)維。