K8s節(jié)點(diǎn)由主節(jié)點(diǎn)和工作負(fù)載節(jié)點(diǎn)兩類節(jié)點(diǎn)組成氨淌。
主節(jié)點(diǎn)運(yùn)行control panel拼苍,控制并管理整個(gè)系統(tǒng)玖姑。工作節(jié)點(diǎn)運(yùn)行用戶實(shí)際應(yīng)用程序端朵。
etcd?提供可靠的分布式數(shù)據(jù)存儲(chǔ)服務(wù),用于持久化存儲(chǔ)K8s集群的配置和狀態(tài)承疲。kubernetes集群的主數(shù)據(jù)庫酣溃,存儲(chǔ)著所有資源對(duì)象以及狀態(tài)。默認(rèn)與Master組件部署在一個(gè)NODE上纪隙。ETCD的數(shù)據(jù)變更都是用過API Server進(jìn)行赊豌。
K8s API server?用戶程序(如kubectl)、K8s其它組件之間通信的接口绵咱。K8s其它組件之間不直接通信碘饼,而是通過API server通信的。這一點(diǎn)在上圖的連接中可以體現(xiàn)悲伶,例如艾恼,只有API server連接了etcd,即其它組件更新K8s集群的狀態(tài)時(shí)麸锉,只能通過API server讀寫etcd中的數(shù)據(jù)钠绍。集群控制的唯一入口,是提供Kubernetes集群控制RESTful API的核心組件花沉。集群中各個(gè)組件之間數(shù)據(jù)交互和通信的中樞柳爽。提供集群控制的安全機(jī)制(身份認(rèn)證、授權(quán)以及接入控制)
Scheduler?排程組件碱屁,為用戶應(yīng)用的每一可部署組件分配工作結(jié)點(diǎn)磷脯。通過API Server的Watch接口監(jiān)聽新建Pod副本信息,并通過調(diào)度算法為該P(yáng)OD選擇一個(gè)最合適的Node娩脾。支持自定義的調(diào)度算法provider赵誓。默認(rèn)調(diào)度算法內(nèi)置預(yù)選策略和優(yōu)選策略,決策考量資源需求柿赊、服務(wù)質(zhì)量俩功、軟硬件約束、親緣性碰声、數(shù)據(jù)局部性等指標(biāo)參數(shù)诡蜓。
Controller Manager 執(zhí)行集群級(jí)別的功能,如復(fù)制組件奥邮、追蹤工作結(jié)點(diǎn)狀態(tài)万牺、處理結(jié)點(diǎn)失敗等。Controller Manager組件是由多個(gè)控制器組成的洽腺,其中很多控制器是按K8s的資源類型劃分的脚粟,如Replication Manager(管理ReplicationController 資源),ReplicaSet Controller蘸朋,PersistentVolume controller核无。集群內(nèi)各種資源controller的核心管理者。針對(duì)每一個(gè)具體的資源藕坯,都有相應(yīng)的Controller团南。保證其下管理的每個(gè)controller所對(duì)應(yīng)的資源始終處于“期望狀態(tài)”。
Kubernetes集群由多個(gè)Node共同承載工作負(fù)載炼彪,POD被分配到某個(gè)具體的NODE上執(zhí)行吐根。
kube-proxy?在應(yīng)用組件間負(fù)載均衡網(wǎng)絡(luò)流量。Service抽象概念的實(shí)現(xiàn)辐马,將到service的請求按策略(負(fù)載均衡)算法分發(fā)到后端POD(Endpoint)上拷橘,默認(rèn)使用iptables mode實(shí)現(xiàn)。支持nodeport模式喜爷,實(shí)現(xiàn)從外部訪問集群內(nèi)的service冗疮。
Kubelet?管理工作結(jié)點(diǎn)上的容器。位于集群中每個(gè)node上的非容器形式的服務(wù)進(jìn)程組件檩帐,Master和node之間的橋梁术幔。處理Master下發(fā)到本Node上的Pod創(chuàng)建、啟停等管理任務(wù)湃密;向API Server注冊Node信息诅挑。監(jiān)控本地Node上容器和節(jié)點(diǎn)資源情況,并定期向Master匯報(bào)節(jié)點(diǎn)占用情況泛源。
Container runtime?Docker, rkt等實(shí)際運(yùn)行容器的組件揍障。