摘要: Controller作为核心中枢,集成了Reflector、DeltaFIFO、Indexer等组件,成为连接下游消费者的桥梁。Informer组件的启动,以及数据在几个组件之间的传递都由Controller完成。 Controller的定义如下。 type controller struct { 阅读全文
posted @ 2023-02-26 14:29 muzinan110 阅读(86) 评论(0) 推荐(0) 编辑
摘要: Kubernetes的事件(Event)是一种资源对象,用于展示集群内发生的情况,Kubernetes系统中的各个组件会将运行时发生的各种事件上报给Kubernetes API Server。例如,调度器做了什么决定,某些Pod为什么从节点中驱逐。可以通过kubectl get event kube 阅读全文
posted @ 2023-02-26 14:29 muzinan110 阅读(20) 评论(0) 推荐(0) 编辑
摘要: Indexer是一个用来存储资源对象的内存存储,处理用户的查询是非常快速高效的。源码路径为k8s.io/client-go/tools/cache/index.go。 Indexer的实现主要分为2部分,ThreadSafeMap是底层的并发安全存储,Indexer索引器用来注册索引函数。 1.Th 阅读全文
posted @ 2023-02-26 14:28 muzinan110 阅读(47) 评论(0) 推荐(0) 编辑
摘要: 工作队列(WorkQueue)在控制器编写中使用得非常频繁,通常使用informer.AddEventHandler函数监听资源对象的事件,并设置事件触发时的回调函数。在回调函数中,将资源对象的key放入WorkQueue,控制器会不断地从WorkQueue中获取数据并按照期望的状态处理。在处理的过 阅读全文
posted @ 2023-02-26 14:28 muzinan110 阅读(60) 评论(0) 推荐(0) 编辑
摘要: 在Reflector调用List/Watch方法后,数据会存入DeltaFIFO这个先进先出的队列。 从名称上看,DeltaFIFO需要分2部分来理解,FIFO(First Input First Output,先进先出)是指和正常的先进先出队列一样有基本的操作方法,例如Add、Delete、Upd 阅读全文
posted @ 2023-02-26 14:27 muzinan110 阅读(39) 评论(0) 推荐(0) 编辑
摘要: Informer启动后会连接API Server并进行全量资源查询,之后会对资源对象进行监听。以上操作主要是由Reflector实现的。源码路径为k8s.io/client-go/tools/cache/reflector.go。 Reflector使用的List/Watch方法主要分为2部分,第一 阅读全文
posted @ 2023-02-26 14:26 muzinan110 阅读(93) 评论(0) 推荐(0) 编辑
摘要: Kubernetes组件在工作过程中需要大量监控并查询集群中的资源对象。以Deployment控制器为例,它需要实时关注Deployment和要控制的ReplicaSet的状态变更,实时收敛ReplicaSet的状态,使ReplicaSet与用户自定义的Deployment的状态保持一致。其他控制器 阅读全文
posted @ 2023-02-26 14:24 muzinan110 阅读(197) 评论(0) 推荐(0) 编辑