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

本人空间链接: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日

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

时间: 2024-10-10 18:25:23

【原创】k8s源码分析-----kubelet(3)ContainerGC的相关文章

【原创】k8s源码分析-----kubelet(4)imageManager

本文qq空间链接:http://user.qzone.qq.com/29185807/blog/1460429307 本文csdn博客链接:http://blog.csdn.net/screscent/article/details/51131261 源码为k8s v1.1.1稳定版本 2.3.imageManager 1.参数 代码在k8s.io\kubernetes\cmd\kubelet\app中 结构体变量 type KubeletServer struct { ... ImageGCH

【原创】k8s源码分析-----kubelet(5)diskSpaceManager

本文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 { ... LowD

【原创】k8s源码分析-----kubectl(2)Factory

本文QQ空间的链接:http://user.qzone.qq.com/29185807/blog/1461036130 本文csdn博文的链接:http://blog.csdn.net/screscent/article/details/51188790 源码为k8s v1.1.1 1.原因 首先讲讲为啥,我们要讲解Factory 代码在k8s.io\kubernetes\cmd\kubectl 先从main函数入口来说 main函数很简单,进来就直接构建了一个cmd,然后调用了Execute

【原创】k8s源码分析-----kubectl(3)主要框架

本文QQ空间的链接:http://user.qzone.qq.com/29185807/blog/1461123088 本文csdn博文的链接:http://blog.csdn.net/screscent/article/details/51199351 源码为k8s v1.1.1 1.整体流程 我们先整体的流程走一遍,不用太过于关心看不看的懂,先有个整体的流程概念,后续再一步一步分析 1.1 main 先从main开始 代码在k8s.io\kubernetes\cmd\kubectl\kube

【原创】k8s源码分析-----kube-proxy(2)ProxyServer

本文QQ空间链接:http://user.qzone.qq.com/29185807/blog/1460685179 本文csdn博客链接:http://blog.csdn.net/screscent/article/details/51159168 k8s源码为v1.1.1稳定版本 1.ProxyServer的构建与主流程 源码在k8s.io\kubernetes\cmd\kube-proxy main函数入口 这个就不再多说了,这种结构已经见多了 继续进入源码k8s.io\kubernete

《k8s 源码分析》- Custom Controller 之 Informer

Custom Controller 之 Informer 概述 架构概览 reflector - List & Watch API Server Reflector 对象 ListAndWatch watchHandler - add obj to delta fifo Informer (controller) - pop obj from delta fifo Controller processLoop Add obj to Indexer (Thread safe store) shar

【原创】k8s源码分析-----kubectl(1)api.RESTMapper

本文QQ空间链接:http://user.qzone.qq.com/29185807/blog/1460961715 本文csdn博文链接:http://blog.csdn.net/screscent/article/details/51179485 源码为k8s v1.1.1稳定版本 api. RESTMapper是kube-apiserver和kubectl的基础,在讲解kube-apiserver的时候,我们就有简单的讲解api. RESTMapper,但并没有系统的讲解.那么这一章,我们

【原创】k8s源码分析-----kube-scheduler

本文转自本人空间:http://user.qzone.qq.com/29185807/blog/1459831332 源码为k8s v1.1.1稳定版本 一.主要流程 1.main入口 源码在k8s.io/kubernetes/plugin/cmd/kube-scheduler 这种封装是k8s里面一贯的封装风格,就不再多说了 源码在k8s.io/kubernetes/plugin/cmd/kube-scheduler/app 继续往下 真正的入口 下面有个ratelimiter 在factor

【原创】k8s源码分析----apiserver之APIGroupVersion

本文中转载自本人空间:http://user.qzone.qq.com/29185807/blog/1458892866 前面3篇文章,主要是根据程序处理流程进行跳转分析.经过这些流程的跳转分析,拨开乌云终见日. 我们剥掉那些不重要的部分,直接进入主要框架. APIGroupVersion 在master中,api v1的初始化 生成了一个default的apigroupversion 下面进入到整个框架中最重要的数据结构 一.主要数据结构 1.mapper,其最重要的东西是里面的RESTMap