k8s-kubelet运行机制分析

在每个Node节点(又称minion)上都会启动一个kubelet服务进程,该进程用于处理Master节点下发到本节点的任务。管理Pod和Pod中的容器。每个kubelet进程会在API server注册节点自身信息,定期汇报节点资源使用情况。

节点管理

节点通过设置kubelet的启动参数--Register-node,来决定是否向API server注册自己。若该参数的值为true,则kubelet会试着通过API server注册自己。在自注册时,kubelet启动时还包括以下参数。

--api-servers:告诉kubelet API server位置

--kubeconfig 告诉kubelet在哪儿可以找到用于访问API Server的证书

--cloud-provider 告诉kubelet如何从云服务商那读取到和自己有关的元数据


Pod管理

kubelet通过以下几种方式获取自身Node上所要运行的Pod清单

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

2.HTTP端点:通过--mainfest-url参数设置。通过--http-check-frequency设置检查该文件目录的时间间隔,默认为20s。

3.API server: kubelet通过API server监听etcd目录,同步pod列表。

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

为该pod创建一个数据目录

从API  server读取该Pod清单

为该Pod挂载外部卷

下载Pod用到的secret

检查已经运行在节点的Pod,如果该Pod没有容器或pause容器没有启动,则先停止Pod里所有容器的进程。如果在Pod中有需要删除的容器,则删除。

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


容器健康检查

Pod通过两类探针来检查容器的健康状态,一个是LivenessProbe探针,用于判断容器是否健康,告诉kubelet一个容器什么时候处于不健康状态。如果LivenessProbe探测探测到容器不健康,则kubelet删除该容器。如果一个容器不包含LivenessProbe指针,则kubelet认为该容器的LivenessProbe探针返回值永远是success。另一类是ReadnessProbe探针,用于判断容器是否启动完成。且准备接收请求。如果检测失败,则Pod状态将被修改。

LivenessProbe的实现方式有三种:

1.execaction:在容器内部执行一个命令,如果该命令的退出状态码为0,则表明容器健康。

2.TCPsocketaction:通过容器的IP地址和端口号执行TCP检查,如果端口能被访问,则表明容器健康。

3.HTTPGetaction:通过容器的IP地址和端口号及路径调用HTTP Get方法,如果响应的状态码大于等于200且小于等于400,则认为容器健康。

猜你喜欢

转载自blog.csdn.net/hahachenchen789/article/details/80633453