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请求,并将响应内容打印出来:
领取专属 10元无门槛券
私享最新 技术干货