Kubernetes核心组件篇 (五) : 核心组件Kubelet
一、kubelet简介
在kubernetes集群中,每个Node节点都会启动kubelet进程,用来处理Master节点下发到本节点的任务,管理Pod和其中的容器。kubelet会在API Server上注册节点信息,定期向Master汇报节点资源使用情况,并通过cAdvisor监控容器和节点资源。可以把kubelet理解成【Server-Agent】架构中的agent,是Node上的pod管家。
kubelet
1、每个节点都运行一个kubelet进程,默认端口10250
2、接收并执行master发来的指令,管理pod和其中的容器
3、每个kubelet都会向apiserver注册自身信息
4、定期向master节点汇报当前节点的情况
5、通过cAdvisor监控节点和容器的资源
更多kubelet配置参数信息可参考kubelet --help
工作原理
二、节点管理
节点通过设置kubelet的启动参数“–register-node”,来决定是否向API Server注册自己,默认为true。可以通过kubelet --help或者查看kubernetes源码【cmd/kubelet/app/server.go中】来查看该参数。
kubelet的配置文件
默认配置文件在/etc/kubernetes/kubelet中,其中
- –api-servers:用来配置Master节点的IP和端口。
- –kubeconfig:用来配置kubeconfig的路径,kubeconfig文件常用来指定证书。
- –hostname-override:用来配置该节点在集群中显示的主机名。
- –node-status-update-frequency:配置kubelet向Master心跳上报的频率,默认为10s。
三、Pod管理
kubelet有几种方式获取自身Node上所需要运行的Pod清单。但本文只讨论通过API Server监听etcd目录,同步Pod列表的方式。
kubelet通过API Server Client使用WatchAndList的方式监听etcd中/registry/nodes/${当前节点名称}和/registry/pods的目录,将获取的信息同步到本地缓存中。
kubelet监听etcd,执行对Pod的操作,对容器的操作则是通过Docker Client执行,例如启动删除容器等。
kubelet创建和修改Pod流程:
- 为该Pod创建一个数据目录。
- 从API Server读取该Pod清单。
- 为该Pod挂载外部卷(External Volume)
- 下载Pod用到的Secret。
- 检查运行的Pod,执行Pod中未完成的任务。
- 先创建一个Pause容器,该容器接管Pod的网络,再创建其他容器。
- Pod中容器的处理流程:
1)比较容器hash值并做相应处理。
2)如果容器被终止了且没有指定重启策略,则不做任何处理。
3)调用Docker Client下载容器镜像,调用Docker Client运行容器。
四、容器健康检查
Pod通过探针的方式来检查容器的健康状态,具体可参考Pod详解#Pod健康检查。
1、LivenessProbe探针
- 用于判断容器是否健康,如果探测不健康则通过kubelet删除该容器
- 如果一个容器不包含探针kubelet会认为值为success
扩展:LivenessProbe探针实现的三种方式
- 第一、ExecAction:在容器内部执行一条命令,如果退出状态码为0,则表明容器健康
- 第二、TCPSocketAction:通过容器的IP地址和端口号执行TCP检查,如果端口能够被访问则表明容器健康
- 第三、HTTPGetAction:通过容器的IP地址和端口及路径调用HTTP GET方法,如果状态码大于等于200且小于400,则认为容器健康
2、ResdinessProbe
- 用于判断容器是否启动完成且准备接收请求,如果探测到失败,则pod的状态被修改
3、kubelet定期调用容器中的livenessprobe探针来诊断容器的健康状态
五、cAdvisor资源监控
- 一个开源的分析容器资源使用率和性能特性的代理工具
- 自动查找所有在其所在的节点上的容器,自动采集CPU、内存、文件系统和网络使用的统计信息
- cAdvisor通过其所在的节点机的4194端口暴露一个UI
kubelet通过cAdvisor获取本节点信息及容器的数据。cAdvisor为谷歌开源的容器资源分析工具,默认集成到kubernetes中。
cAdvisor自动采集CPU,内存,文件系统,网络使用情况,容器中运行的进程,默认端口为4194。可以通过Node IP+Port访问。
更多参考:http://github.com/google/cadvisor
参考《Kubernetes权威指南》
六、CR(Container Runtime)容器运行时
- 容器运行时是Kubernetes最重要的组件之一
- 负责真正管理镜像和容器的生命周期
- kubelet通过CRI与容器运行时交互,以管理镜像和容器