K8s-kube-proxy(Overview)
K8s-kube-proxy(Overview) 基于1.25 什么是kube-proxykube-proxy是K8s控制面组件之一,需要在每个节点部署。 kube-proxy根据Service定义和Endpoints、EndpointSlice资源对象中存储的内容,在宿主机上配置iptables、ipvs等规则,实现Service的负载均衡和服务发现功能 kube-proxy主要支持俩种模式:iptables和ipvs ipatbles:通过配置iptables规则实现DNAT、SNAT、源IP地址检查等 ipvs:通过配置ipvs实现DNAT,而SNAT、源IP地址检查等继续配置iptables实现,并且使用IP Set降低查找IP地址和端口的时间复杂度 Service资源K8s中的Service中,有ClusterIP、NodePort、LoadBalancer和ExternalName ClusterIP:最基本的Service 类型,在不考虑双栈的情况下,通常包含一个IP地址和若干个Port,并且通过标签选择器关联后端Pod。集群内应用可以通过”Cluste...
Kube-controller-manager(NodeLifecycleController)
Kube-controller-manager(NodeLifecycleController) 基于1.25 K8s的Pod分配到某个Node中运行。当Node出现异常,集群需要把Node状态更新为异常,并且驱逐上面的Pod到其他Node上运行。 NodeLifecycle Controller负责监视Node状态,根据状态调整Node的Taint NodeLifecycle Controller有一个--enable-taint-manager启动参数,默认为启用状态,在1.27中移除 如果为true:则NodeLifecycle Controller在node异常的时候,通过在node上添加NoExecute Taint来驱逐Node上的Pod 如果是false:则NodeLifecycle Controller,在node异常的时候,会直接驱逐Pod,不会添加Taint 控制器初始化 Ref:https://github.com/kubernetes/kubernetes/blob/88e994f6bf8fc88114c5b733e09afea339bea66d...
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...