kubelet学习

一、简述

kubelet是运行在每个node节点上主要的代理,每个节点都会启动kubelet服务,用来处理master下发到本节点的任务,按照podSpec的描述来管理pod。kubelet主要通过apiserver获取一组podSpec,并尽可能保证pod按podSpec描述的状态运行。

 

二、主要功能

  1. kubelet主要监听四个端口,分别是10250,10255,10248,4194

    10250:通过该接口可以访问获取node资源以及状态。

    10248:通过该接口可以判断kubelet是否正常工作

    比如:curl http://127.0.0.1:10248/healthz

    4194:kubelet通过该端口可以获取到该节点的环境信息以及node节点上运行的容器状态等内容

    curl http://127.0.0.1:4194/metrics

    10255:提供了pod和node的信息,接口以只读形式暴露出去,访问该端口不需要认证和鉴权

    curl http://127.0.0.1:10255/pods

    curl http://127.0.0.1:10255/spec/

  2. pod管理:kubelet定期从所监听的数据源获取节点上pod 的期望状态,并调用对应的容器接口达到这个状态。

  3. 容器健康检查:kubelet创建了容器之后还要查看容器是否正常运行,如果容器异常,就要根据设置的策略进行处理

  4. 容器监控:kubelet会通过cadvisor获取数据,并监控所在节点的资源使用情况,定时向master报告,这样master才能更合理的调度pod。

     

大概梳理一下kubelet组件中的模块:

 

  1. pleg是kubelet的核心模块,pleg会一直调用container runtime获取本节点containers/sandboxes的信息,并与自身维护的pod cache信息进行对比,生成对应的PodLifeCycleEvent,然后输出到eventChannel中,通过eventChannel发送到kubeletSyncLoop进行消费,然后由kubelet syncPod 来触发pod同步处理过程,最终达到用户的期望状态。

     

  2. cAdvisor是google开发的容器监控工具,集成在kubelet中,起到收集本节点和容器的监控信息,大部分公司对容器的监控数据都是从cAdvisor中获取的,cAdvisor模块对外提供了interface接口,该接口也被imageManager接口,OOMWatcher,containerManager等所使用。

     

  3. OOMwatcher系统OOM的监听器,会与cadvisor模块之间建立systemOOM,通过watch方式,从cadvisor那里收到的OOM信号,并产生相关事件。

     

  4. probeManager 依赖于statusManager,livenessManager,containerRefManager,会定时去监控pod中的容器健康状态,当前支持两种类型探针:livenessProbe和readlinessProbe. livenessProbe用于判断容器是否存活,如果探测失败,就会kill掉容器,然后根据容器的重启策略做相应的处理。readlinessProbe用于判断容器是否启动完成,将探测成功的容器加入到该pod所在service的endpoint中,反之则移除。 探针有三种实现方式:http,tcp和cmd。

     

  5. statusManager负责维护状态信息,并把pod状态更新到apiserver,但是它并不负责监控pod状态的变化,而是提供对应的接口,供其他组件使用,比如probemanager。

  6. containerRefManager容器引用的管理,相对简单的Manager,用来报告容器的创建,失败等事件,通过定义map来实现了containerID与v1.ObjectReferece容器引用的映射。

     

  7. evictionManager当节点的内存,磁盘或inode等资源不足时,达到了配置的evict策略,node会变为pressure,此时kubelet会按照qosclass顺序来驱赶pod,以此来保证节点的稳定性。可以通过kubelet启动参数 --eviction-hard=来决定evict的策略值。

     

  8. imageGc 负责node节点的镜像回收,当本地的存放镜像的本地磁盘空间达到某阈值的时候,会触发镜像的回收,删除掉不被pod所使用的镜像,回收镜像的阈值可以通过kubelet的启动参数--image-gc-high-threshold和--image-gc-low-threshold来设置。

     

  9. containerGc负责清理node节点上已消亡的container,具体的GC操作由runtime来实现。

     

  10. imageManager调用kubecontainer提供的pullimage、getimageRef、listimage,removeimage,imagestatus方法来保证pod运行所需要的镜像。

     

  11. volumeManager负责node节点上pod所使用volume的管理,volume与pod的生命周期关联,负责pod创建,删除过程中volume的mount、umount、attach、detach,k8s采用volume plugins的方式,实现存储卷的挂载等操作,内置几十种存储插件。

     

  12. containerManager负责node节点上运行的容器的cgroup配置信息,kubelet启动参数如果指定--cgroup-per-qos的时候,kubelet会启动groutine周期性的更新pod的cgroup信息,维护其正确性,该参数默认为true,实现了pod的guaranteed,besteffort,burstable三种级别的qos。

     

  13. runtimeManager containerRuntime负责kubelet与不同的runtime进行对接,实现对于底层container的操作,初始化之后得到的runtime实例将会被之前描述的组件使用,可以通过kubelet的启动参数--container-runtime来定义使用的是docker还是rkt,默认是docker。

     

  14. podManager提供了接口来存储和访问pod的信息,维持static pod和mirror pods的关系,podManager会被statusManager/volumeManager/runtimeManager所调用,podManager的接口处理流程里面会调用secretManager以及configMapManager。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值