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

本文共 2105 字,大约阅读时间需要 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存活时间。

MaxContainerCountmaximum-dead-containers 系统中可以保存的最大已经停止容器实例数量。

MaxPerPodContainerCountmaximum-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日

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

转载于:https://www.cnblogs.com/jzdwajue/p/7297729.html

你可能感兴趣的文章
入手腾龙SP AF90mm MACRO
查看>>
ORACLE 递归查询
查看>>
[Android] 开发第十天
查看>>
操作~拷贝clone()
查看>>
Java开发中的23种设计模式
查看>>
jQuery源码分析(2) - 为什么不用new jQuery而是用$()
查看>>
[转]【EL表达式】11个内置对象(用的少) & EL执行表达式
查看>>
ArrayList对象声明& arrayList.size()
查看>>
并发编程 线程
查看>>
Mysql 解压安装
查看>>
Mysql
查看>>
前端html
查看>>
网络编程
查看>>
关于“设计模式”和“设计程序语言”的一些闲话
查看>>
(一二九)获取文件的MineType、利用SSZipArchive进行压缩解压
查看>>
python学习4 常用内置模块
查看>>
Window7上搭建symfony开发环境(PEAR)
查看>>
ResolveUrl的用法
查看>>
Linux内核态、用户态简介与IntelCPU特权级别--Ring0-3
查看>>
第23月第24天 git命令 .git-credentials git rm --cached git stash clear
查看>>