Kubernetes kubelet 硬核知识 架构

news/2024/11/23 23:42:45/

controller-manager包含了一组控制器,它是整个集群的大脑,每个控制器会关注自己所关注的对象这些控制器里面都会有一个固定的模式,每个控制器都会通过list watcher,去watch它所关注的对象,当这些对象发生变化以后,以事件通知的形式,告知controller,controller会注册这些事件的回调函数,并且将这些事件放在一个队列里面,同时会去启动一堆worker线程,来从队列里面取出这些对象,并且进行相关的处理。

也就是说,当读了任何一个controller manager的代码,可以将同样的思路套到其他的controller里面。在每个节点上面都会去运行一个组件叫做kubelet。

Kubelet架构


它是承担的很多很多职责的这样一个组件。

最上层,它会提供一个api层,这个api里面就会有蛮多的职责,比如做自己的探活,还有业务指标如何上报,这些都是通过api,你可以看到它工作在不同的端口上面都有监听器,承担不同的职责。

中间就是在kubelet里面运行了一个一个的manager,你可以理解为一个一个独立职责的小的管理器。

probemanager:就是为这个节点上面的pod做探活的这样一个管理器,liveless readyless probe,这些探活由kubelet发起,kubelet的probemanager会去读取当前节点上面所有probe的定义,然后它会去看这些probe有没有定义探活,如果定义了探活的属性,那么probemanager就会按照你定义的interval去做监听。

oomwatcher:kubelet是整个节点的守护神,它是一个代理,它负责所有应用的生命周期,同时它有包含节点当前继续正常工作的职责,所以它由oomwatcher来监听,比如节点出现oom问题,比如某些进程出现了oom的错误,oomwathcer就会通过oom这个事件来获取这些异常,并且上报给kubelet。

GPU manager:就是用来管理GPU等等这些扩展的device,当节点上有GPU卡的时候,GPUmanager就是用来管理这张GPU卡的。

cadvisor:是独立开源的软件,kubelet里面会内嵌cadvisor,它其实基于cgroup技术去获取节点上运行应用的资源状态,整个集群的监控都是由cadvisor收集上来的,并且通过kubelet上报的。

diskspacemanager:这个节点的磁盘空间大小,包括每个应用,你上去了临时空间,你是不是超了,由diskspacemanager来管理。

statusmanager:用来管理节点的状态的。

evictionmanager:kubelet是这个节点的守护神,它会去监听当前节点上所有pod所消耗的资源,比如说内存,内存是不可压缩资源,可压缩资源cpu,cpu是基于分时复用的,当你多个进程去抢cpu的时候,反正我们按照协商好的比例去分cpu时间片,当出现竞争的时候,顶多受损,不会异常退出。但是内存不一样,内存是不可压缩资源,针对内存,kubelet就会做比较激进的动作,eviction,evictionmanager就是承担这个职责的组件。它会去监听当前节点的资源使用情况,如果它发现内存已经达到了一个水位,比如10g内存使用了9g,如果不制止这种情况,那么可能整个节点都会受到影响。evictionmanager就会去监听这个水位当这个内存达到一定水位的时候,它就会去做驱逐,它会去按照既定策略将低优先级的业务,而且占用内存又比较大的,超出了自己预设值的这些进程驱逐掉,也就是将pod从这个节点删除掉。通过这种极端的方式来保护整个节点。

volumemanager:pod启动要挂载磁盘,要挂载存储卷的,这个是由volumemanager去做的。

imagegc:如果我这个节点不断的启动应用,每个应用都需要拉取自己的image,如果我不做一些清理工作,就会导致这个节点的image会越来越多,把磁盘占满,所谓的imagegc就会去扫描一些不怎么活跃的镜像,把这些镜像清除掉。

containegc就是你的进程可能会退出,它会有一个exit的container,这个container其实它的文件层是没有清理掉的,所谓的container gc就是会清除这些退出的容器。

imagemanager:就是做镜像管理的。

certificatesmanager:kubelet有签证书的能力,当我们需要kubelet去管理证书的时候,certificatesmanager就可以起作用。

中间还有一个syncloop,所谓的syncloop又是控制器模式了,它要去watch一堆对象,也就是当前节点的pod对象,syncloop做完之后,下面内嵌了一堆的worker,pod worker就是当我的syncgroup接收到pod的变更通知的时候,那么这个podworker就会去干活,也就是去维护pod的生命周期。

kubelet要去监听apiserver去获取当前节点的pod清单,获取pod清单之后,然后获取的pod清单,每个pod都是一个一个的通知事件,然后podworker就会处理这些事件。

它会去调用cri,然后获取当前节点pod对应的容器是不是在启动的状态。如果没有启动,那么他就会去启动这些容器进程,把这个应用拉起来,它就是通过cri的接口。

cri接口传统都是通过dockershim去做的,但是随着kubernetes架构不断升级,它废弃了docker-shim这条线,它决定不再支持比较臃肿的dokcer shim,而是通过remote container interface,比如通过containerd,或者cri来支持整个运行时。


http://www.ppmy.cn/news/533005.html

相关文章

Kubernetes CoreDNS 详解

CoreDNS kube-proxy是运行在每个节点上面的,每个节点上面的kube-proxy其实都是按照同样的规则配置了负载均衡的,比如iptables和ipvs规则,也即是集群上面所有节点它的负载均衡是完全一致的,那么同样集群里面的A服务访问B服务这样的…

Docker 为什么出现 解决哪些问题 VS 虚拟机

传统分层架构 vs 微服务 对于微服务来说,有些服务可能依赖于数据,如果你需要依赖于数据存储,依赖于数据库,它推从的就是每个微服务维护自己的数据库,微服务和微服务之间只是通过网络调用去完成通信。 先从应用架构来看…

秋招·记录

10月23日 多益网络 笔试 G 10月24日 理想汽车 笔试 10月26日 公诚管理咨询 一面 调岗>招标/投标代理 拒 10月26日 广联达 笔试 G 10月27日 创必承 笔试 10月27日 广州乐牛游戏 笔试 10月28日 惠州西文思 一面 10月28日 惠州佰维 一面 10月30日 华勤 笔试 10月30…

TCP 连接建立 故障排查

TCP连接的状态详解以及故障排查 我们通过了解TCP各个状态,可以排除和定位网络或系统故障时大有帮助。 1、TCP状态 了解TCP之前,先了解几个命令: linux查看tcp的状态命令: 1) netstat -nat 查看TCP各个状态的数量 2)lsof -i:…

Pormetheus k8s服务发现配置详解

创建sa账号,在k8s集群的master节点操作 #创建一个sa账号 对sa账号授权,这样普罗米修斯才能对k8s集群有一定的权限,采集其他节点的信息。、 [rootmaster ~]# kubectl create serviceaccount monitor -n monitor serviceaccount/monitor crea…

Ubuntu 22.04 一次及其繁琐的 允许 Traceroute 探测漏洞修复之旅

前言:允许 Traceroute 探测是绿盟漏洞扫描器报出来的一个漏洞,如下图: 我的系统是ubuntu 22.04,但由于是用户提供的虚拟机,会有些定制的部分,具体定制了哪部分就不知道了,直接描述问题。 解决问…

RK3399教程:wifi驱动调试技巧

公众号 欢迎扫码关注本人微信公众号:公众号上分享更多嵌入式知识和资料,分享个人学习嵌入式的心得体会。欢迎大家一起来玩呀。 疑问点? Android hal层需要配置那些东西? rk3399的wifi模组自适应支持多款wifi是什么技术原理&am…

机器学习平台建设

本文从机器学习平台的架构开始,再到具体的功能,然后从需求的角度带给读者思考,找到合适的机器学习平台建设之路。最后,推荐了微软开源开放的机器学习平台OpenPAI,是可私有部署的机器学习训练平台。 本文不少要点都可以…