k8s

k8s kubelet介绍

k8s学习记录

Posted by CHuiL on August 13, 2019

Kubelete

在k8s集群中,每个节点都会启动一个kubelet服务进程。该进程用于处理Master节点下发到本节点的任务,管理pod以及pod中的容器。每个kubelet进程会在初始时通过API Server注册节点信息,并定期向Master节点汇报节点资源的使用情况,API Server收到节点信息后会存储在etcd中。 有三种方式将pod清单提供给kubelet

  • 文件:通过命令行传入的文件路径。kubelet 将定期监听该路径下的文件以获得更新。监视周期默认为 20 秒,可通过参数进行配置。
  • HTTP 端点:HTTP 端点以命令行参数传入。每 20 秒检查一次该端点(该时间间隔也是可以通过命令行配置的)。
  • HTTP 服务:kubelet 还可以监听 HTTP 并响应简单的 API(当前未指定)以提交新的清单。

Pod管理

当我们在master节点上进行操作,新建了一个pod时(一般都是通过rc这类控制器来管理pod),然后通过调度来决定运行在哪个node上。而kubelet会一直监听etcd,所有针对pod的操作都会被kubelet监听到。如果发现有绑定到本节点的pod时,会将获取到的信息同步到本地缓存中,并按照pod清单的要求创建pod。

创建和修改Pod

  1. 为该pod创建一个数据目录
  2. 从Api Server 读取该pod清单
  3. 为该pod挂载外部卷
  4. 下载Pod用到的Secret
  5. 检查已经运行的pod,如果该pod没有容器或者Pause容器没有启动,则先停止pod里所有容器的进程。如果有要删除的容器则直接删除这些容器
  6. 创建pod时,会先创建一个pause容器,用来接管pod中所有其他容器的网络。使他们共享网络空间。
  7. 为pod中的每个容器做如下处理
    • 调用docker client下载容器所需镜像,然后运行容器
    • 如果容器终止,且有没指定重启策略,则不做任何处理

删除容器

直接通过调用Docker Client删除Pod中的容器

容器健康检查

Pod通过两类探针来检查容器的健康状态。一个是LivenessProbe探针,另一个是ReadinessProbe探针

LivenessProbe探针

用于判断容器是否健康,如果检测到不健康,则kubelet会删除该容器,并根据重启策略进行处理。如果不包含该探针,则永远返回success。kubelet会定期使用该探针来检测容器的健康状况。它包含三种实现方式

  • ExecAction:在容器内执行命令,返回0说明健康
  • TCPSocketAction:通过容器IP和端口执行TCP检查,如果端口能访问说明健康
  • HTTPGetAction:通过容器IP和端口及路径调用HTTP Get方法,如果返回码为200到400直接,则说明健康

ReadinessProbe探针

用于判断容器是否启动完成,且准备接受请求。如果检测到失败,则pod状态将被修改,Endpoint Controller将从Service的Endpoint中删除包含该容器所在pod的IP地址和Endpoint条目

容器监控

cAdvisor是一个开源的分析容器资源使用率和性能特性的代理工具,它被集成到kubernetes代码中,cAdvidor自动查找所有在其所在节点上的容器,自动采集cpu,内存,文件系统和网络使用的统计信息。cAdvisor通过他所在的节点机的4194端口提供一个简易的UI界面。

参考

《Kebernetes权威指南》