在Kubernetes client-go库中如何有效构建CRD的informer

简介: 构建并运行Informer之后,你的应用现在能够实时地响应Kubernetes中的CRD资源变化事件。这是一个强大的模式,它可以使得你的应用更加智能地与你的Kubernetes集群互动。通过上述步骤,你可以创建一个强大、可扩展且与Kubernetes紧密集成的系统。

在Kubernetes ecosystem中,client-go库是一个强大的集合,它提供了与Kubernetes API进行交互的工具,使得我们可以在自己的应用程序中进行创建、配置以及管理Kubernetes资源。而对于自定义资源的定义(CRD),client-go也提供了informer的机制,此机制能够帮助我们监听资源的变化事件(如创建、更新和删除事件)。

构建一个CRD的Informer涉及以下几个核心步骤:

  1. 通过CRD定义生成客户端集合:首先,基于CRD定义生成相应的客户端代码。你可能需要使用如k8s.io/code-generator这样的代码生成工具来生成相应的API客户端代码。
  2. 建立自定义的Informer工厂:然后你需要通过从client-go中导入的工厂模块来建立自定义的Informer工厂实例。这个实例会根据你的自定义资源类型创建一个新的Informer。
  3. 创建和配置Informer:通过Informer工厂实例来创建Informer,在这个步骤中你可以对Informer进行配置,比如设置同步时间间隔,它决定了Informer多久拉取一次资源的最新状态。
  4. 设置事件处理程序:一旦Informer被创建,你需要设置资源事件的处理程序(handlers),例如当资源被添加、更新或删除时,你可以注册自定义逻辑来反应这些事件。
  5. 运行Informer:最后,启动Informer。Informer将在后台运行,并且监听自定义资源的变化,一旦发生变化,它就会调用你为这些事件注册的处理程序。

下面将详细阐述这些步骤。

1. 通过CRD定义生成客户端集合

使用k8s.io/code-generator这样的工具可以自动根据你的CRD定义生成Go语言的客户端库。这样可以为你的自定义资源类型生成类型化的客户端代码,通过这些代码,你可以更为简单地操作Kubernetes中的自定义资源。

2. 建立自定义的Informer工厂

与client-go库中为核心Kubernetes资源提供的Informer相似,你可以为CRD实现自己的Informer工厂。这通常涉及到引用自动生成的客户端集合,并且创建一个新的Informer工厂实例。

例如:

import (
    "mycustomclientset "github.com/myorganization/myproject/pkg/client/clientset/versioned"
    "k8s.io/client-go/informers"
    "k8s.io/client-go/tools/cache"
)

// 使用自定义clientset创建Informer工厂
factory := informers.NewSharedInformerFactory(mycustomclientset, time.Minute*10)
​

3. 创建和配置Informer

通过Informer工厂,构建出你的CRD资源对应的Informer。

informer := factory.ForResource(myCustomResourceGVR).Informer()
​

4. 设置事件处理程序

设置用于处理不同事件的回调函数,如添加、更新、删除等。

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

5. 运行Informer

最后,你需要启动Informer,这通常是在你的应用程序的主函数或某个goroutine中完成。

stopCh := make(chan struct{})
defer close(stopCh)

// 启动Informer
go informer.Run(stopCh)

// 等待Informer关闭
<-stopCh
​

构建并运行Informer之后,你的应用现在能够实时地响应Kubernetes中的CRD资源变化事件。这是一个强大的模式,它可以使得你的应用更加智能地与你的Kubernetes集群互动。通过上述步骤,你可以创建一个强大、可扩展且与Kubernetes紧密集成的系统。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
Kubernetes 网络性能优化 调度
聊聊 K8S pod 的 QoS(Quality Of Service)
聊聊 K8S pod 的 QoS(Quality Of Service)
|
Kubernetes 测试技术 容器
实践 Fake ClientSet 单元测试
在 Kubernetes 相关的开发中,client-go 是最常用的,对于 client-go 相关的代码我们可以通过 fake ClientSet 来编写单元测试,本文将实践利用 fake ClientSet
2345 0
|
7月前
|
关系型数据库 MySQL Java
【赵渝强老师】MySQL数据库的分库与分表
Mycat是一款开源分布式数据库中间件,支持MySQL等主流数据库,提供分库分表、读写分离、逻辑库/表抽象等功能。本文详解其核心概念(如分片表、ER表、全局序列号)、安装部署(JDK配置、服务启停)及实战配置(schema.xml/rule.xml),并演示基于三节点MySQL的分片数据路由与查询。
443 31
|
Kubernetes API Go
利用k8s client-go库创建CRD的informer的操作流程
以上步骤将创建一个针对特定 CRD 的 informer,该 informer 会触发相应的事件处理程序以便您对事件进行响应。这是一个高级的方案,需要对 Go 编程语言和 Kubernetes 内部机制有深入的了解。在应用之前,强烈建议深入了解 Kubernetes client-go 库以及其工作原理。
364 9
|
11月前
|
弹性计算 Kubernetes 测试技术
Kubernetes v1.30.6 环境下 HPA 自动扩缩容完整实践指南
本文基于Kubernetes v1.30.6,详解HPA自动扩缩容端到端实践,涵盖Metrics Server部署、TLS问题修复、测试应用部署、压测验证及私有Harbor镜像同步方案,提供版本兼容性与生产配置建议,助你快速落地弹性伸缩能力。
|
存储 机器学习/深度学习 人工智能
创新场景丨小鹏汽车:端到端智驾真正竞赛在云端
算力上的提前布局,让小鹏汽车在国内率先实现端到端智能驾驶大模型量产上车。小鹏汽车认为,端到端只是开始,不是终局,真正的竞赛正在云端展开,云端大模型才是制胜关键。拥有强大算力的阿里云,支撑小鹏汽车端到端大模型的快速迭代。
|
存储 Prometheus 监控
136_生产监控:Prometheus集成 - 设置警报与指标选择与LLM部署监控最佳实践
在大语言模型(LLM)部署的生产环境中,有效的监控系统是确保服务稳定性、可靠性和性能的关键。随着LLM模型规模的不断扩大和应用场景的日益复杂,传统的监控手段已难以满足需求。Prometheus作为当前最流行的开源监控系统之一,凭借其强大的时序数据收集、查询和告警能力,已成为LLM部署监控的首选工具。
1050 6
|
Prometheus 监控 Kubernetes
监控 Kubernetes 集群证书过期时间的三种方案
监控 Kubernetes 集群证书过期时间的三种方案
|
负载均衡 数据安全/隐私保护
k8s-ingress-nginx搭建
k8s-ingress-nginx搭建
886 0
k8s-ingress-nginx搭建
|
Prometheus 监控 前端开发
ARMS设置监控规则
【8月更文挑战第24天】
662 9