日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Kubernetes客户端client-go简介

發布時間:2025/3/21 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 files

Client類型

  • RESTClient:RESTClient 是最基礎的,相當于的底層基礎結構,可以直接通過 RESTClient 提供的 RESTful 方法如 Get(),Put(),Post(),Delete() 進行交互
    • 同時支持 Json 和 protobuf
    • 支持所有原生資源和 CRDs
    • 但是,一般而言,為了更為優雅的處理,需要進一步封裝,通過 clientset 封裝 RESTClient,然后再對外提供接口和服務;
  • Clientset:Clientset 是調用 Kubernetes 資源對象最常用的 client,可以操作所有的資源對象,它是基于 RESTClient 實現的。
    • 訪問資源時,需要指定它的 Group、Version、Resource;
    • 優雅的姿勢是利用一個 controller 對象,再加上 Informer;
  • DynamicClient:DynamicClient 是一種動態的 client,它能處理 kubernetes 所有的資源。不同于 Clientset,DynamicClient 返回的對象是一個 map[string]interface{}。
    • 如果一個 controller 中需要控制所有的 API,可以使用 DynamicClient,目前它在 garbage collector 和 namespace controller 中被使用。
    • 只支持 JSON
  • Informer分析

    官方原理圖,說明了client-go庫中各組件的工作流程,以及將要編寫的自定義控制器代碼的交互點

    原理圖分析:

    client-go組件:

  • Reflector: 定義在 /tools/cache 包內的 Reflector 類型 中的 reflector 監視 Kubernetes API 以獲取指定的資源類型 (Kind)。完成此操作的函數是 ListAndWatch。監視可以用于內建資源,也可以用于自定義資源。當 reflector 通過監視 API 的收到關于新資源實例存在的通知時,它使用相應的 listing API 獲取新創建的對象,并將其放入 watchHandler 函數內的 Delta Fifo 隊列中。
  • Informer: 在 /tools/cache 包內的基礎 controller 中定義的一個 informer 從 Delta FIFO 隊列中彈出對象。完成此操作的函數是 processLoop。這個基礎 controller 的任務是保存對象以供以后檢索,并調用 controller 將對象傳遞給它。
  • Indexer: indexer 為對象提供索引功能。它定義在 /tools/cache 包內的 Indexer 類型。一個典型的索引用例是基于對象標簽創建索引。Indexer 可以基于多個索引函數維護索引。Indexer 使用線程安全的數據存儲來存儲對象及其鍵值。在 /tools/cache 包內的 Store 類型 定義了一個名為 MetaNamespaceKeyFunc 的默認函數,該函數為該對象生成一個名為 <namespace>/<name> 組合的對象鍵值。
  • Custom Controller組件:

  • Informer reference: 這是一個知道如何使用自定義資源對象的 Informer 實例的引用。您的自定義控制器代碼需要創建適當的 Informer。
  • Indexer reference: 這是一個知道如何使用自定義資源對象的 Indexer 實例的引用。您的自定義控制器代碼需要創建這個。您將使用此引用檢索對象,以便稍后處理。
  • Resource Event Handlers: 當 Informer 想要分發一個對象給你的控制器時,會調用這些回調函數。編寫這些函數的典型模式是獲取已分配對象的鍵值,并將該鍵值放入一個工作隊列中進行進一步處理。
  • Work queue: 這是在控制器代碼中創建的隊列,用于將對象的分發與處理解耦。編寫 Resource Event Handler 函數來提取所分發對象的鍵值并將其添加到工作隊列中。
  • Process Item: 這是在代碼中創建的處理 work queue 中的 items 的函數。可以有一個或多個其他函數來執行實際的處理。這些函數通常使用 Indexer 引用 或 Listing wrapper 來獲取與鍵值對應的對象。
  • 原理圖對應的代碼分析:

    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简介的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。