您的位置:首页 > 大数据 > 人工智能

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

2016-04-08 10:07 661 查看
本人空间链接: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 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日

(版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转载的,保留追究其侵权的权利。)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: