本文是对Kubernetes 1.5的Scheduler源码层面的剖析,包括对应的源码目录结构分析、kube-scheduler运行机制分析、整体代码流程图、核心代码走读分析等内容。...Kubernetes源码目录结构分析 Kubernetes Scheduler是作为kubernetes的一个plugin来设计的,这种可插拔的设计极大方便用户自定义调度算法,在不同的公司,通常大家对调度的需求是不同的...Scheduler的源码主要在k8s.io/kubernetes/plugin/目录下,其中两个目录cmd/scheduler和pkg/scheduler分别定义了kube-scheduler command...具体的目录结构分析如下所示。...Kubernetes Scheduler核心代码走读分析 Scheduler的main入口如下,负责创建SchedulerServer和启动。
虽然在Kubernetes v1.2中,Kubernetes推出了Deployments特性,Deployment通过创建ReplicaSet来管理Pod,ReplicaSet被视为下一代ReplicationController...对Deployments的分析我会在后面单独搞一篇博文。在本文,我们只看ReplicationController。...本文基于kubernetes v1.5的代码进行分析。...ReplicationController在何处启动的 看过我我的博文: Kubernetes ResourceQuota Controller内部实现原理及源码分析的可能有印象,里面也提到了controller...至此,我认为关键的代码都已经分析完了,calculateStatus, updateReplicationControllerStatus方法比较简单,有兴趣的自己去瞄瞄。
Kubernetes Eviction Manager介绍及工作原理 这部分内容,请看我的前一篇博文:Kubernetes Eviction Manager工作机制分析 Kubernetes Eviction...Manager源码分析 Kubernetes Eviction Manager在何处启动 Kubelet在实例化一个kubelet对象的时候,调用eviction.NewManager新建了一个evictionManager...Kubernetes Eviction Manager的定义 从上面的分析可见,kubelet在启动过程中进行runtime依赖模块的初始化过程中,将evictionManager启动了。...killPodNow的代码,后面再分析。 基本上,这一小节我们把evictionManager是什么以及怎么来的问题搞清楚了。下面我们来看看evictionManager的启动过程。...Kubernetes Eviction Manager的启动 上面分析过,kubelet在启动过程中进行runtime依赖模块的初始化过程中,将evictionManager启动了(kl.evictionManager.Start
总结 PodGC Controller作为Kubernetes默认启动的Controllers之一,在Master后台每隔20s进行一次Pod GC。
Author: xidianwangtao@gmail.com 实现流程图 废话不多说,先把完整流程贴出来。 New JobController type ...
摘要:最近我们在写自己的Kubernetes服务路由组件对接公司自研的负载均衡器,这其中涉及到非常核心的Endpoints相关的逻辑,因此对Endpoints Controller的深入分析是非常有必要的...我们不能把虚构的Service加入到队列触发这些“理应孤立”的endpoints被清理,因此我们给这些“理应孤立”的endpoints加上Annotation "control-plane.alpha.kubernetes.io...注意,Annotations "service.alpha.kubernetes.io/tolerate-unready-endpoints"在Kubernetes 1.13中将被弃用,后续只使用.Spec.PublishNotReadyAddresses...state unrecorded", pod.Namespace, pod.Name) e.addPod(pod) } 核心Struct 里面有几个struct,挺容易混淆的,简单用图表示下,方便比对: [Kubernetes...Endpoints Controller源码分析.png] 总结 通过对Endpoints Controller的源码分析,我们了解了其中很多细节,比如对Service和Pod事件处理逻辑、对孤立Pod
QoS 我们知道 pod 是 kubernetes 提出的概念,因此 container runtime 中是不会对 pod 进行任何 cgroups 设置的。...的 design doc (https://github.com/kubernetes/community/blob/master/contributors/design-proposals/node...了解这部分内容可以先去看看详细的 design doc,目前 kubernetes 的 design doc 有一部分在 community (https://github.com/kubernetes.../community)里(较早期的一些设计,包括一些设计原则),还有一些在 enchancement (https://github.com/kubernetes/enhancements) 里。...敬请期待 Kubernetes 源码分析之 kubelet(七)
背景 为什么要反复读源码,是因为大部分时候学习一手的知识效果远比二手要好,学习 n 手的知识效果远比 (n+1) 手的要好。...Version k8s版本 v1.13 (因为目前长期使用和接触的是这个版本) Overview 'kubelet' 是什么就不说了,它的主要代码集中在 'kubernetes' 项目下的 /pkg...日志文件夹 运行管理镜像 GC 的模块 kl.imageManager 运行证书管理模块 kl.serverCertificateManager 运行 OOM 监控模块 kl.oomWatcher 运行资源分析模块...敬请期待 Kubernetes 源码分析之 kubelet(二) ?
(*extensions.Ingress) // 同Add一样,只处理Annotation ”kubernetes.io/ingress.class”满足条件的Ingress。...只处理Annotation ”kubernetes.io/ingress.class”满足条件的Ingress,条件必须满足其中之一:1....同Add一样,只处理Annotation ”kubernetes.io/ingress.class”满足条件的Ingress。 将满足条件的Ingress Object加入到syncQueue。...关于ic.syncIngress的代码分析在前面小节中已经分析过了。...对于st.sync的源码分析在前面小节中已经分析过了。
本文是一个系列文章,以学习为目的,对 kubernetes 源码进行分析,意在可以更好的去理解 kuberbetes 基本原理。...文章使用主分支(https://github.com/kubernetes/kubernetes),主要介绍 kubernates 中相关组件。...众所周知 kubernetes 是基于 API 的 infrastructure,在此之上的 kubernetes 之中的概念都被抽象成各种 resource,不同的 resource 拥有不同的功能,...在 kubernetes 的世界里对各种 resoure 的操作都是基于 API 来完成的,kubernetes 提供了一系列的 RESTfull API 来完成对 resource 的基本操作。...目前先我们写到这里,在下一篇文章中我们继续从源码的角度来梳理 resource 中的 type meta,object meta 等关键信息的定义。
2 分析 看看 features 包里的代码。这里面都是 Spark 在 K8S 中构建各种资源的步骤。.../path/to/spark/resource-managers/kubernetes/core/src/main/scala/org/apache/spark/deploy/k8s/features...的源码分析系列 - submit 文章里提到的,在 KubernetesDriverBuilder 中,有一个 features 这个变量,这里需要 new 很多配置,也就是具体的用来配置 Pod 的一些步骤...HadoopConfDriverFeatureStep(conf), new KerberosConfDriverFeatureStep(conf), new PodTemplateConfigMapStep(conf)) 下面我们按照顺序来分析一下...confDir // Hadoop 相关的环境变量 HADOOP_CONF_DIR existingConfMap // spark.kubernetes.hadoop.configMapName 提交任务的
本文是对Kubernetes V1.3发布的新Garbage Collector模块的源码解读。实际上本文的是基于kubernetes v1.4的代码进行分析的,和V1.3没有大的改动。...阅读本文前,请先阅读Kubernetes GC in v1.3。如果可以,先把kubernetes gc pr多看几遍,或许你根本不需要看我的这两篇博客。...再对比kubernetes gc pr对Propagator的功能描述。我就不多说废话了!...阅读如下代码的同时,对比kubernetes gc pr对OrphanFinalizer的功能描述。...startCSRController return controllers } 对于garbage collector的启动,则是调用startGarbageCollectorController方法,最终启动一个go协程执行前面分析过的
2 分析 /path/to/spark/resource-managers/kubernetes/core/src/main/scala/org/apache/spark/scheduler └── cluster...// 这样 Executor 即时 Failed 了,他的 Pod 也不会被自动删除 private val shouldDeleteExecutors = conf.get(KUBERNETES_DELETE_EXECUTORS...SPARK_EXECUTOR_ID_LABEL, executorIds: _*) .delete() // Don't do anything else - let event handling from the Kubernetes...run(): Unit = Utils.tryLogNonFatalError { logDebug(s"Resynchronizing full executor pod state from Kubernetes...that were either found to be deleted or non-existent in the cluster.") } } 3 Summary Scheduler 的粗浅分析就到这里
1 Overview Kubernetes 是作为新的 resouceManager 集成到 Spark 中的,集成的思路跟将 YARN 集成是类似的,Spark 本身提供 Standalone 这种资源管理的模式...而集成 Kubernetes 的方式,其实是很好理解的,也就是在 Spark 中起一个 Http 的客户端从而和 Kubernetes 的 ApiSever 进行通信,从而把与 Appication 相关的一些配置...2 源码分析 Spark Kubernetes 的模块的代码其实并不多,建议大家到以下目录下利用 tree 简单看一下。...spark-submit --kill dbyin:spark-hdfs-* --master k8s://https://kubernetes.default.svc --conf spark.kubernetes.namespace...作为 ResourceManager 的时候,Spark submit 的流程的过程中,是如何创建 Driver 和 Executor,还有各种 Secret 和 ConfigMap 这些资源的过程就分析到这里
Author: xidianwangtao@gmail.com NewNoExecuteTaintManager 在Kubernetes Node Controller源码分析之创建篇中提到: PodInformer...tm.taintEvictionQueue = CreateWorkerQueue(deletePodHandler(c, tm.emitPodDeletionEvent)) return tm } 相关的代码分析见里面的代码注释...) if err == nil { break } time.Sleep(10 * time.Millisecond) } return err } } Run 在Kubernetes...Node Controller源码分析之执行篇中提到,在Node Controller Run的时候,如果runTaintManager为true,则会调用nc.taintManager.Run启动Taint
Author: xidianwangtao@gmail.com Kubernetes Node Controller源码分析之执行篇 更多关于kubernetes的深入文章,请看我csdn或者oschina...NodeController的定义 在分析NodeController的原理之前,我们有必要先看看NodeController是如何定义的,其完整的定义如下: type NodeController struct...具体的TaintController的处理逻辑,后续再单独分析。 forcefullyDeletePod - 该方法用来NodeController调用apiserver接口强制删除该Pod。...关于Node Controller的其他博文: Kubernetes Node Controller源码分析之执行篇 Kubernetes Node Controller源码分析之创建篇 Kubernetes...Node Controller源码分析之配置篇
/notReady和node.alpha.kubernetes.io/unreachable。...至此,Node Controller Run方法的所有主要逻辑都已分析完成。...其中涉及到Taint Manager Run的相关逻辑,在该博文没有深入进去分析,我将在后续博文中对Taint Manager做一次专门的分析。...关于Node Controller的其他博文: Kubernetes Node Controller源码分析之执行篇 Kubernetes Node Controller源码分析之创建篇 Kubernetes...Node Controller源码分析之配置篇
kubernetes版本:1.13.2 接两节: kubernetes垃圾回收器GarbageCollector Controller源码分析(一) kubernetes垃圾回收器GarbageCollector...Controller源码分析(二) 主要步骤 GarbageCollector Controller源码主要分为以下几部分: monitors作为生产者将变化的资源放入 graphChanges队列;...上一节分析了第2,3部分,本节分析第4、5部分。 终结器 在阅读以下代码时,有必要先了解一下终结器。...在apiserver和kube-controller-manager正常运行时不出现该故障,可以从garbage collector源码中看到以下代码逻辑: ? ?...在使用垃圾回收机制时,应该尽量参考kubernetes官方网站中的说明.
kubernetes版本:1.13.2 背景 由于operator创建的redis集群,在kubernetes apiserver重启后,redis集群被异常删除(包括redis exporter statefulset...代码位于src\k8s.io\kubernetes\pkg\controller\apis\config\v1alpha1\zz_generated.defaults.go ?...消费; 2、构建大多数内置资源的SharedInformerFactory,构建失败的用cache.NewInformer构建(通过CRD定义的对象以及部分k8s内置对象) 代码继续回到k8s.io\kubernetes...启动20个runAttemptToDeleteWorker和20个runAttemptToOrphanWorker 参考: k8s官方文档garbage-collection英文版:https://kubernetes.io
(*extensions.Ingress) // 同Add一样,只处理Annotation ”kubernetes.io/ingress.class”满足条件的Ingress。...只处理Annotation ”kubernetes.io/ingress.class”满足条件的Ingress,条件必须满足其中之一:1....同Add一样,只处理Annotation ”kubernetes.io/ingress.class”满足条件的Ingress。 将满足条件的Ingress Object加入到syncQueue。...每次插入一个Object到ic.syncQueue,都会触发调用一次syncIngress,从上面的代码分析,可得出以下情况会往ic.syncQueue插入Object: Ingress Add/Delete...更新ic.runningConfig 从前面的代码分析,可得出以下情况会调用ic.syncSecret将secret内容更新到对应的"/ingress-controller/ssl/<namespace
领取专属 10元无门槛券
手把手带您无忧上云