天天看點

k8s中Apimachinery、Api、Client-go庫之間的關系概述

概述

使用 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擷取資源資訊

高清位址

k8s中Apimachinery、Api、Client-go庫之間的關系概述

apimachinery

apimachinery提供k8s最核心的資料結構。

高清位址

k8s中Apimachinery、Api、Client-go庫之間的關系概述

api

api 庫提供了k8s的内置資源,以及注冊到 Scheme 的接口,這些資源比如:Pod、Service、Deployment、Namespace

高清位址

k8s中Apimachinery、Api、Client-go庫之間的關系概述

client-go

client-go 庫通路k8s 内置資源的sdk,最常用的就是 clientSet。底層通過 http 請求通路k8s 的 api-server,從etcd擷取資源資訊。

關于 client-go 中最重要的 Informer 機制和原理,請參考本人另一篇文章: k8s源碼分析- Informer機制,裡面有一張詳細的源碼調用關系圖。

高清位址

k8s中Apimachinery、Api、Client-go庫之間的關系概述

總結

  • 閱讀源碼是最好的學習方式,很多資料直接搜尋部落格是找不到答案的,通過研究源碼可以幫助你建立獨立思考的能力
  • apimachinery 再往下依賴的内容更多是一些工具庫,就不再這裡做分析
  • 三個庫的依賴關系依次是:apimachinery -> api -> client-go