您好,登錄后才能下訂單哦!
小編今天帶大家了解如何分析kubernetes中的api聚合機(jī)制設(shè)計(jì),文中知識點(diǎn)介紹的非常詳細(xì)。覺得有幫助的朋友可以跟著小編一起瀏覽文章的內(nèi)容,希望能夠幫助更多想解決這個問題的朋友找到問題的答案,下面跟著小編一起深入學(xué)習(xí)“如何分析kubernetes中的api聚合機(jī)制設(shè)計(jì)”的知識吧。
kubernetes中apiserver的設(shè)計(jì)無疑是復(fù)雜的,其自身內(nèi)部就包含了三種角色的api服務(wù),今天我們一起來臆測下其內(nèi)部的設(shè)計(jì),搞明白aggregator、apiserver、apiExtensionsServer(crd server)的設(shè)計(jì)精要
apiserver還是蠻復(fù)雜的,今天我們只討論其kube-aggregator/apiserver/apiextensions三者架構(gòu)上的設(shè)計(jì),而不關(guān)注諸如請求認(rèn)證、準(zhǔn)入控制、權(quán)限等等
一個最基礎(chǔ)的Rest服務(wù)通常會包括一個resource資源和一組HTTP請求的方法, 在kubernetes中被稱為一個REST,其內(nèi)部還內(nèi)嵌了一個Store(可以理解為繼承),其提供了針對某個具體資源的所有操作的集合,也就是我們常說的最終執(zhí)行CRUD的具體操作的實(shí)現(xiàn)
我們有了Rest就可以提供各種k8s中資源的管理,但是如果我要進(jìn)行擴(kuò)展呢,如果要支持一些外部的資源k8s中不存在, 最簡單的方式肯定就是在外部獨(dú)立一個服務(wù)了,由這個服務(wù)自己管理數(shù)據(jù)存儲、變更、控制等等邏輯
當(dāng)通過外部服務(wù)來進(jìn)行集群資源擴(kuò)展的時候,針對這類資源我們?nèi)绾渭傻疆?dāng)前的apiserver中呢?為此k8s中設(shè)計(jì)了APIAggregator組件(其實(shí)APIAggreator組件還包括代理后端服務(wù)等功能),來實(shí)現(xiàn)外部服務(wù)的集成,這樣開發(fā)人員不用修改k8s代碼,也可以來自定義服務(wù)信息
一個基礎(chǔ)的業(yè)務(wù)服務(wù)通常包含數(shù)據(jù)模型、控制邏輯、持久化存儲、基礎(chǔ)功能(認(rèn)證、監(jiān)控、日志等等)等等,為了要創(chuàng)建一個服務(wù),我們通常需要如下操作(不包含設(shè)計(jì)階段):1)選擇合適的框架(完成基礎(chǔ)功能) 2)定義數(shù)據(jù)模型 3)選擇數(shù)據(jù)存儲 4)編寫業(yè)務(wù)控制邏輯, 這里面除了業(yè)務(wù)控制邏輯,其余部分在大多數(shù)情況下可能都是通用,比如框架、數(shù)據(jù)存儲這些,那能不能簡化下?來看大招CRD
CRD中文被稱為自定義資源類型,其核心在k8s中提供數(shù)據(jù)模型定義、數(shù)據(jù)存儲、基礎(chǔ)功能,這樣如果我們要擴(kuò)展服務(wù)就只需要編寫一個業(yè)務(wù)邏輯控制器即可, 我們思考下其場景
通常web請求的處理流程都是反序列化、驗(yàn)證字段、業(yè)務(wù)邏輯處理、數(shù)據(jù)存儲,而在k8s中業(yè)務(wù)控制邏輯大多數(shù)由controller來進(jìn)行,那為了支持CRD剩余工作肯定也是在k8s中完成的
在我們完成定義模型之后,k8s的crd模塊需要進(jìn)行對應(yīng)資源REST的構(gòu)建、驗(yàn)證、轉(zhuǎn)換、存儲等操作這些無疑都是耗費(fèi)資源的,而且在apiserver這種數(shù)據(jù)總線上,由此可以發(fā)行CRD并不支持大規(guī)模的數(shù)據(jù)存儲
CRDServer主要就是負(fù)責(zé)CRD資源的管理,其會監(jiān)聽CRD資源的變更,并且為其創(chuàng)建對應(yīng)的REST接口,完成對應(yīng)的認(rèn)證、轉(zhuǎn)換、驗(yàn)證、存儲等機(jī)制
ServerChan從設(shè)計(jì)上更類似一種責(zé)任鏈的模式,簡單來說如果我處理不了該請求,我就交給下個人處理,這種操作在k8s中被稱為delegate(委托),接下來我們開始了解其關(guān)鍵實(shí)現(xiàn)
到目前我們已經(jīng)有了三個server, 其中APIAggregator負(fù)責(zé)外部服務(wù)的集成和內(nèi)部請求的轉(zhuǎn)發(fā),apiserver服務(wù)k8s匯總內(nèi)部資源的控制,CRDServer則負(fù)責(zé)用戶自定義資源的處理,然后我們就只需要將三者串聯(lián)起來,就是我們最終的apiserver
當(dāng)APIAggregator接收到請求之后,如果發(fā)現(xiàn)對應(yīng)的是一個service的請求,則會直接轉(zhuǎn)發(fā)到對應(yīng)的服務(wù)上否則則委托給apiserver進(jìn)行處理,apiserver中根據(jù)當(dāng)前URL來選擇對應(yīng)的REST接口處理,如果未能找到對應(yīng)的處理,則會交由CRD server處理, CRD server檢測是否已經(jīng)注冊對應(yīng)的CRD資源,如果注冊就處理
APIAggreagtor中會通過informer 監(jiān)聽后端Service的變化,如果發(fā)現(xiàn)有新的服務(wù),就會創(chuàng)建對應(yīng)的代理轉(zhuǎn)發(fā),從而實(shí)現(xiàn)對應(yīng)的服務(wù)注冊
當(dāng)在集群中創(chuàng)建了對應(yīng)的CRD資源的時候,會通過內(nèi)部的controller來感知對應(yīng)的CRD資源信息,然后為其創(chuàng)建對應(yīng)的REST處理接口,這樣后續(xù)接收到對應(yīng)的資源就可以進(jìn)行處理了
感謝大家的閱讀,以上就是“如何分析kubernetes中的api聚合機(jī)制設(shè)計(jì)”的全部內(nèi)容了,學(xué)會的朋友趕緊操作起來吧。相信億速云小編一定會給大家?guī)砀鼉?yōu)質(zhì)的文章。謝謝大家對億速云網(wǎng)站的支持!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。