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