k8s源码分析-----kubelet(5)diskSpaceManager

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

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

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

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

源码为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”目录,是否都有足够的空间

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java技术分享

Linux用户权限管理之三(文件与权限的设定)

所谓的文件权限,是指对文件的访问权限,包括对文件的读、写、删除、执行等,在linux下,每个用户都具有不同的权限,普通用户只能在自己的主目录下进行写操作,而在主...

1988
来自专栏向前进

【原创】Webpack构建的hash优化,vue-cli项目为例

背景: SPA的vue应用,采用webpack2构建,打包入口为main.js 输出:main模块打包成app.js,公共lib打包成vendor.js,公共样...

4124
来自专栏玄魂工作室

Hacker基础之Linux篇:进阶Linux命令三

objdump命令是Linux下的反汇编目标文件或者可执行文件的命令,当然,它还有其他作用

753
来自专栏向前进

vue-cli脚手架npm相关文件解读(7)dev-server.js

系列文章传送门: 1、build/webpack.base.conf.js 2、build/webpack.prod.conf.js 3、build/webp...

3967
来自专栏WeaponZhi

Python爬虫入门(二)

上一篇文章大概的讲解了 Python 爬虫的基础架构,我们对 Python 爬虫内部运行流程有了一定的理解了,我们这节将用一些简单的 Python 代码实现Py...

3286
来自专栏非著名程序员

Android的编译打包流程详解

阅读本文可以让获得如下知识:(1)Android编译打包流程。(2) Android是如何通过R文件引用到真正的资源文件?(3)打包流程中的的对齐是什么,为什么...

18210
来自专栏Java技术分享

Chrome开发,debug的使用方法。

怎样打开Chrome的开发者工具? 你可以直接在页面上点击右键,然后选择审查元素: ? 或者在Chrome的工具中找到: ? 或者,你直接记住这个快捷方式: C...

19910
来自专栏知识分享

4-学习GPRS_Air202(串口)

1135
来自专栏草根专栏

用ASP.NET Core 2.0 建立规范的 REST API -- GET 和 POST

本文所需的一些预备知识可以看这里: http://www.cnblogs.com/cgzl/p/9010978.html 和 http://www.cnblog...

991
来自专栏北京马哥教育

Python爬虫基础知识:urllib2的使用技巧

糖豆贴心提醒,本文阅读时间6分钟 前面说到了urllib2的简单入门,下面整理了一部分urllib2的使用细节。 1.Proxy 的设置 urllib2 默认...

2665

扫码关注云+社区