Kube-controller-manager(GarbageController)
Kube-controller-manager(GarbageController) 基于1.25 GarbageController负责资源对象的级联删除(GC) K8s中,主要通过OwnerReference来记录资源的级联关系 OwnerReference结构定义: UID:资源对象父级资源的UID BlockOwnerDeletion:true表示父级资源在以Foregroud删除策略执行删除(在删除这个资源之前,不可删除父资源) GC Controller支持三种删除策略 Orphan(孤儿删除):仅删除当前资源对象,不级联删除当前资源对象的子级资源对象 Foreground(前台删除):先删除当前资源对象子对象,再删除这个对象 Backgroud(后台删除):先删除当前资源对象,再级联删除这个资源的子级对象 使用Orphan和Foreground,资源对象会被加上Finalizer,并且在删除中由GC Controller负责移除 Ref:https://github.com/kubernetes/apimachinery/blob/fdcfc272...
Kube-controller-manager(EndpointSlice)
Kube-controller-manager(EndpointSlice) 基于1.25 EndpointSlice Controller可以把巨大的Endpoints资源对象拆分成多个EndpointSlice,为了解决Endpoints资源对象 一个Service资源对象关联的所有POd地址存储在一个或者多个EndpoineSlice中 控制器初始化 Service EndpointSlice Pod 主要执行逻辑 c.serviceLister.Services 获取Service资源对象 c.podLister.Pods 获取Service的关联Pod c.endpintSliceLister.EndpointSlice 获取Service关联的EndpointSlice dropEndpointSlicesPendingDeletion 过滤删除中的EndpointSlice c.reconclier.reconclie 计算和更新各个EndppintSlice reconcile步骤如下: geAddressTypesForService 获取S...
Kube-controller-manager(Endpoint)
Kube-controller-manager(Endpoint) 基于1.25 Endpoint Controller主要控制Endpoint资源 Endpoints资源对象主要包含Subsets属性,用于存储同命名空间内同名称的Service资源对象关联的Pod的IP地址和端口号 Endpoints Controller为每一个Service资源对象创建一个与命名空间相同的Endpoints对象,并且在Service和Pod变化的时候,重新统计对应Service关联的Pod的IP地址和端口号,更新到Endpoints的Subsets属性中 这些地址和端口被各个节点的kube-proxy用于更新本机的iptables或ipvs 控制器初始化 Service Endpoints Pod 主要执行逻辑 e.serviceLister.Sevice 获取Service e.podLister.Pods 获取Service资源对象关联的POd For _,pod:=range pods 遍历Pod统计所有的IP地址和端口号 Endpoint Controller...
Kube-controller-manager(CronJob)
Kube-controller-manager(CronJob) 基于1.25 CronJob Controller 操作控制CronJob CronJob资源主要包含Job模版(Spec.JobTemplate)和计划表(Spec.Schedule) CronJob 控制器通过资源对象的计划配置,到达预定时间后,创建新的Job对象,并且清理过去成功或者失败的Job资源对象 Spec.Schedule字段定义和Linux终端crontab一致 控制器初始化 Job资源对象 CronJob资源对象 主要执行逻辑 jm.cronJobLister.CronJobs 获取CronJob对象 getJobsToBeReconciled 获取关联的Job对象 syncCronJob 计算Job的启动时间并启动新的Job 获取当前的CronJob对象关联的Job资源对象,更新Status.Active字段,从中去掉已经执行结束的Job,加入正在执行的Job,确保Status.Active都是正在执行的Job 判断CronJob资源对象的状态。如果是删除...
Kube-controller-manager(Job)
Kube-controller-manager(Job) 基于1.25 Job Controller是job的控制器 Job Controller会根据Job的并发(Spec.Parallelism)和完成(Spec.Completions)字段,此间一个或者多个Pod。在指定数量(Spec.Completions)的Pod执行成功之后,宣告Job成功,Job默认采用Orphan删除策略,删除Job不会主动删除其关联的Pod 控制器初始化 Job资源 Pod资源 主要执行逻辑 jm.jobLister.Jobs 获取Job资源对象 IsJobFinished 判断Job是否已经执行完成。 Job Controller检查Job.Status.Conditions状态,如果存在Complete或Failed类型的状态且值为true,则Job已经执行完成 Ref:https://github.com/kubernetes/kubernetes/blob/1504f10e7946f95a8b1da35e28e4c7453ff62775/pkg/controller/job/u...
Kube-controller-manager(StatefulSet)
Kube-controller-manager(StatefulSet) 基于1.25 StatefulSet Controller控制器主要控制StatefulSet资源 StatefulSet资源主要包含Pod模版、副本数量(Spec.Replicas)、更新策略、管理策略等部分 StatefulSet在每个关联的Pod的Name会添加一个序号后缀 创建、删除Pod按照固定的顺序操作 当Pod超出期望的副本数量,或以执行滚动更新策略更新,控制器顺序按顺序从高到低依次删除Pod;反之,如果Pod数量低于期望副本数量,控制器低序号到高序号删除Pod 控制器初始化 StatefulSet资源对象:监听Add、Uodtaed、Delete事件 Pod资源对象 主要执行逻辑 ssc.setLister.StatefulSets 获取完整的STS对象 ssc.getPodsForStatefulSet 获取关联的Pod syncStatefulSet 调谐StatefulSet。调用syncStatefulSet func实现STS调谐。内部主要调用...
Kube-controller-manager(DaemonSet)
Kube-controller-manager(DaemonSet) 基于1.25 DaemonSet Controller控制DaemonSet对象 DaemonSet资源对象选中的节点,最终仅仅有一个Pod处于可用 DaemonSet资源对象主要包含Pod模版、更新策略俩部分 控制器初始化 DaemonSet资源对象:监听Add、Update、Delete事件 Pod资源对象 Node资源对象 ControllerRevison资源对象:处理ControllerRevison资源对象同步,记录DS的Pod模版历史重现过的版本 主要执行逻辑 dsc.dsListener.DaemonSets 获取DS资源对象,DS Controller通过DS Informer的Lister获取完整的DS资源对象 dsc.nodeLister.List 获取集群的所有Node资源对象 ds.DeletionTimestamp !=nil 判断资源对象是否处于删除中。如果处于删除中行,不需要进行Reconcile dsc.expections.SatisfiedExpe...
Kube-controller-manager(Deployment)
Kube-controller-manager(Deployment) 基于1.25 Deployment控制器主要控制Deployment资源。 Deploymen控制器依旧更新策略调整RS资源 控制器初始化Deployment控制器初始化的时候,会创建工作队列存储Deployment资源对象的Key Deployment资源对象:监听Add、Update、Delete事件,把监听到的RS资源对象的Key加入到工作队列中,等待Worker协程消费处理 RS资源对象 Pod资源对象 主要执行逻辑 dc.Listener.Deployments 获取Deployment资源对象。通过Deployment Informer的Lister接口Get获取完整的Deployment资源对象 dc.getReconcileSetsForDeployment 获取管理的RS对象 d.DeletionTimestamp !=nil 判断是否执行Reconcile d.Spec.Paused 判断是否暂停版本更新。当处于Paused状态时,Deployment Cont...
Kube-controller-manager(ReplicaSet)
Kube-controller-manager(ReplicaSet) 基于1.25 ReplicaSet控制器是ReplicaSet资源对象的控制器,通过Informer资源监听ReplicaSet和Pod对象,监听到Add、Update、Delete时,ReplicaSet控制器会对ReplicaSet资源对象进行Reconcile ReplicaSet资源对象主要包含Pod模版(Spec.Template)和副本数(Spec.Replicas) 控制器初始化ReplicaSet控制器初始化的时候,会创建工作队列以存储ReplicaSet资源对象的Key。 ReplicaSet资源对象:监听Add、Update、Delete事件,把监听到的ReplicaSet资源对象的Key加入到工作队列,等待Worker协程消费 Pod资源对象:监听Add、Update、Delete事件,把监听到的Pod资源对象的Key加入到工作队列,等待Worker协程消费 Pod资源对象的OwnerReference记录了父级资源的引用 当触发了Pod的Add或Delete事件,通过OwnerRe...
Kube-controller-manager(启动流程)
Kube-controller-manager(启动流程) 基于1.25 kube-controller-manger的启动流程主要分: Cobra命令行参数解析 运行EventBroadcaster事件处理器 运行HTTPS服务 执行Leader选举 启动控制器主循环 Cobra命令行参数解析 Ref:https://github.com/kubernetes/kubernetes/blob/88e994f6bf8fc88114c5b733e09afea339bea66d/cmd/kube-controller-manager/app/controllermanager.go#L100 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465// NewControllerManagerCommand creates a *cobra.Command object with defaul...

