【原创】k8s源码分析-----kubelet(3)ContainerGC
本人空间链接:http://user.qzone.qq.com/29185807/blog/1460080827源码为k8s v1.1.1稳定版本 2.2 ContainerGC1、参数代码在k8s.io\kubernetes\cmd\kubelet\app中 结构体变量type KubeletServer struct {...MinimumGCAge ...
本人空间链接: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日
(版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转载的,保留追究其侵权的权利。)
如果你觉得本文对你有帮助,可以转到你的朋友圈,让更多人一起学习。
第一时间获取文章,可以关注本人公众号:月牙寂道长,也可以扫码关注
更多推荐
所有评论(0)