1.kubernetes組件
一個(gè)kubernetes集群主要由控制節(jié)點(diǎn)(master)熔脂、工作節(jié)點(diǎn)(node)構(gòu)成,每個(gè)節(jié)點(diǎn)上都會(huì)安裝不同的組件废膘。
控制節(jié)點(diǎn)(master):集群的控制平面殖卑,負(fù)責(zé)集群的決策坊萝。
API Server:集群操作的唯一入口许起,接收用戶(hù)輸入的命令园细,提供認(rèn)證猛频、授權(quán)蛛勉、API注冊(cè)和發(fā)現(xiàn)等機(jī)制诽凌。
Scheduler:負(fù)責(zé)集群資源調(diào)度,按照預(yù)定的調(diào)度策略將Pod調(diào)度到相應(yīng)的node節(jié)點(diǎn)上痢法。
ControllerManager:負(fù)責(zé)維護(hù)集群的狀態(tài)杜顺,比如程序部署安排、故障檢測(cè)躬络、自動(dòng)擴(kuò)展和滾動(dòng)更新等洗鸵。
Etcd:負(fù)責(zé)存儲(chǔ)集群中各種資源對(duì)象的信息。
工作節(jié)點(diǎn)(node):集群的數(shù)據(jù)平面膘滨,負(fù)責(zé)為容器提供運(yùn)行環(huán)境。
Kubelet:負(fù)責(zé)維護(hù)容器的生命周期丹弱,即通過(guò)控制Docker铲咨,來(lái)創(chuàng)建纤勒、更新摇天、銷(xiāo)毀容器恐仑。
KubeProxy:負(fù)責(zé)提供集群內(nèi)部的服務(wù)發(fā)現(xiàn)和負(fù)載均衡裳仆。
Docker:負(fù)責(zé)節(jié)點(diǎn)上容器的各種操作歧斟。
2.kubernetes組件調(diào)用關(guān)系
以部署一個(gè)Nginx服務(wù)來(lái)說(shuō)明Kubernetes系統(tǒng)各個(gè)組件調(diào)用關(guān)系:
首先需要明確静袖,一旦Kubernetes環(huán)境啟動(dòng)之后壳猜,master和node都會(huì)將自身的信息存儲(chǔ)到etcd數(shù)據(jù)庫(kù)中。
一個(gè)Nginx服務(wù)的安裝請(qǐng)求首先會(huì)被發(fā)送到master節(jié)點(diǎn)上的API Server組件。
API Server組件會(huì)調(diào)用Scheduler組件來(lái)決定到底應(yīng)該把這個(gè)服務(wù)安裝到那個(gè)node節(jié)點(diǎn)上畅姊。此時(shí)咒钟,它會(huì)從etcd中讀取各個(gè)node節(jié)點(diǎn)的信息,然后按照一定的算法進(jìn)行選擇朱嘴,并將結(jié)果告知API Server。
API Server調(diào)用Controller-Manager去調(diào)用Node節(jié)點(diǎn)安裝Nginx服務(wù)萍嬉。
Kubelet接收到指令后,會(huì)通知Docker隙疚,然后由Docker來(lái)啟動(dòng)一個(gè)Nginx的Pod。Pod是Kubernetes的最小操作單元供屉,容器必須跑在Pod中行冰。
一個(gè)Nginx服務(wù)就運(yùn)行了,如果需要訪問(wèn)Nginx伶丐,就需要通過(guò)kube-proxy來(lái)對(duì)Pod產(chǎn)生訪問(wèn)的代理,這樣哗魂,外界用戶(hù)就可以訪問(wèn)集群中的Nginx服務(wù)了。