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,则认为容器健康。
posted on 2018-06-09 16:41 sichenzhao 阅读(456) 评论(0) 编辑 收藏 举报