client-go 的 util/workqueue 包里主要有三个队列,分别是普通队列,延时队列,限速队列,后一个队列以前一个队列的实现为基础,层层添加新功能,我们按照 Queue、DelayingQueue、RateLimitingQueue 的顺序层层拨开来看限速队列是如何实现的。 queue 接口和结构体: http://k8s.io/client-go/util/workqueue/queue.go type ...
workqueue的作用是接收Resource Event Handler过滤后的事件进入队列,然后被实际处理事件的worker读取处理。 workqueue实现了3种队列,分别是普通队列,延时队列,限速队列。每一个依赖前一个实现。 Queue 普通队列 源码位置 staging/src/k8s.io/client-go/util/workqueue/queue.go 数据结构 接口 type Interface interface {...
inferface:FIFO队列接口,先进先出队列,并支持去重机制 delayinginferface:延迟队列接口,基于interface接口封装,延迟一段时间再入队。 ratelimitingInterface:限速队列接口,基于delayinginferface封装,支持入队时进行速率限制。 FIFO队列 k8s.io/client-go/util/workqueue/queue.go type Interface interface { Add(item interf...
3、client-go发出请求时,限流的位置是"k8s.io/client-go/rest/request.go"的tryThrottle()。 四、Controller的workQueue限流 1、限流器实现了对于队列元素的重试规则,源码目录"k8s.io/client-go/util/workqueue",包括三个函数: - When 获取某个元素应该等待的时间, - Forget 释放某个元素不再监测, - NumReque...
源码位置:https://github.com/nicktming/client-go/tree/tming-v13.0/util/workqueue 分支:tming-v13.0 (基于v13.0版本) 本文将分析util包中的workqueue. 在各类controller中经常会使用该workqueue中的一些类. architecture.png 2. queue 2.1 Interface接口 ...
watch 目标类型通过 Go reflect 反射实现如下: // staging/src/k8s.io/client-go/tools/cache/reflector.go// watchHandler watches w and keeps *resourceVersion up to date.func(r *Reflector)watchHandler(start time.Time, w watch.Interface, resourceVersion *string, errcchanerror, stopCh <-chanstruct{...
// client-go源码路径util/workqueue/queue.go type Interface interface { //新增元素 可以是任意对象 Add(item interface{}) //获取当前队列的长度 Len() int // 阻塞获取头部元素(先入先出) 返回元素以及队列是否关闭 Get() (item interface{}, shutdown bool) ...
List-Watch 的代码实现主要在:k8s.io/client-go/tools/cache 中,这也是我们在这一节中着重要讲的。 从上一节的示例代码中,我们看到基本上都是靠 Informer 去实现功能的,在代码的流程中, Informer 是最高的一层,之后流程基本就是: Informer → Controller → Reflector → ListWatch (最后靠 Controller 里面的...
"k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/util/workqueue" ) // 自定义controller type Controller struct { indexer cache.Indexer queue workqueue.RateLimitingInterface informer cache.Controller } // 新建controller func NewController(queue workqueue.RateLimi...
util:提供常用方法,例如 WorkQueue 功能队列、Certificate 证书管理等 三 认证 这里值得一提的是go mod通过go client 对接k8s的时候有个小坑 那么就是我们需要在go mod文件中指定k8s版本 不然会默认拉去最新的k8s版本的包 我们也知道不同的k8s版本的api会出现差异 ...