博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【原创】k8s源码分析-----kubelet(3)ContainerGC
阅读量:4033 次
发布时间:2019-05-24

本文共 2117 字,大约阅读时间需要 7 分钟。

本人空间链接:

源码为k8s v1.1.1稳定版本

 

2.2 ContainerGC

1、参数

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

 

结构体变量

type KubeletServer struct {

...

MinimumGCAge                   time.Duration

MaxContainerCount              int

MaxPerPodContainerCount        int

...

}

 

默认参数

func NewKubeletServer() *KubeletServer {

    return &KubeletServer{

...

MinimumGCAge:                1 * time.Minute,

MaxContainerCount:           100,

MaxPerPodContainerCount:     2,

...

}

}

 

flag参数

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

...

fs.DurationVar(&s.MinimumGCAge, "minimum-container-ttl-duration", s.MinimumGCAge, "Minimum age for a finished container before it is garbage collected.  Examples: '300ms', '10s' or '2h45m'")

fs.IntVar(&s.MaxContainerCount, "maximum-dead-containers", s.MaxContainerCount, "Maximum number of old instances of containers to retain globally.  Each container takes up some disk space.  Default: 100.")

fs.IntVar(&s.MaxPerPodContainerCount, "maximum-dead-containers-per-container", s.MaxPerPodContainerCount, "Maximum number of old instances to retain per container.  Each container takes up some disk space.  Default: 2.")

...

}

 

MinimumGCAge : minimum-container-ttl-duration 已经停止的容器实例在系统中上的ttl存活时间。

MaxContainerCount:maximum-dead-containers 系统中能够保存的最大已经停止容器实例数量。

MaxPerPodContainerCount:maximum-dead-containers-per-container 每个容器最多在系统中保存的最大已经停止的实例数量。

 

2、传递参数

在1中我们看到参数已经构建。那么是怎么传递的

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

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

...

return &KubeletConfig{

...

MaxContainerCount:         s.MaxContainerCount,

MaxPerPodContainerCount:   s.MaxPerPodContainerCount,

MinimumGCAge:              s.MinimumGCAge,

...

}

}

构建了一个KubeletConfig

 

继续传递

构建了一个kubelet.ContainerGCPolicy

然后传递到了NewMainKubelet中

在函数的末尾调用了k.StartGarbageCollection()

 

3、工作流程

3.1构建

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

func NewMainKubelet(

然后

整个过程构建完成了

 

然后从2中我们知道最后调用了如下代码。定期执行GarbageCollect

3.2 具体流程

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

我们看看结构体

我们看看evictableContainers函数,用于获取容器信息

 

下面是GarbageCollect,首先获取容器信息,然后根据之前传入的参数值,进行容器回收

 

龚浩华

qq 月牙寂 道长 29185807

2016年4月8日

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

 

如果你觉得本文对你有帮助,可以转到你的朋友圈,让更多人一起学习。

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

 

你可能感兴趣的文章
Servlet和JSP的线程安全问题
查看>>
GBK编码下jQuery Ajax中文乱码终极暴力解决方案
查看>>
jQuery性能优化指南
查看>>
Oracle 物化视图
查看>>
PHP那点小事--三元运算符
查看>>
解决国内NPM安装依赖速度慢问题
查看>>
Brackets安装及常用插件安装
查看>>
在CentOS 7系统上搭建LNMP 环境
查看>>
Centos 7(Linux)环境下安装PHP(编译添加)相应动态扩展模块so(以openssl.so为例)
查看>>
fastcgi_param 详解
查看>>
Nginx配置文件(nginx.conf)配置详解
查看>>
标记一下
查看>>
一个ahk小函数, 实现版本号的比较
查看>>
IP报文格式学习笔记
查看>>
autohotkey快捷键显示隐藏文件和文件扩展名
查看>>
Linux中的进程
查看>>
学习python(1)——环境与常识
查看>>
学习设计模式(3)——单例模式和类的成员函数中的静态变量的作用域
查看>>
深度学习库安装与使用
查看>>
keras句子分类 keras_demo_for_sentence_classification (simplified version)
查看>>