K8s client go 創建CRD的informer

背景

需要監聽K8s中CRD資源的變動, 做出相應的處理, 需要針對 CRD資源建立informer

實現

dynamicClient 是 創建的K8s的client, 這里使用的是 Unstructured 接収的CRD的結果,
加工的時候使用了convertUnstructuredProject 加工了一下, convertUnstructuredProject 實現下面提供

		// 創建sharedInformerFactory,第二個參數為同步周期,也就是多久從APIServer List一次,并更新到本地緩存informer := cache.NewSharedInformer(&cache.ListWatch{ListFunc: func(options v1.ListOptions) (runtime.Object, error) {return dynamicClient.Resource(projectGvk).List(ctx, options)},WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {return dynamicClient.Resource(projectGvk).Watch(ctx, options)},},&unstructured.Unstructured{},60*time.Second)// 創建informerif err != nil {log.Error("Failed to create informer", zap.Error(err))continue}// 注冊資源事件處理方法informer.AddEventHandler(cache.ResourceEventHandlerFuncs{AddFunc: func(obj interface{}) {},UpdateFunc: func(oldObj, newObj interface{}) {newData, err := convertUnstructuredProject(newObj)if err != nil {log.Error("Failed to convert unstructured project", zap.Error(err))}oldData, err := convertUnstructuredProject(oldObj)if err != nil {log.Error("Failed to convert unstructured project", zap.Error(err))}if oldData.Generation != newData.Generation {fmt.Println("update", newData)saveProject(newData, clsuter.Platform)}},DeleteFunc: func(obj interface{}) {data, err := convertUnstructuredProject(obj)if err != nil {log.Error("Failed to convert unstructured project", zap.Error(err))}fmt.Println("delete", data)deleteProject(data, clsuter.Platform)},})// 啟動stopCh := make(chan struct{})log.Info("Starting project informer factory")informer.Run(stopCh)// 等待父協程處理<-ctx.Done()close(stopCh)log.Info("Shutting down project informer factory")

convertUnstructuredProject的實現 Project 是實現的 runtime.Object 接口的struct

func convertUnstructuredProject(obj interface{}) (crd *Project, err error) {// 將obj轉換為*unstructured.Unstructured類型u, ok := obj.(*unstructured.Unstructured)if !ok {fmt.Println("Failed to convert object to *unstructured.Unstructured")return}// 將u對象轉換為YourCRDType類型crd = &Project{}err = runtime.DefaultUnstructuredConverter.FromUnstructured(u.UnstructuredContent(), crd)if err != nil {fmt.Println("Failed to convert object to YourCRDType")return}return
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/162096.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/162096.shtml
英文地址,請注明出處:http://en.pswp.cn/news/162096.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何進行網絡通信和套接字編程?

網絡通信和套接字編程 引言 網絡通信是計算機科學中的重要概念&#xff0c;它使得不同計算機之間可以進行數據交換和信息傳遞。套接字編程是一種實現網絡通信的方法&#xff0c;它提供了一套標準的接口&#xff0c;使得應用程序可以通過網絡進行數據傳輸。本文將詳細介紹網絡…

Python---global關鍵字---設置全局變量

global 英 /?ɡl??b(?)l/ adj. 全球的&#xff0c;全世界的&#xff1b;全面的&#xff0c;整體的&#xff1b;&#xff08;計算機&#xff09;全局的&#xff1b;球形的 需求&#xff1a;如果有一個數據&#xff0c;在函數A和函數B中都要使用&#xff0c;該怎么辦&…

【PyGIS】使用阿里AIEarth快速下載指定區域指定年份的土地利用數據

說明 中國逐年土地覆蓋數據集(CLCD) 由武漢大學的楊杰和黃昕教授團隊基于Landsat影像制作了中國逐年土地覆蓋數據集(annual China Land Cover Dataset, CLCD),數據包含1985—2021年中國逐年土地覆蓋信息。研究團隊基于Landsat長時序衛星觀測數據,構建時空特征,結合隨機森…

Linux常用命令——blockdev命令

在線Linux命令查詢工具 blockdev 從命令行調用區塊設備控制程序 補充說明 blockdev命令在命令調用“ioxtls”函數&#xff0c;以實現對設備的控制。 語法 blockdev(選項)(參數)選項 -V&#xff1a;打印版本號并退出&#xff1b; -q&#xff1a;安靜模式&#xff1b; -v&…

藍橋杯官網填空題(重合次數)

問題描述 在同一天中, 從上午 6 點 13 分 22 秒到下午 14 點 36 分 20 秒, 鐘表上的 分針和秒針一共重合了多少次? 注意時針、分針、秒針都圍繞中心敳勻速運動。 答案提交 這是一道結果填空的題&#xff0c;你只需要算出結果后提交即可。本題的結果為一 個整數, 在提交答案…

【正則插件】前端正則插件以及預覽插件推薦

1&#xff09; 2&#xff09; any-rule Pegex Previewer 下載好插件之后 在代碼層右鍵選擇 選擇你需要的正則表達式&#xff0c;隨后可以使用第二個插件 正則表達式插入之后頂部會有 Test Regex.. 點擊會出現以下內容 將他 ctrl a 刪除&#xff0c;輸入你對應的正則表達…

@Validated注解的作用代碼示例

當使用Spring框架進行參數驗證時&#xff0c;可以通過Validated注解來觸發參數驗證。以下是一個簡單的示例&#xff0c;演示了如何在Spring控制器中使用Validated注解來驗證請求的參數&#xff1a; 首先&#xff0c;假設有一個簡單的User類作為請求的數據模型&#xff1a; pu…

電腦序列號查詢

電腦序列號是廠商給每臺電腦分配的一個產品識別碼&#xff0c;也稱為S/N&#xff08;Serial Number&#xff09;。主要用來查詢電腦的出廠日期、保修狀態、生產產地、產品配置等信息。電腦序列號查詢有以下幾種方法&#xff1a; 1、電腦機箱外殼&#xff1b; 2、系統信息/命令…

前端下載文件鏈接

前端下載文件鏈接 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </hea…

CSS 文字溢出:ellipsis在IE上不起效果

單行文本的溢出顯示省略號 p {overflow: hidden;text-overflow: ellipsis;white-space: nowrap; }多行文本的溢出顯示省略號 方法一&#xff1a; p {display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 3;overflow: hidden;text-overflow: ellipsis; }…

梁培強:塑造下一代投資高手

在當前全球經濟動蕩和金融市場快速變化的背景下&#xff0c;梁培強的投資教育計劃不僅僅是一套課程&#xff0c;它是對傳統投資理念的深度挑戰和革新。梁培強&#xff0c;擁有超過二十年金融行業經驗的資深分析師&#xff0c;正在引領一場投資者教育的變革&#xff0c;旨在培養…

C++中的Makefile是什么, 如何使用

Makefile簡介 Makefile是一種用于構建C/C程序的文件&#xff0c;其中包含了項目中所有源文件、頭文件以及編譯器和鏈接器指令。使用Makefile可以使編譯和鏈接成為一個自動化的過程&#xff0c;這樣就可以方便地管理復雜的項目。 以下是一個簡單的Makefile示例&#xff1a; C…

Centos 7 安裝yum(針對python卸載yum出錯)

提前下載所需安裝包&#xff0c;按照下面順序安裝即可完成&#xff0c;每個依賴包必須正確安裝 下載地址&#xff1a;http://mirrors.163.com/centos/7/os/x86_64/Packages/ rpm -qa|grep python|xargs rpm -ev --allmatches --nodeps ##強制刪除已安裝程序及其關聯 whereis …

基于SSM+Vue的社區共享食堂管理系統

基于SSM的社區共享食堂管理系統的設計與實現~ 開發語言&#xff1a;Java數據庫&#xff1a;MySQL技術&#xff1a;SpringMyBatisSpringMVC工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系統展示 主頁 菜品詳情 管理員界面 摘要 社區共享食堂管理系統是一種基于SSM&#xf…

CentOS 7實現類似于Kali Linux中的自動補全功能

在CentOS 7中&#xff0c;可以通過安裝和使用Bash-completion來實現自動補全功能&#xff0c;類似于Kali Linux中的自動補全。以下是安裝和使用Bash-completion的步驟&#xff1a; 首先&#xff0c;確保您的系統已更新并安裝了EPEL存儲庫。&#xff08;非必要&#xff0c;直接…

實現數據全字段搜索

代碼 按鈕 <el-button type"text" style"position: absolute;top:-48px;right:260px;z-index: 99;color: #000;"click"handleButtonClick(搜索), showConfirmationModal2()" :class"{ blue-text: activeButton 搜索 }"><im…

二、sql手工注入

一、SQL注入的本質 解釋&#xff1a;想要進行sql注入&#xff0c;肯定要發現注入點&#xff0c;一般簡單的sql注入通過下面兩種方式判斷就能發現是否存在sql注入漏洞 1.字符型 注意&#xff1a;字符型注入可能為或" 查詢語句&#xff1a; select * from student where…

Python生成exe文件

Python如何生成exe文件 在終端執行 pip install pyinstaller 在終端執行pyinstaller E:\fund_data\GetFund.py&#xff0c;運行結束后會在D:\Python\Python311\Scripts\dist\目錄下生成GetFund.exe文件 3.雙擊exe文件運行&#xff0c;如果未出現預期結果&#xff0c;可以把e…

含分布式電源的配電網可靠性評估(matlab代碼)

1主要內容 該程序參考《基于仿射最小路法的含分布式電源配電網可靠性分析》文獻方法&#xff0c;通過概率模型和時序模型分別進行建模&#xff0c;實現基于概率模型最小路法的含分布式電源配電網可靠性評估以及時序模型序貫蒙特卡洛模擬法的含分布式電源配電網可靠性評估。程序…

區間第k小數 (可持久化線段樹、主席樹)

題意&#xff1a;多次詢問&#xff0c;每次詢問某區間的第k小數。 可持久化線段樹&#xff1a; 摻雜了一點前綴和的思想&#xff0c;對于每一個1 ~ i 的區間都建一個樹&#xff0c;每個節點存的都是一個線段樹&#xff0c;值存的是當前區間中初始數組按大小排序后[l, r]之間的…