Kubernetes客户端client-go简介
生活随笔
收集整理的這篇文章主要介紹了
Kubernetes客户端client-go简介
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
介紹
Kubernetes 官方從 2016 年 8 月份開始,將 Kubernetes 資源操作相關的核心源碼抽取出來,獨立出來一個項目 client-go,Kubernetes中使用client-go作為Go語言的官方編程式交互客戶端庫,提供對api server服務的交互訪問。對于k8s的二次開發,熟練掌握client-go是十分必要的。
源碼地址:https://hub.fastgit.org/kubernetes/client-go.git
項目目錄解析
. ├── applyconfigurations ├── CHANGELOG.md ├── code-of-conduct.md ├── CONTRIBUTING.md ├── discovery # 通過Kubernetes API進行服務發現 ├── dynamic # 對Kubernetes對象執行通用操作的動態client ├── examples ├── go.mod ├── go.sum ├── informers # 一個非常牛逼的交互方式,通過reflector watch資源的事件放入隊列(DeltaFIFO)中,通過sharedProcessor的pendingNotifications(buffer.RingGrowing)來分發事件到具體的ResourceEventHandler中的OnAdd/OnUpdate/OnDelete進行處理.這個各informers后面詳細介紹 ├── INSTALL.md ├── kubernetes # 提供 ClientSet 客戶端 ├── kubernetes_test ├── LICENSE ├── listers # 為每一個 K8S 資源提供 Lister 功能,該功能對 Get 和 List 請求提供只讀的緩存數據 ├── metadata ├── OWNERS ├── pkg ├── plugin # 提供 OpenStack,GCP 和 Azure 等云服務商授權插件 ├── README.md ├── rest # 提供 RESTClient 客戶端,對 K8S API Server 執行 RESTful 操作 ├── restmapper ├── scale # 提供 ScaleClient 客戶端,用于擴容或縮容 Deployment, Replicaset, Replication Controller 等資源對象 ├── SECURITY_CONTACTS ├── testing ├── third_party ├── tools # 下面的/clientcmd提供了創建客戶端的一些基礎的工具 ├── transport # 提供安全的 TCP 連接,支持 HTTP Stream,某些操作需要在客戶端和容器之間傳輸二進制流,例如 exec,attach 等操作 └── util # 提供常用方法。例如 WorkQueue 工作隊列,Certificate 證書管理等19 directories, 10 filesClient類型
- 同時支持 Json 和 protobuf
- 支持所有原生資源和 CRDs
- 但是,一般而言,為了更為優雅的處理,需要進一步封裝,通過 clientset 封裝 RESTClient,然后再對外提供接口和服務;
- 訪問資源時,需要指定它的 Group、Version、Resource;
- 優雅的姿勢是利用一個 controller 對象,再加上 Informer;
- 如果一個 controller 中需要控制所有的 API,可以使用 DynamicClient,目前它在 garbage collector 和 namespace controller 中被使用。
- 只支持 JSON
Informer分析
官方原理圖,說明了client-go庫中各組件的工作流程,以及將要編寫的自定義控制器代碼的交互點
原理圖分析:
client-go組件:
Custom Controller組件:
原理圖對應的代碼分析:
client-go/tools/cache . ├── controller.go # 包含:Config、Run、processLoop、NewInformer、NewIndexerInformer ├── controller_test.go ├── delta_fifo.go # 包含:NewDeltaFIFO、DeltaFIFO、AddIfNotPresent ├── delta_fifo_test.go ├── doc.go ├── expiration_cache_fakes.go ├── expiration_cache.go ├── expiration_cache_test.go ├── fake_custom_store.go ├── fifo.go # 包含:Queue、FIFO、NewFIFO ├── fifo_test.go ├── heap.go ├── heap_test.go ├── index.go # 包含:Indexer、MetaNamespaceIndexFunc ├── index_test.go ├── listers.go ├── listwatch.go # 包含:ListerWatcher、ListWatch、List、Watch ├── main_test.go ├── mutation_cache.go ├── mutation_detector.go ├── mutation_detector_test.go ├── OWNERS ├── processor_listener_test.go ├── reflector.go # 包含:Reflector、NewReflector、Run、ListAndWatch ├── reflector_metrics.go ├── reflector_test.go ├── shared_informer.go # 包含:NewSharedInformer、WaitForCacheSync、Run、HasSynced ├── shared_informer_test.go ├── store.go # 包含:Store、MetaNamespaceKeyFunc、SplitMetaNamespaceKey ├── store_test.go ├── testing │ ├── fake_controller_source.go │ └── fake_controller_source_test.go ├── thread_safe_store.go # 包含:ThreadSafeStore、threadSafeMap ├── thread_safe_store_test.go ├── undelta_store.go └── undelta_store_test.go1 directory, 36 files參考鏈接:
https://zhuanlan.zhihu.com/p/202611841?utm_source=wechat_session
總結
以上是生活随笔為你收集整理的Kubernetes客户端client-go简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cgo的几种使用方式
- 下一篇: 数据结构--单向链表