共計 2125 個字符,預計需要花費 6 分鐘才能閱讀完成。
丸趣 TV 小編今天帶大家了解如何分析 kubernetes 中的 api 聚合機制設計,文中知識點介紹的非常詳細。覺得有幫助的朋友可以跟著丸趣 TV 小編一起瀏覽文章的內容,希望能夠幫助更多想解決這個問題的朋友找到問題的答案,下面跟著丸趣 TV 小編一起深入學習“如何分析 kubernetes 中的 api 聚合機制設計”的知識吧。
kubernetes 中 apiserver 的設計無疑是復雜的, 其自身內部就包含了三種角色的 api 服務, 今天我們一起來臆測下其內部的設計, 搞明白 aggregator、apiserver、apiExtensionsServer(crd server)的設計精要
1. 從 web 服務到 web 網關到 CRD
apiserver 還是蠻復雜的,今天我們只討論其 kube-aggregator/apiserver/apiextensions 三者架構上的設計,而不關注諸如請求認證、準入控制、權限等等
1.1 最基礎的 REST 服務
一個最基礎的 Rest 服務通常會包括一個 resource 資源和一組 HTTP 請求的方法, 在 kubernetes 中被稱為一個 REST,其內部還內嵌了一個 Store(可以理解為繼承),其提供了針對某個具體資源的所有操作的集合,也就是我們常說的最終執行 CRUD 的具體操作的實現
1.2 Service
我們有了 Rest 就可以提供各種 k8s 中資源的管理,但是如果我要進行擴展呢,如果要支持一些外部的資源 k8s 中不存在,最簡單的方式肯定就是在外部獨立一個服務了,由這個服務自己管理數據存儲、變更、控制等等邏輯
1.3 APIAggregator
當通過外部服務來進行集群資源擴展的時候,針對這類資源我們如何集成到當前的 apiserver 中呢?為此 k8s 中設計了 APIAggregator 組件(其實 APIAggreator 組件還包括代理后端服務等功能),來實現外部服務的集成,這樣開發人員不用修改 k8s 代碼,也可以來自定義服務信息
1.4 一個服務的基本功能
一個基礎的業務服務通常包含數據模型、控制邏輯、持久化存儲、基礎功能 (認證、監控、日志等等) 等等,為了要創建一個服務,我們通常需要如下操作 (不包含設計階段):1) 選擇合適的框架 (完成基礎功能) 2) 定義數據模型 3)選擇數據存儲 4)編寫業務控制邏輯,這里面除了業務控制邏輯,其余部分在大多數情況下可能都是通用,比如框架、數據存儲這些,那能不能簡化下?來看大招 CRD
1.5 CustomResourceDefinitions
CRD 中文被稱為自定義資源類型,其核心在 k8s 中提供數據模型定義、數據存儲、基礎功能,這樣如果我們要擴展服務就只需要編寫一個業務邏輯控制器即可,我們思考下其場景
通常 web 請求的處理流程都是反序列化、驗證字段、業務邏輯處理、數據存儲,而在 k8s 中業務控制邏輯大多數由 controller 來進行,那為了支持 CRD 剩余工作肯定也是在 k8s 中完成的
在我們完成定義模型之后,k8s 的 crd 模塊需要進行對應資源 REST 的構建、驗證、轉換、存儲等操作這些無疑都是耗費資源的,而且在 apiserver 這種數據總線上,由此可以發行 CRD 并不支持大規模的數據存儲
1.6 CRD server
CRDServer 主要就是負責 CRD 資源的管理,其會監聽 CRD 資源的變更,并且為其創建對應的 REST 接口,完成對應的認證、轉換、驗證、存儲等機制
2. ServerChan
ServerChan 從設計上更類似一種責任鏈的模式,簡單來說如果我處理不了該請求,我就交給下個人處理,這種操作在 k8s 中被稱為 delegate(委托), 接下來我們開始了解其關鍵實現
2.1 服務的角色劃分
到目前我們已經有了三個 server, 其中 APIAggregator 負責外部服務的集成和內部請求的轉發,apiserver 服務 k8s 匯總內部資源的控制,CRDServer 則負責用戶自定義資源的處理,然后我們就只需要將三者串聯起來,就是我們最終的 apiserver
2.2 責任鏈上的層層委托
當 APIAggregator 接收到請求之后,如果發現對應的是一個 service 的請求,則會直接轉發到對應的服務上否則則委托給 apiserver 進行處理,apiserver 中根據當前 URL 來選擇對應的 REST 接口處理,如果未能找到對應的處理,則會交由 CRD server 處理,CRD server 檢測是否已經注冊對應的 CRD 資源,如果注冊就處理
2.3 APIAggregator 上的服務注冊
APIAggreagtor 中會通過 informer 監聽后端 Service 的變化,如果發現有新的服務,就會創建對應的代理轉發,從而實現對應的服務注冊
2.4 CRD Server 中的資源感知
當在集群中創建了對應的 CRD 資源的時候,會通過內部的 controller 來感知對應的 CRD 資源信息,然后為其創建對應的 REST 處理接口,這樣后續接收到對應的資源就可以進行處理了
3. 基礎概覽圖
感謝大家的閱讀,以上就是“如何分析 kubernetes 中的 api 聚合機制設計”的全部內容了,學會的朋友趕緊操作起來吧。相信丸趣 TV 丸趣 TV 小編一定會給大家帶來更優質的文章。謝謝大家對丸趣 TV 網站的支持!