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

相关文章

来自专栏乐沙弥的世界

Nginx 概述及日常管理

Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发...

721
来自专栏网站漏洞修补

网站漏洞修复对于网站清除木马的解决办法

THINKPHP漏洞修复,官方于近日,对现有的thinkphp5.0到5.1所有版本进行了升级,以及补丁更新,这次更新主要是进行了一些漏洞修复,最严重的就是之前...

1073
来自专栏CaiRui

Python和FTP

1、HTTP主要用于基于Web的文件下载以及访问Web服务,一般客户端无须登录就可以访问服务器上的文件和服务。大部分HTTP文件传输请求都用于获取网页(即将网页...

2235
来自专栏一枝花算不算浪漫

[Linux基础]Linux基础知识入门及常见命令.

3637
来自专栏cnblogs

nodejs 命令行、自定义

一、必备插件 1. babel:es6语法支持,需要babel-perset-es2015(转换成es5执行)、babel、babel-core(程序执行) 2...

2226
来自专栏ytkah

finecms如何批量替换文章中的关键词?

  Finecms批量替换文章关键词要怎么操作呢,比如把关键词A换为B?Finecms是免费开源无商业限制的内容管理系统,个人在维护,但二次开发很灵活,我们可以...

2903
来自专栏smy

对比cp和scp命令 将数据从一台linux服务器复制到另一台linux服务器

cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复...

4395
来自专栏北京马哥教育

Linux中find命令用法全汇总,看完就没有不会用的!

糖豆贴心提醒,本文阅读时间7分钟 Linux 查找命令是Linux系统中最重要和最常用的命令之一。查找用于根据与参数匹配的文件指定的条件来搜索和查找文件和目录...

2883
来自专栏编程

中间件漏洞检测框架利器F-MiddlewareScan

介绍 纯python编写的轻量级中间件漏洞检测框架,实现针对中间件的自动化检测,端口探测->中间件识别->漏洞检测->获取webshell 漏洞检测脚本以插件形...

2416
来自专栏Python

linux每日命令(6):rm命令

rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件,只是删除了链接,原有文件均...

881

扫码关注云+社区