(本文基于Kubernetes v1.3)
Kubelet是Kubernetes中的重要组件之一。如果把APIServer、Controller Manager、Scheduler比做大脑的话,那么Kubelet毫无疑问就是双手。它是做具体工作的组件。
它运行于Slave节点中,监听10250端口,接收并执行远程发来的指令。负责具体的创建Pod与容器的任务,管理着它们的全生命周期。
同时Kubelet还负责定时向APIServer汇报节点以及节点中资源对象的情况。
Kubelet的启动过程可以简述如下:
1.首先进程会初始化一个KubeletServer结构体,然后将命令行参数导入到这个结构体中。这个KubeletServer结构体中有一些待设定的属性,包含基本配置、管理Pod和容器相关的参数、同步和自动运维的参数等。
2.调用KubeletServer的Run方法进入启动流程。
3.HostNetWorkSources属性用来控制哪些Pod允许绑定宿主机的网络空间,默认都是禁止绑定的。
4.创建一个Mounter对象,用来实现容器的文件系统挂载功能。
5.加载数字证书。
6.指定DockerExecHandlerName参数的值,确定dockerExecHandler是采用Docker的exec命令还是nsenter来实现。默认采用exec命令。
7.创建Client对象来访问APIServer。当有Pod关联到了该Kubelet所在的Node时,Kubelet会进行创建工作。
8.初始化CloudProvider
9.构造cAdvisor来监控本地的Docker容器。
10.设置进程自身的oom_adj值,使Linux在OOM时不会轻易的kill掉Kubelet这个守护进程。因为对于Node节点来说,它需要运行众多的容器,所以可能会发生OOM的情况。
11.eventBroadcaster := record.NewBroadcaster()
表明Kubelet会把自己的事件通知给API Server。汇报该节点的一些情况。
12.开启垃圾回收协程清理无用的容器与镜像。
13.启动一个协程,让Kubelet处理来自PodSource的Pod Update消息,然后启动Kubelet Server。