Kubelet启动的时候做了什么

(本文基于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。

这里写图片描述

猜你喜欢

转载自blog.csdn.net/hty46565/article/details/78920239