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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

什么是informer机制

發布時間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 什么是informer机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Informer機制是kubernetes中不依賴任何中間件的情況下僅通過HTTP協議實現消息的實時性、可靠性、順序性通信的一種機制

k8s是典型的server-client架構。etcd存儲集群的數據信息,apiserver作為統一的操作入口,任何對數據的操作都必須經過apiserver。

客戶端通過ListAndWatch機制查詢apiserver,而informer模塊則封裝了List-watch。

ListAndwatch是k8s統一的異步消息處理機制,保證了消息的實時性、可靠性、順序性等,為聲明式風格的API奠定了良好的基礎,是k8s架構的精髓。

Informer也被稱為Shared Informer,它是可以共享使用的。

1. Reflector

Reflector 用于監控(Watch)指定的Kubernetes資源,當監控的資源發生變化時,觸發相應的變更事件,例如Added事件,Updated事件,Deleted事件,并將其資源對象存放到本地緩存DeltaFIFO中。

List在Controller重啟或Watch中斷的情況下,調用資源的list API羅列資源對象以進行全量更新,基于HTTP短鏈接實現

curl http://127.0.0.1:8080/api/v1/pods

(1)r.listerWatcher.List用于獲取資源下的所有對象的數據,例如,獲取所有Pod的資源數據。獲取資源數據是由options的ResourceVersion控制的。如果ResourceVersion為0,則表示獲取所有Pod的資源數據;如果ResourceVersion非0,則表示根據資源版本號繼續獲取。

(2)listMetaInterface.GetResourceVersion用于獲取資源版本號。

(3)meta.ExtractList用于將資源數據(runtime.Object對象)轉換成資源對象列表([]runtime.Object對象)。

因為r.listerWatcher.List獲取的是資源下的所有對象的數據,例如所有的Pod資源數據,所以它是一個資源列表。

(4)r.syncWith用于將資源對象列表中的資源對象和資源版本號存儲至DeltaFIFO中,并會替換已存在的對象。

(5)r.setLastSyncResourceVersion用于設置最新的資源版本號。

Watch則在多次List之間進行,調用資源的watch API,基于當前的資源版本號監聽資源變更(如Added、Updated、Deleted)事件。

通過在Http請求中帶上watch=true,表示采用Http長連接持續監聽apiserver發來的資源變更事件

curl http://127.0.0.1:8080/api/v1/watch/pods?watch=true

apiserver在response的HTTP Header中設置Transfer-Encoding的值為chunked,表示采用分塊傳輸編碼。每當有事件來臨,返回一個WatchEvent。

2. DeltaFIFO

DeltaFIFO可以分開理解,FIFO是一個先進先出的隊列,它擁有隊列操作的基本方法,例如Add、Update、Delete、List、Pop、Close等,而Delta是一個資源對象存儲,它可以保存資源對象的操作類型,例如Added操作類型、Updated操作類型、Deleted操作類型、Sync操作類型等

DeltaFIFO與其他隊列最大的不同之處是,它會保留所有關于資源對象的操作類型,隊列中會存在擁有不同操作類型的同一個資源對象,消費者在處理該資源對象時能夠了解該資源對象所發生的事情。queue字段存儲資源對象的key,item字段通過map數據結構的方式存儲,value存儲的是對象的Delta數組。

DeltaFIFO本質上是一個先進先出的隊列,有數據的生產者和消費者,其中生產者是Reflector調用Add方法,消費者是Controller調用的Pop方法

3. Indexer

Indexer是client-go用來存儲資源對象并自帶索引功能的本地存儲,Reflector從DeltaFIFO中將消費出來的資源對象存儲至Indexer。Indexer與Etcd集群中的數據完全保持一致。client-go可以很方便地從本地存儲中讀取相應的資源對象數據,而無需每次從遠程Etcd集群中讀取,以減輕Kubernetes API Server和Etcd集群的壓力

總結

以上是生活随笔為你收集整理的什么是informer机制的全部內容,希望文章能夠幫你解決所遇到的問題。

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