专栏首页月牙寂k8s源码分析-----kubelet(6)statusManager

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 条评论
登录 后参与评论

相关文章

  • 以太坊源码分析---go-ethereum之p2p通信分析(1)

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

    月牙寂道长
  • 我的系统设计之道

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

    月牙寂道长
  • k8s源码分析------kube-apiserver分析(3)

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

    月牙寂道长
  • DAY3:阅读CUDA C编程接口

    GPUS Lady
  • poj-1028 -网页导航

    Standard web browsers contain features to move backward and forward among the pa...

    瑾诺学长
  • Udp Packet Receive Errors

    happy123.me
  • ZOJ Problem Set - 2100

    ZOJ Problem Set - 2100 SeedingTime Limit: 1 Second      Memory Limit: 32768 KBIt...

    用户1161731
  • 【总结】 几个C语言中的“坑”

    本题中的#运算符可以利用宏参数创建字符串。##运算符和#运算符一样也可以用于类函数宏的替换部分。另外,##还可以用于类对象宏的替换部分,这个运算符可以把两个语言...

    编程范 源代码公司
  • Spark提交任务入口源码分析

    我们平常在使用Spark进行提交代码的时候,一般是直接在装有spark客户端的机器上提交jar包执行。运行命令如下:

    幽鸿
  • iESC:迭代等效表面电流近似(CS CE)

    一种新颖的迭代等效表面电流(iESC)算法已被开发出来,用于模拟具有相对光滑表面的大的电介质物体的电磁散射。iESC算法修正了表面电流,以补偿电介质表面的电磁场...

    Rosalie

扫码关注云+社区

领取腾讯云代金券