溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用K8S源碼分析GenericAPIServer

發(fā)布時間:2021-12-28 15:26:30 來源:億速云 閱讀:155 作者:柒染 欄目:云計算

本篇文章給大家分享的是有關如何用K8S源碼分析GenericAPIServer,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

API Server對外提供的是RESTful接口,GenericAPIServer結構主要解決的就是URI路由的問題,即把URI映射到對應的處理邏輯??梢园袵enericAPIServer理解為一個微型的mvc框架,它是整個API Server的骨架。

GenericAPIServer相關的代碼在/staging/src/k8s.io/apiserver/pkg下(不是特別明白為啥是在/staging目錄,而不是直接在/pkg下)。

核心結構

核心的類關系如下圖:

如何用K8S源碼分析GenericAPIServer

最關鍵的三種結構簡單解釋如下:

Config相關 - 構造配置類。通過Config.Complete(...)方法獲得一個CompletedConfig實例,再在后者上調用New()方法就可以獲得一個GenericAPIServer的實例指針

GenericAPIServer & Handler - GenericAPIServer本身包括http server相關的所有參數(shù),當中最重要的是Handler field,用于實際處理業(yè)務邏輯

Handler是一個指向APIServerHandler的指針,APIServerHandler結構提供了ServeHTTP()方法,能夠直接提供給http.Server類生成http service

APIServerHandler中的FullHandlerChain結構是最終裝配完成的http.Handler,是所有handle邏輯的入口

所有內部資源(Pods/Deployments)的訪問路徑都注冊到GoRestfulContainer結構中,外部訪問方式(如通過API Server的proxy功能訪問node)注冊到NonGoRestMux中

Director是一個內部的Dispatcher,在GoRestfulContainer和NonGoRestfulMux間執(zhí)行路由

API Group - 類似于spring mvc中的RequestMapping結構,代表一個URI資源路徑。每一個內部資源(如Pods/Deployments)只要實現(xiàn)了rest.Storage等系列接口,就可以通過構造APIGroupInfo在GenericAPIServer上暴露出來

綜上所述,通過Config結構來創(chuàng)建并初始化GenericAPIServer,并把APIGroupInfo install到GenericAPIServer上就可以實現(xiàn)http接口的暴露。

初始化流程

在APIServerHandler構建過程中會調用DefaultHandlerChain函數(shù)來加入默認的處理handler。

以上就是如何用K8S源碼分析GenericAPIServer,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI