首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

client-go源码初探

Kubernetes 官方的 Go 客户端,client-go 是 Kubernetes 非常重要的一部分。它实现了 Kubernetes API 的基本操作,如创建、查询、更新和删除资源等,同时还提供了各种高级功能,如 watch、liveness/readiness probe、metrics 等。下面是对 client-go 源码的简要分析。

那么调用k8s的方式有几种:

1、使用curl命令行工具发送http请求:

2、使用k8s客户端,比如python-go

3、使用k8s的api代理,比如kubectl proxy

然后,可以通过

基本组件

client-go 的基本组件包括:

RESTClient:REST API的 HTTP 客户端,用于与 Kubernetes APIServer 交互。

DynamicClient:使用RESTClient 实现的动态客户端,支持动态地查询、创建、更新和删除资源。

DiscoveryClient:使用RESTClient 实现的发现客户端,用于查询 Kubernetes API Server 中可用的 API 资源。

Informer:使用 watch 机制实现的资源事件监听器,可以监视 Kubernetes API Server 中的资源变化并及时通知订阅者。

Cache:用于存储Kubernetes 资源的缓存,支持基于内存、本地文件和远程存储等多种实现方式。

资源操作

client-go 支持对Kubernetes API 中的各种资源进行操作,如 Pod、Service、Deployment 等。对于每种资源,client-go 通常提供以下几个操作:

Create:创建指定的资源对象。

Update:更新指定的资源对象。

Delete:删除指定的资源对象。

Get:获取指定的资源对象。

List:列出符合指定条件的资源对象列表。

这些操作通常需要传入一个对应的结构体作为参数,同时还需要指定资源的名称、命名空间等信息。

watch 机制

watch 机制是Kubernetes API Server 中非常重要的一部分,它可以实时监视 Kubernetes 资源的变化并及时通知订阅者。client-go 中的 Informer 就是基于 watch 机制实现的资源事件监听器,它可以监听指定的 Kubernetes 资源并在资源发生变化时通知订阅者。通常使用如下代码来创建一个 Informer:

其中,ListWatch 用于指定要监听的资源,Pod{} 表示要监听的资源类型为 Pod,resyncPeriod 表示 Informer 重新同步资源的时间间隔,Indexers 用于指定 Informer 的索引策略。

缓存机制

为了提高资源访问效率,client-go 中使用了缓存机制。它可以将 Kubernetes 资源缓存到本地内存、本地文件或远程存储中,以便快速查询和更新资源。缓存机制通常包括以下几个组件:

Store:用于存储Kubernetes 资源的缓存,支持基于内存、本地文件和远程存储等多种实现方式。

Indexer:用于为缓存中的资源建立索引,以便更快地查询和更新资源。

Reflector:使用 watch 机制实现的资源同步器,可以将 Kubernetes API Server 中的资源同步到缓存中。

缓存机制的使用通常需要以下几个步骤:

创建一个 Store 对象,用于存储Kubernetes 资源。

创建一个 Indexer 对象,用于为Store 建立索引。

创建一个 Reflector 对象,用于将 Kubernetes API Server 中的资源同步到 Store 中。

创建一个 Informer 对象,用于监听 Store 中的资源变化并及时通知订阅者

这client-go是官方出品,但如果你想自己做(不建议)一个类似的客户端怎么弄,这里举一个简单的例子:

以HTTP协议为例,可以使用Go语言的net/http包进行开发。下面是一个简单的HTTP客户端,可以向指定的URL发送GET请求,并将响应内容打印出来:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230413A06IZN00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券