【原创】k8s源码分析-----kubelet(5)diskSpaceManager

本文qq空间链接:http://user.qzone.qq.com/29185807/blog/1460448039

本文csdn博客链接:http://blog.csdn.net/screscent/article/details/51134293

源码为k8s v1.1.1稳定版本

2.4、diskSpaceManager

1、参数

代码在k8s.io\kubernetes\cmd\kubelet\app中

结构体变量

type KubeletServer struct {

...

LowDiskSpaceThresholdMB        int

...

}

默认参数

func NewKubeletServer() *KubeletServer {

return &KubeletServer{

...

LowDiskSpaceThresholdMB:     256,

...

}

}

flag参数

func (s *KubeletServer) AddFlags(fs *pflag.FlagSet) {

...

fs.IntVar(&s.LowDiskSpaceThresholdMB, "low-diskspace-threshold-mb", s.LowDiskSpaceThresholdMB, "The absolute free disk space, in MB, to maintain. When disk space falls below this threshold, new
pods would be rejected. Default: 256")

...

}

LowDiskSpaceThresholdMB: 创建pod所需要的最低磁盘空间。当低于这个大小的时候,将拒绝创建pod。

2、传递参数

代码依旧在k8s.io\kubernetes\cmd\kubelet\app 中

在func (s *KubeletServer) KubeletConfig() (*KubeletConfig, error) {

...

imageGCPolicy := kubelet.ImageGCPolicy{

HighThresholdPercent: s.ImageGCHighThresholdPercent,

LowThresholdPercent:  s.ImageGCLowThresholdPercent,

}

...

return &KubeletConfig{

...

DiskSpacePolicy:           diskSpacePolicy,

...

}

}

构建了一个KubeletConfig

在func createAndInitKubelet(kc *KubeletConfig) (k KubeletBootstrap, pc *config.PodConfig, err error) {

...

k, err = kubelet.NewMainKubelet(

...       kc.DiskSpacePolicy,

...

}

...

}

diskSpaceManager比较简单,就只有一个空间大小设定的参数

3、diskSpaceManager具体工作

1、构建

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

func NewMainKubelet(

这里就很简单了,cadvisorInterface前面的文章里面已经介绍过了。还有一个就是磁盘空间限度。

我们往下继续看

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

很简单的构建结构体

下面是接口

我们再看具体的结构体

从上面的成员来看,英文解释很清楚。

cachedInfo:用于保存文件系统信息

policy:就是传进来的磁盘限制大小

frozen:标志位,用于标识磁盘空间是否够用

我们看看暴露的接口

两个目录的查询“docker”和“root”

具体实现在下:

从上面两张图来看,先获取到文件信息。通过上面传递的

docker 对应的是dm.cadvisor.DockerImagesFsInfo

root对应的是dm.cadvisor.RootFsInfo

然后进行判断。

还有一个接口

这个接口就很简单了。设置了标识位

我们看看kubelet是怎么用它的

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

查询两个目录,“docker”和“root”目录,是否都有足够的空间

龚浩华

QQ 月牙寂 29185807

2016年4月12日

(版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转载的,保留追究其侵权的权利。)

时间: 2024-10-13 16:32:26

【原创】k8s源码分析-----kubelet(5)diskSpaceManager的相关文章

【原创】k8s源码分析-----kubelet(4)imageManager

本文qq空间链接:http://user.qzone.qq.com/29185807/blog/1460429307 本文csdn博客链接:http://blog.csdn.net/screscent/article/details/51131261 源码为k8s v1.1.1稳定版本 2.3.imageManager 1.参数 代码在k8s.io\kubernetes\cmd\kubelet\app中 结构体变量 type KubeletServer struct { ... ImageGCH

【原创】k8s源码分析-----kubelet(3)ContainerGC

本人空间链接:http://user.qzone.qq.com/29185807/blog/1460080827 源码为k8s v1.1.1稳定版本 2.2 ContainerGC 1.参数 代码在k8s.io\kubernetes\cmd\kubelet\app中 结构体变量 type KubeletServer struct { ... MinimumGCAge                   time.Duration MaxContainerCount              in

【原创】k8s源码分析-----kubectl(2)Factory

本文QQ空间的链接:http://user.qzone.qq.com/29185807/blog/1461036130 本文csdn博文的链接:http://blog.csdn.net/screscent/article/details/51188790 源码为k8s v1.1.1 1.原因 首先讲讲为啥,我们要讲解Factory 代码在k8s.io\kubernetes\cmd\kubectl 先从main函数入口来说 main函数很简单,进来就直接构建了一个cmd,然后调用了Execute

【原创】k8s源码分析-----kubectl(3)主要框架

本文QQ空间的链接:http://user.qzone.qq.com/29185807/blog/1461123088 本文csdn博文的链接:http://blog.csdn.net/screscent/article/details/51199351 源码为k8s v1.1.1 1.整体流程 我们先整体的流程走一遍,不用太过于关心看不看的懂,先有个整体的流程概念,后续再一步一步分析 1.1 main 先从main开始 代码在k8s.io\kubernetes\cmd\kubectl\kube

【原创】k8s源码分析-----kube-proxy(2)ProxyServer

本文QQ空间链接:http://user.qzone.qq.com/29185807/blog/1460685179 本文csdn博客链接:http://blog.csdn.net/screscent/article/details/51159168 k8s源码为v1.1.1稳定版本 1.ProxyServer的构建与主流程 源码在k8s.io\kubernetes\cmd\kube-proxy main函数入口 这个就不再多说了,这种结构已经见多了 继续进入源码k8s.io\kubernete

《k8s 源码分析》- Custom Controller 之 Informer

Custom Controller 之 Informer 概述 架构概览 reflector - List & Watch API Server Reflector 对象 ListAndWatch watchHandler - add obj to delta fifo Informer (controller) - pop obj from delta fifo Controller processLoop Add obj to Indexer (Thread safe store) shar

【原创】k8s源码分析-----kubectl(1)api.RESTMapper

本文QQ空间链接:http://user.qzone.qq.com/29185807/blog/1460961715 本文csdn博文链接:http://blog.csdn.net/screscent/article/details/51179485 源码为k8s v1.1.1稳定版本 api. RESTMapper是kube-apiserver和kubectl的基础,在讲解kube-apiserver的时候,我们就有简单的讲解api. RESTMapper,但并没有系统的讲解.那么这一章,我们

【原创】k8s源码分析-----kube-scheduler

本文转自本人空间:http://user.qzone.qq.com/29185807/blog/1459831332 源码为k8s v1.1.1稳定版本 一.主要流程 1.main入口 源码在k8s.io/kubernetes/plugin/cmd/kube-scheduler 这种封装是k8s里面一贯的封装风格,就不再多说了 源码在k8s.io/kubernetes/plugin/cmd/kube-scheduler/app 继续往下 真正的入口 下面有个ratelimiter 在factor

【原创】k8s源码分析----apiserver之APIGroupVersion

本文中转载自本人空间:http://user.qzone.qq.com/29185807/blog/1458892866 前面3篇文章,主要是根据程序处理流程进行跳转分析.经过这些流程的跳转分析,拨开乌云终见日. 我们剥掉那些不重要的部分,直接进入主要框架. APIGroupVersion 在master中,api v1的初始化 生成了一个default的apigroupversion 下面进入到整个框架中最重要的数据结构 一.主要数据结构 1.mapper,其最重要的东西是里面的RESTMap