您好,登錄后才能下訂單哦!
這篇文章給大家介紹Controller實現ReplicaSetController的示例分析,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
Controller的實現基本上都是通過SharedInformer的結構去監聽etcd上某種資源的變更,然后再執行對應的業務邏輯。
以ReplicaSetController為例,介紹一個controller如何與整個manager組合在一起。
controllers都是在NewControllerInitializers()方法中引入到manager里的:
|
startReplicaSetController是啟動函數,如下:
|
創建過程如下:
|
Informer監聽到的變更最終會回調到syncReplicaSet方法上,但當中會穿越多個協程,邏輯比較復雜。用一個時序圖近似表示如下:
這里的controller是Informer層的結構,對于資源變更會觸發HandleDeltas()方法。HandleDeltas方法會調用sharedProcessor.distribute方法,將Delta傳入到processListener的channel上,等待被處理。
run方法會不斷拉取listener自己本地channel中的變更,并根據ActionType分發到注冊的handler上的不同方法里。
在上文介紹的NewReplicaSetController()函數里,可以看到AddFunc對應的回調函數是enqueueReplicaSet。最終會把delta放入ReplicaSetController自己的queue隊列中,等待controller處理。
processNextItem方法會處理RepliaSetController.queue當中的變更信息,最終調用syncReplicaSet方法來處理變更,確保Pods和配置一致。
每個Controller的處理邏輯都不相同,但與manager & informer的交互大體類似。
ReplicaSetController的分析中可以再次看出go實現中,調用順序和傳統面向對象語言有很大差異。
關于Controller實現ReplicaSetController的示例分析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。