k8s源码分析-----kubelet(6)statusManager

说明:此文章为腾讯云机器自动从本人csdn博客搬迁过来。是本人授权操作。

申明:无本人授权,不可转载本文。如有转载,本人保留追究其法律责任的权利。

龚浩华,QQ 29185807,月牙寂 道长

第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang

2.5、statusManager

1、构建与启动

代码在k8s.io\kubernetes\pkg\kubelet\kubelet.go中

func NewMainKubelet(

很简单,参数就是kubeclient,与apiserver连接的接口,就不再详细分析了。

我们再看下启动

// Run starts the kubelet reacting to config updates

func (kl *Kubelet) Run(updates <-chan PodUpdate) {

在Run中启动的

2、具体工作流程

代码在k8s.io\kubernetes\pkg\kubelet\status下

先NewManager

我们看看结构体

podStatuses:用于保存podstatus

podStatusChannel:用于模块间通信用

再看看对外暴露的接口

下面我们一个一个来进行解析

2.1 Start

// Start the API server status sync loop.

开启与api server的同步任务

开启了一个定时任务syncBatch

继续跟踪

从podStatusChannel中获取到请求请求任务

然后通过kubeclient获取最新的状态

获取到最新状态之后,进行更新,并判断是否terminated,再判断是否正在运行,没有这删除

最后,如果操作失败,则删除,等待下次操作。

2.2 GetPodStatus

// GetPodStatus returns the cached status for the provided pod UID,

    //as well as whether it was a cache hit.

这个很简单,直接从map中查找,返回结果

2.3 SetPodStatus

    // SetPodStatus caches updates the cached status for the given pod,

    //and triggers a status update.

更新caches,并触发状态更新

从caches(map)中查找,查找不到,则赋值启动时间

然后放入到caches(map)中,并通过podStatusChannel发布一个任务请求。这个将在start启动的同步任中获取到

2.4 TerminatePods

    // TerminatePods resets the container status for the provided pods

    //to terminated and triggers

    // a status update. This function may not enqueue all the provided pods,

    //in which case it will

    // return false

终止一个pod,并触发一个终止任务

设置pod的Terminated状态。然后通过podStatusChannel触发任务。如果发送失败则返回false,可以通过下次再一次尝试

2.5 DeletePodStatus

// DeletePodStatus simply removes the given pod from the status cache.

删除一个podstatus,主要是从caches(map)中删除

2.6 RemoveOrphanedStatuses

    // RemoveOrphanedStatuses scans the status cache and removes any entries

    //for pods not included in

    // the provided podUIDs.

也是一个删除操作,从caches(map)中删除

2.7 小结

statusManager功能单一,逻辑清晰,通过暴露接口向外提供操作。是典型的golang设计模式。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯玄武实验室的专栏

IE 浏览器 DOM 树结构概览(上)

DOM 作为现代浏览器的基础,其设计和实现方式影响着整个浏览器的表现。对安全研究者而言,了解DOM 的结构更是有着特殊的意义。在对 DOM 结构有了了解之后进行...

3230
来自专栏前端小叙

一分钟理清Vue-cli 代码构建步骤。

1、 $ npm install vue -cli -g $ vue init webpack project-name $ cd project-name...

29910
来自专栏雪胖纸的玩蛇日常

Vue学习(4)

1.{{}}模板语法、插值、简单运算 2.指令系统 v-if 真正销毁重建 v-show 更改css的display,用于重复切换出现

422
来自专栏软件测试经验与教训

session与cookie的区别详解

由于HTTP协议是无状态的,在WEB系统中,怎么识别请求来自于哪里呢?是哪一个用户发起的请求呢?

551
来自专栏IT技术精选文摘

网站海量数据和高并发解决方案(二)

除了数据量大,另外一个常见的问题就是并发量高,很多架构就是针对这个问题设计出来的。 1.应用和静态资源分离 刚开始的时候应用和静态资源是保存在一起的,当并发量达...

2118
来自专栏zhangdd.com

最新nginx日志格式及自定义日志配置

其中access log 记录了哪些用户,哪些页面以及用户浏览器、ip和其他的访问信息

762
来自专栏Netkiller

数据与应用程序间通信·UDP Socket

你是否想过当数据库中发生变化时,将变化内容通知到外面的应用程序。这样做的目的是 方便二次开发,例如你的软件第三方产品,你没有软件的源码,无法二次开发,这是你可以...

3316
来自专栏数据结构笔记

Django搭建博客(五):为博客添加后台管理功能

上一篇我们还留了一个小问题没有解决,其实这个问题我是特意留到这一篇来讲的,请往下看 ⇩

1014
来自专栏中国白客联盟

点击我即可获取你QQ系权限

腾讯域下的cookie都是通用的,怎么说,也就是说,比如你成功登录了QQ空间,则无需二次登录即可登录腾讯域的其他应用,比如邮箱、音乐、视频等。所以说,你只要发现...

1253
来自专栏CaiRui

nginx查看日志

nginx的log日志分为access log 和 error log 其中access log 记录了哪些用户,哪些页面以及用户浏览器、ip和其他的访问信息 ...

3426

扫码关注云+社区