kubernetes集群中,每个Node节点工作节点上都会启动一个kubelet服务进程。用于处理master节点下发到本节点的任务,管理pod和pod中的容器。每个kubelet进程都会在API Server上注册节点自身信息,定期汇报节点资源使用情况,通过cAdvisor监控容器和节点资源。

1.1 节点管理

节点通过设置kubelet启动参数“--register-node”来决定是否向API Server注册自己。

kubelet默认10秒报告一次节点状态。

1.2 pod管理

kubelet通过以下几种方式获取自身NOde所有运行的pod清单。

(1)文件

kubelet启动参数--config指定配置文件目录下的文件(默认是/etc/kubernetes/manifests/)通过--file-check-frequency设置检查该文件目录的时间间隔。默认为20s

(2)HTTP端点(URL)

通过--manifest-url参数设置。通过--http-check-frequency设置检查该HTTP端点数据的时间间隔。默认为20s

(3)API Server

通过API Server监听etcd目录,同步pod列表

如果kubelet读取监听到的信息是创建和修改pod任务做如下处理

1、为该pod创建一个数据目录

2、从API Server读取该pod清单

3、为该pod挂在外部卷

4、下载pod用到的Secret

5、检查已经运行在节点中的pod,如果pod没有容器或pause容器没有启动,则会停止pod里所有容器的进程。如果在pod中有需要删除的容器,删除这些容器

6、用kubernetes/pause镜像为每个pod创建一个容器。该pause容器用于接管pod中所有其他容器的网络。每创建一个新pod,先创建一个pause容器,然后创建其他容器。

7、为pod中每个容器做如下处理

计算hash值,用容器名字查询对应docker容器hash之,如果找到容器,hash值不同,则停止docker中容器进程,并停止与之关联的pause容器的进程。若相同,不做处理。

如果容器被终止了,没有指定restartPolicy,不做任何处理

调用docker client下载容器经,调用docker client运行容器。

1、3 容器健康检查

通过两类探针来检查容器健康状态。

一个是LivenessProbe探针,用于判断容器是否健康。如果不健康kubelet删除该容器,并根据重启策略做相应处理。如果没有设置livenessProbe,认为返回的值用为是Success

一个是ReadnessProbe探针,用于判断容器是否启动完成,且准备接受请求。如果检查失败,pod状态将被修改。

LivenessProbe包含三种实现方式

1、ExecAction:在容器内部执行一个命令,如果该命令退出状态码为0,表示健康

2、TCPSocketAction:通过容器的IP地址和端口号指定TCP检查,如果端口能被访问,表示健康。

3、HTTPGetAction: 通过容器的IP地址和端口号以及路径调用HTTP Get方法,如果响应码大于等于200且小于等于400,表示健康。

1.4 cAdvisor资源监控