k8s源码分析-----kubelet(3)ContainerGC

说明:此文章为腾讯云机器自动从本人csdn博客搬迁过来。是本人授权操作。

申明:无本人授权,不可转载本文。如有转载,本人保留追究其法律责任的权利。

龚浩华,QQ 29185807,月牙寂 道长

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

源码为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,首先获取容器信息,然后根据之前传入的参数值,进行容器回收

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏月牙寂

k8s源码分析-----kubelet(7)containerRuntime

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

3856
来自专栏Python自动化测试

测试驱动之csv文件在自动化中的使用(十)

python提供了对csv文件处理的模块,直接import csv就可以了,那么神秘是csv文件了?csv文件全名称为Comma-Separated Valu...

634
来自专栏北京马哥教育

Ansible 详细用法说明(二)

例:获取某台主机的变量 ansible 10.1.6.68 -m setup ===================================== sc...

2975
来自专栏天天P图攻城狮

Android基础开发实践:如何分析Native Crash

Native Crash常常发生在带有Jni代码的APP中,或者系统的Native服务中。作为比较难分析的一类问题,Native Crash其实还是有较多的方法...

3008
来自专栏流柯技术学院

Android APP测试的日志文件抓取

  实时打印的主要有:logcat main,logcat radio,logcat events,tcpdump,还有高通平台的还会有QXDM日志

1011
来自专栏大壮

iOS runtime(基础篇)

1415
来自专栏喵了个咪的博客空间

zephir-(2)安装和初体验

zephir-安装和初体验 ? 前言 先在这里感谢各位zephir开源技术提供者 zephir主要是解决了PHP开发人员尝试编写和编译PHP拓展所能执行的代码的...

3706
来自专栏有趣的Python

4-C++远征之起航篇-学习笔记

链接: https://pan.baidu.com/s/1SgdThGYaLDyXDFKvaBSa5A 密码: 2333

894
来自专栏Golang语言社区

[译]使用 LLDB 调试 Go 程序

我一般调试Go程序都是通过log日志,性能调试的话通过 pprof 、trace、flamegraph等,主要是Go没有一个很好的集成的debugger,前两年...

1033
来自专栏蓝天

cJSON精度丢失问题

问题复现步骤: 1) 输入字符串: {     "V":0.12345678 } 2) 字符串转成cJSON对象 3) 调用cJSO...

402

扫码关注云+社区