對于每個想落地kubernetes應(yīng)用的工程師來說,熟悉kubernetes的架構(gòu)和工作原理是必經(jīng)之路,也是必須知道的知識,只有了解kubernetes的架構(gòu)和工作原理才能更好的應(yīng)用kubernetes 。
公司主營業(yè)務(wù):網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴(yán)謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出資中免費做網(wǎng)站回饋大家。
Kubernetes最初源于谷歌內(nèi)部的Borg,提供了面向應(yīng)用的容器集群部署和管理系統(tǒng),所以整體的架構(gòu)和borg很相似,整個架構(gòu)有api server,control manager,scheduler,etcd,kubelet,kube-proxy,network-plugin等相關(guān)組件完成,整體架構(gòu)如下:
Api server,Control manager,Scheduler,Etcd屬于master節(jié)點,相關(guān)組件功能如下:
1.Etcd:保存了整個集群的狀態(tài);
2.Apiserver:提供了資源操作的唯一入口,并提供認證、授權(quán)、訪問控制、API注冊和發(fā)現(xiàn)等機制;
3.Controller manager:負責(zé)維護集群的狀態(tài),比如故障檢測、自動擴展、滾動更新等;
4.Scheduler:負責(zé)資源的調(diào)度,按照預(yù)定的調(diào)度策略將Pod調(diào)度到相應(yīng)的機器上;
Kubelet,Container runtine,Kube-proxy屬于woker節(jié)點,相關(guān)組件功能如下:
1.kubelet:負責(zé)維護容器的生命周期,同時也負責(zé)Volume(CSI)和網(wǎng)絡(luò)(CNI)的管理;
2.Container runtime:負責(zé)鏡像管理以及Pod和容器的真正運行(CRI);
3.kube-proxy:負責(zé)為Service提供cluster內(nèi)部的服務(wù)發(fā)現(xiàn)和負載均衡;
如下為kubernetes的整個工作流程圖:
下面為一個個pod創(chuàng)建過程:
1.用戶提交創(chuàng)建Pod的請求,可以通過API Server的REST API ,也可用Kubectl命令行工具,支持Json和Yaml兩種格式;
2.API Server處理用戶請求,存儲Pod數(shù)據(jù)到etcd;
3.Schedule通過和API Server的watch機制,查看到新的Pod,嘗試為Pod綁定Node;
4.過濾主機:調(diào)度器用一組規(guī)則過濾掉不符合要求的主機,比如Pod指定了所需要的資源,那么就要過濾掉資源不夠的主機;
5.主機打分:對第一步篩選出的符合要求的主機進行打分,在主機打分階段,調(diào)度器會考慮一些整體優(yōu)化策略,比如把一個Replication Controller的副本分布到不同的主機上,使用最低負載的主機等;
6.選擇主機:選擇打分最高的主機,進行binding操作,結(jié)果存儲到etcd中;
7.Kubelet根據(jù)調(diào)度結(jié)果執(zhí)行Pod創(chuàng)建操作: 綁定成功后,會啟動container,docker run,scheduler會調(diào)用API在數(shù)據(jù)庫etcd中創(chuàng)建一個bound pod對象,描述在一個工作節(jié)點上綁定運行的所有pod信息。運行在每個工作節(jié)點上的Kubelet也會定期與etcd同步bound pod信息,一旦發(fā)現(xiàn)應(yīng)該在該工作節(jié)點上運行的bound pod對象沒有更新,則調(diào)用Docker API創(chuàng)建并啟動pod內(nèi)的容器;
在這期間,Control Manager同時會根據(jù)kubernetes的mainfiles文件執(zhí)行rc pod的數(shù)量來保證指定的pod副本數(shù)。而其他的組件,比如scheduler負責(zé)pod綁定的調(diào)度,從而完成整個pod的創(chuàng)建。