概述
使用 k8s 相關 sdk 做二次開發時,經常用到 apimachinery、api、client-go 這三個庫,一直對他們的職責不是很清楚,網上也沒有找到合适的文章做分析,筆者通過研究三個庫的源碼,總結他們之間的依賴關系如下:
- apimachinery 是最基礎的庫,包括核心的資料結構,比如 Scheme、Group、Version、Kind、Resource,以及排列組合出來的 常用的GVK、GV、GK、GVR等等,再就是編碼、解碼等操作
- api 庫,這個庫依賴 apimachinery,提供了k8s的内置資源,以及注冊到 Scheme 的接口,這些資源比如:Pod、Service、Deployment、Namespace
- client-go 庫,這個庫依賴前兩個庫,提供了通路k8s 内置資源的sdk,最常用的就是 clientSet。底層通過 http 請求通路k8s 的 api-server,從etcd擷取資源資訊
高清位址
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAjM2EzLcd3LcJzLcJzdllmVldWYtl2Pn5Gcuo3c51mboJHNm52LcdzM0EzNwQzLcVmdhNXLwRHdo9CXt92YucWbpRWdvx2Yx5yazF2Lc9CX6MHc0RHaiojIsJye.png)
apimachinery
apimachinery提供k8s最核心的資料結構。
高清位址
api
api 庫提供了k8s的内置資源,以及注冊到 Scheme 的接口,這些資源比如:Pod、Service、Deployment、Namespace
高清位址
client-go
client-go 庫通路k8s 内置資源的sdk,最常用的就是 clientSet。底層通過 http 請求通路k8s 的 api-server,從etcd擷取資源資訊。
關于 client-go 中最重要的 Informer 機制和原理,請參考本人另一篇文章: k8s源碼分析- Informer機制,裡面有一張詳細的源碼調用關系圖。
高清位址
總結
- 閱讀源碼是最好的學習方式,很多資料直接搜尋部落格是找不到答案的,通過研究源碼可以幫助你建立獨立思考的能力
- apimachinery 再往下依賴的内容更多是一些工具庫,就不再這裡做分析
- 三個庫的依賴關系依次是:apimachinery -> api -> client-go