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