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

相关文章

来自专栏北京马哥教育

使用lxc搭建虚拟机

使用lxc可以帮助我们搭建轻量级的虚拟机,这种虚拟机的对资源要求不高,非常适合在硬件条件受限时建立多台虚拟机的情况,有助于我们完成需要多节点参与的实验环境。 ...

3384
来自专栏机器学习实践二三事

pip安装报错'not a supported wheel on this platform'

这个错误很常见,解决方法是改名,首先要获得在你的机器的平台上的合法名称: import pip pip.pep425tags.get_supporte...

2287
来自专栏娱乐心理测试

GitHub上传文件不能超过100M的解决办法

3716
来自专栏Java Edge

生成ssh key1 检查是否已经存在ssh key2 生成key3 git clone

30412
来自专栏王小雷

React Natvie在Mac os上安装并创建项目

详细记录React-Native 0.47版本在Mac OS 上安装过程并初始化项目。 ? 1. 安装RN环境 1.1 安装brew /usr/bin/ruby...

2056
来自专栏爱撒谎的男孩

Linux使用

3163
来自专栏从零学习云计算

openshift/origin学习记录(11)——赋予用户集群管理员权限

由于system:admin默认没有密码,没法登录web console,这里通过指令给账号dev赋予集群管理员权限。 # oc login -u sys...

2820
来自专栏醉生梦死

登录服务器后,提示-bash-4.2# 该如何解决?

-bash-4.2# 看到后面的 “ # ”吗?说明您使用的root用户登录的,您此时该去查看:

36612
来自专栏xingoo, 一个梦想做发明家的程序员

Kibana中doc与search策略的区别

在kibana中包含两种策略:doc和search。使用了两个循环队列来获取请求,并进行响应。 doc的代码如下: clientMethod: 'mget' ...

22310
来自专栏无原型不设计

【Mockplus教程】为什么删除多个页面的时候会有提示,如何取消提示?

为了防止误操作,在删除三个及以上页面的时候,Mockplus默认会给出输入“delete”字符 完成删除的确认提示,如下图: ? 要去掉这个提示,在设置中...

2576

扫码关注云+社区