📄️ client-go 源码分析(1) - discovery模块:discoveryclient获取所有的gv和gvr
本篇是client-go源码分析的第一篇,client-go是从事Kubernetes开发必研究的项目,client-go之所以重要,主要在以下几个方面:
📄️ client-go 源码分析(2) - discovery模块:discovery cache
DiscoveryClient可以将资源相关信息存储于本地,默认存储位置为~/.kube/cache和~/.kube/http-cache。缓存可以减轻client-go对KubernetesAPI Server的访问压力。默认每10分钟与Kubernetes API Server同步一次,同步周期较长,因为资源组、源版本、资源信息一般很少变动。DiscoveryClient第一次获取资源组、资源版本、资源信息时,首先会查询本地缓存,如果数据不存在(没有命中)则请求Kubernetes API Server接口(回源),Cache将Kubernetes API Server响应的数据存储在本地一份并返回给DiscoveryClient。当下一次DiscoveryClient再次获取资源信息时,会将数据直接从本地缓存返回(命中)给DiscoveryClient。本地缓存的默认存储周期为10分钟(对应CachedDiscoveryClient 结构体的ttl属性,超时时间)。代码示例如下:
📄️ client-go 源码分析(3) - rest模块
client-go的客户端对象有4个,作用各有不同:
📄️ client-go 源码分析(4) - ClientSet客户端 和 DynamicClient客户端
本篇的主题是客户端ClientSet。ClientSet和DynamicClient的优缺点正好互换。ClientSet只能操作内置的资源对象,DynamicClient不仅可以操作内置的资源对象,也可以操作CRD;ClientSet有类型检查,DynamicClient没有。
📄️ client-go 源码分析(5) - informer机制中的本地存储indexer
informer机制中的本地存储(local cache),对应的结构体是下面的cache struct。
📄️ client-go 源码分析(6) - DeltaFIFO
DeltaFIFO也包含在 Informer 中。DeltaFIFO 是 Delta + FIFO(先进先出队列),Delta的数据格式如下。DeltaType是String的类型,只有四种,分别是增加,更新,删除,同步。作为FIFO,有push和pop方法。
📄️ client-go 源码分析(7) - workerqueue之普通队列Queue
client-go 的 util/workqueue 包里主要有三个队列,分别是普通队列Queue,延时队列DelayingQueue,限速队列RateLimitingQueue,后一个队列以前一个队列的实现为基础,层层添加新功能。
📄️ client-go 源码分析(8) - workerqueue之延时队列DelayingQueue
延时队列DelayingQueue,从下面的接口可以看出添加的元素,有一个延迟时间,延时时间到了之后才能加入队列。
📄️ client-go 源码分析(9) - workerqueue之限速队列RateLimitingQueue
workerqueue的限速队列RateLimitingQueue搞明白三件事就可以了。
📄️ client-go 源码分析(10) - 使用client-go实现一个简单controller的例子
下面的example也是client-go官方的例子。通过这个简单的例子正好把之前的源码分析的一个个模块都串起来了。