k8s源码分析-----kubelet(9)podWorkers

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

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

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

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

源码为k8s v1.1.1稳定版本

3.3 podworkers

在3.2(也就是在k8s源码分析-----kubelet(8)pod管理)末尾,我们看到了,最终的处理都进入了podworkers中。

现在我们就来分析下podworkers

1、构建

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

// New creates a new Kubelet for use in main

func NewMainKubelet(

我们先看看其中的参数runtimeCache

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

从上图可以看出主要提供了两个接口函数GetPods和ForceUpdateIfOlder。在NewRuntimeCache的时候,提供的getter则是containerRuntime(这个之前的文章已经分析过)

结构体很简单

下面我们看看Getpods

从函数的注释就能够看的出来,其实runtimecache保存的就是当前pod的一个缓存,如果换成没有过期的话,则返回,如果过期了则重新更新

我们再看看

从上面的三个函数中我们就看到了getter.GetPods(其实这个就是containerRuntime)

现在看看podworkers

上面有很多的成员,其中最重要的就是podupdates,这个是针对不同的uid pod开启了一个通信管道。

2、工作

我们先看看kubelet的dispatchWork

其中就调用了podworks的Updatepod

我们继续跟踪

这一部分代码,其实就是对新的uid pod开启来一个chan 管道,真正的运行是在managePodLoop,稍后我们对其分析

isworking防止同一个pod重入。然后新的pod则将信息发送到管道。真的运行是在managePodLoop

我们再看下managePodLoop

这是一个死循环的,消费者,前面的updatepod是生产者,负责将pod通过管道发送到这个消费者。先从runtimecache中获取到pods,然后将调用syncpodFn(这个参数是在构建podworkers传入的,其实就是kubelet的syncPod),稍后在分析syncpod

这个消费者什么时候死亡呢?

我们看下面,下面的ForgetWorker和ForgetNonExistingPodWorkers。调用了removeworker,在这个函数中,关闭了管道,那么消费者也将随之消失

那么我们即将进入最后的步骤func (kl *Kubelet) syncPod

上面的是一个函数返回时的操作

上面中,开始真正的动作。killpod,当pod无法运行的时候

然后开始解析,挂载volume

等等一系列的操作完之后,调用了containerRuntime.synpod

这个就是我们之前分析的对docker封装的一个containerRuntime。

4、总结

关于kubelet的所有分析都完成了。这一系列的文章只是对kubelet做了一个简单的分析,其中还有很多部分并没有完全的分析,不过我相信经过这些分析之后,对kubelet的主要工作应该已经有了一个大致的了解。

再说手kubelet的设计,这里面用的最多的是生产者和消费者模型,都是通过chan来进行通信,这个也是golang官方极力推荐的模式。再有就是,模块独立化,各个模块自我管理,这个与我在15年上海golang大会上所提到的AOP(Agent Oriented Programmig 面向智能体编程)的理念是一样的。

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏EAWorld

8种至关重要OAuth API授权流与能力

在本文中,Curity的Daniel Lindau概述了重要的OAuth授权流程和能力。

311
来自专栏何俊林

移动App 网络优化细节探讨

1846
来自专栏游戏杂谈

移动环境下DNS解析失败后的优化方案

我们手机游戏中,通过上报收集到的数据来分析,发现相当多的一部分用户,在请求一些配置时会遇到无法解析的情况,或者域名的解析直接被拦截了。

811
来自专栏网站漏洞修补

微信里的网站网址被提示已停止访问该网页该如何解决

今天早晨发现我们公司网站只要在微信和qq中打开,分别被微信提示:已停止访问该网页,该网站链接以及在qq上被提示危险网站,千万别访问,首先先看下微信中打开网址被微...

1643
来自专栏Java编程技术

Dubbo剖析-服务降级

dubbo提供了一些服务降级措施,当服务提供端某一个非关键的服务出错时候,dubbo可以对消费端的调用进行降级,这样服务消费端就避免了在去调用出错的服务提供端,...

1682
来自专栏MySQL

10款常见MySQL高可用方案选型解读

关于对高可用的分级我们暂不做详细的讨论,这里只讨论常用高可用方案的优缺点以及选型。

5099
来自专栏云计算教程系列

物联网入门:搭建MQTT服务器

MQTT(消息队列遥测传输)是ISO 标准下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设...

5888
来自专栏北京马哥教育

如何用几个简单的命令改善你的Linux安全

作者:lrq110120 来源:http://richylu.blog.51cto.com/1481674/1915484 本文中,我们将讨论如何通过一些Lin...

3509
来自专栏云计算

虚拟机备份和恢复的六大最佳实践

虚拟机( virtual machine,简称 VM)的体系结构与传统的本地环境存在较大差异,因此需要不同的数据备份技术。基于此,本文将对虚拟机备份的一些最佳实...

3297
来自专栏皮振伟的专栏

[linux][storage]Linux存储栈

前言: 随着Linux的版本升高,存储栈的复杂度也随着增加。作者在这里简单介绍目前Linux存储栈。 分析: 1,storage stack ? 在用户态,可...

78213

扫码关注云+社区