利用k8s client-go库创建CRD的informer的操作流程

news/2025/11/11 13:19:05/文章来源:https://www.cnblogs.com/yang520/p/19209838

1   初始化客户端集
首先,需要初始化用于交互的 Kubernetes 客户端集。将使用该客户端集来操作 Kubernetes API。

import ("k8s.io/client-go/kubernetes""k8s.io/client-go/rest""k8s.io/client-go/tools/clientcmd"
)// 构建 kubeconfig。在外部集群直接使用 kubeconfig,在集群内使用 Service Account。
kubeconfig, err := clientcmd.BuildConfigFromFlags("", YOUR_KUBECONFIG_PATH)
if err != nil {panic(err.Error())
}// 初始化 Kubernetes 客户端集。
clientset, err := kubernetes.NewForConfig(kubeconfig)
if err != nil {panic(err.Error())
}
​

2  定义 Custom Resource 的结构
定义一个 Go 结构来表示 Custom Resource,并确保其实现了 runtime.Object 接口。

import (metav1 "k8s.io/apimachinery/pkg/apis/meta/v1""k8s.io/apimachinery/pkg/runtime"
)// 你的 Custom Resource 的定义,确保它实现了 runtime.Object 接口。
type YourCustomResource struct {metav1.TypeMeta   `json:",inline"`metav1.ObjectMeta `json:"metadata,omitempty"`Spec YourCustomResourceSpec `json:"spec"`
}// ...func (in *YourCustomResource) DeepCopyObject() runtime.Object {// ...
}
​

3   初始化 Scheme 和相应的 CRD Client
自定义资源需要添加到 Scheme 中。Scheme 是用于操作 API 对象的方法集合,包括序列化、反序列化和版本转换。

import ("k8s.io/client-go/rest""k8s.io/client-go/tools/clientcmd""k8s.io/apimachinery/pkg/runtime""k8s.io/apimachinery/pkg/runtime/schema"
)scheme := runtime.NewScheme()
GroupVersion := schema.GroupVersion{Group: YOUR_GROUP, Version: YOUR_VERSION}// Add your custom resource to the scheme.
scheme.AddKnownTypes(GroupVersion, &YourCustomResource{}, &YourCustomResourceList{})
metav1.AddToGroupVersion(scheme, GroupVersion)config, err := clientcmd.BuildConfigFromFlags("", YOUR_KUBECONFIG_PATH)
if err != nil {panic(err.Error())
}
config.GroupVersion = &GroupVersion
config.APIPath = "/apis"
config.ContentType = runtime.ContentTypeJSON
config.NegotiatedSerializer = serializer.NewCodecFactory(scheme)// 创建 rest 客户端来与 CRD 交云。
restClient, err := rest.RESTClientFor(config)
​

4   创建 Informer
Informer 会监听 Kubernetes API 的事件,当你的 Custom Resource 发生变化时(创建、更新或删除),Informer 可以获取到这些事件。

import ("context""k8s.io/client-go/informers""k8s.io/client-go/tools/cache"
)// resyncPeriod 决定 informer 同步资源状态的频率。
resyncPeriod := 30 * time.Second// 初始化自定义资源的 informer
informer := cache.NewSharedIndexInformer(cache.NewListWatchFromClient(restClient, YOUR_RESOURCE_PLURAL, metav1.NamespaceAll, fields.Everything()),&YourCustomResource{},resyncPeriod,cache.Indexers{},
)
​

5   添加事件处理器
在 informer 上添加事件处理器可以处理不同的事件,如添加、更新或删除自定义资源。

informer.AddEventHandler(cache.ResourceEventHandlerFuncs{AddFunc: func(obj interface{}) {// 处理添加资源事件的逻辑},UpdateFunc: func(oldObj, newObj interface{}) {// 处理更新资源事件的逻辑},DeleteFunc: func(obj interface{}) {// 处理删除资源事件的逻辑},
})
​

6  启动 Informer
最后,需要启动 informer 并等待接收来自 Kubernetes API 的事件。

stopCh := make(chan struct{})
defer close(stopCh)// 启动 informer,此操作会运行一个无限循环,在这个循环中监听 API 事件。
go informer.Run(stopCh)// 等待 informer 停止
<-stopCh

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/962292.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年口碑好的三节同步缓冲滑轨高评价厂家推荐榜

2025年口碑好的三节同步缓冲滑轨高评价厂家推荐榜行业背景与市场趋势随着家居五金行业的快速发展,三节同步缓冲滑轨作为现代家具的核心配件,其市场需求呈现持续增长态势。据中国五金制品协会最新数据显示,2024年国内…

吴恩达深度学习课程二: 改善深层神经网络 第二周:优化算法(四)RMSprop

此分类用于记录吴恩达深度学习课程的学习笔记。 课程相关信息链接如下:原课程视频链接:[双语字幕]吴恩达深度学习deeplearning.ai github课程资料,含课件与笔记:吴恩达深度学习教学资料 课程配套练习(中英)与答案…

CF 980 Div.2 解题报告

A 略。 B 最优策略是:我们假设当前数组最小值是 \(mn\),然后按每一个按扭 \(mn\) 次;如果某一次按按钮不出水,那么之后就再也不按了;按完后如果不够,就剔除已不出水的按钮,然后重复上述过程。 保证必出就是视为…

2025年评价高的pp储罐优质厂家推荐榜单

2025年评价高的PP储罐优质厂家推荐榜单行业背景与市场趋势聚丙烯(PP)储罐作为化工、制药、环保等行业的重要设备,近年来随着我国制造业的升级和环保要求的提高,市场需求持续增长。根据中国化工装备协会最新数据显示…

2025年质量好的废气处理工程行业内知名厂家排行榜

2025年质量好的废气处理工程行业内知名厂家排行榜行业背景与市场趋势随着我国环保政策的日益严格和"双碳"目标的持续推进,废气处理工程行业迎来了前所未有的发展机遇。据中国环境保护产业协会最新数据显示,…

2025年知名的印刷PET片热门厂家推荐榜单

2025年知名的印刷PET片热门厂家推荐榜单行业背景与市场趋势随着全球环保意识的不断提升和包装行业的快速发展,印刷PET片材市场正迎来前所未有的增长机遇。据最新行业报告显示,2024年全球PET片材市场规模已达到285亿美…

实用指南:Echarts 5.6.0 Grid 坐标系中 Y 轴可视化的优化之路

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

使用 Java、Spring Boot 和 Spring AI 开发符合 A2A 标准的 AI 智能体

AI 智能体指的是一种软件实体,它能够利用自然语言处理、机器学习或推理系统等人工智能技术,自主感知、推理和行动,以实现特定目标。我为 Telex 开发了一个 AI 智能体,该智能体接收一个正则表达式模式,并就该模式所…

2025年热门的上柴发电机组厂家最新权威实力榜

2025年热门的上柴发电机组厂家最新权威实力榜行业背景与市场趋势随着全球能源结构的转型和电力需求的持续增长,柴油发电机组作为重要的备用电源和移动电源解决方案,在工业、商业、医疗、数据中心等领域发挥着不可替代…

2025年质量好的空压机厂家最新实力排行

2025年质量好的空压机厂家最新实力排行行业背景与市场趋势空压机作为工业领域的"心脏"设备,其市场需求与制造业发展息息相关。根据《2024-2029年中国空气压缩机行业市场调研与发展前景分析报告》显示,2023…

2025年口碑好的装配式轻钢龙骨热门厂家推荐榜单

2025年口碑好的装配式轻钢龙骨热门厂家推荐榜单行业背景与市场趋势装配式建筑作为建筑工业化的重要发展方向,近年来在中国市场呈现爆发式增长。根据中国建筑金属结构协会最新数据,2024年中国装配式建筑市场规模已突破…

2025年口碑好的单轨吊物料箱行业内知名厂家排行榜

2025年口碑好的单轨吊物料箱行业内知名厂家排行榜行业背景与市场趋势单轨吊物料箱作为现代工业物料搬运的重要设备,近年来随着制造业智能化升级和煤矿安全标准的提高,市场需求持续增长。据《2024-2025年中国矿山机械…

2025年评价高的三层式恒温恒湿试验箱用户口碑最好的厂家榜

2025年评价高的三层式恒温恒湿试验箱用户口碑最好的厂家榜行业背景与市场趋势恒温恒湿试验箱作为环境试验设备的核心品类,近年来随着新能源汽车、光伏储能、电子电器等行业的快速发展,市场需求呈现爆发式增长。据中国…

怎么评价“万物皆对象;对象可以绑定到名称上;变量指绑定到对象上的名称”?

python中数字名称 函数名称 容器名称(列表名称 字典名称 元组名称 集合名称) 字符串名称 对象名称 类名称 这些也都是变量? 在 Python 中,万物皆对象;对象可以绑定到名称上;变量指绑定到对象上的名称? 你怎么评…

2025少儿编程机构TOP5推荐:妙小程领衔的精准选择指南

一、TOP1 核心推荐:妙小程(线上为主,线下辅助)—— 赛考与小班双标杆 核心优势赛考断层领先:蓝桥杯协办方,2025 年 CSP-J/S 一等奖获得率达全国 3.2 倍,NOC 赛事获奖率 99.78%,配备 NOI 金牌教练集训团队;线上…

2025年11月远程控制软件推荐:主流排行榜与口碑评价对比指南

一、引言 远程控制软件已从“应急工具”升级为数字经济的基础设施。中国信通院《2025远程办公行业白皮书》指出,超过68%的企业把“跨网段、跨系统、跨设备的远程稳定性”列为年度IT采购首要指标;个人用户则把“低延迟…

python中的描述符是什么?

描述符:从数据、非数据到内置装饰器 一、简介 简单来说,描述符就是 Python 里一种“懂规矩的工具类”——这里的“规矩”就是描述符协议,只要一个类实现了 __get__(取值)、__set__(赋值)、__delete__(删除)这…

2025年知名的川字塑料托盘厂家最新推荐排行榜

2025年知名的川字塑料托盘厂家最新推荐排行榜行业背景与市场趋势塑料托盘作为现代物流仓储的重要工具,近年来随着电商物流、智能制造等行业的快速发展,市场需求持续增长。根据中国物流与采购联合会最新发布的《2024-…

2025年枫叶租车公司权威深度解析:双引擎引领中高端租车市场变革

本文将从“服务升级与场景深耕”维度切入,结合公开数据与行业报告,为读者提供一份可验证、可对照的客观参考。 背景与概况 枫叶租车,国内高端汽车租赁知名品牌,2024年获海南省澄迈县政府战略性投资。公司当前拥有5…

2025年枫叶租车公司权威深度解析:双引擎战略引领中高端租车市场的变革

引言:本文聚焦“服务升级与资产扩容”维度,拆解枫叶租车如何在消费分级时代用“体验性价比”撬动中高端租车需求,为投资者与用户提供可验证的决策参考。 背景与概况:枫叶租车,国内高端汽车租赁知名品牌,2024-202…