原文链接https://mp.weixin.qq.com/s?__biz=MzI0NjI4MDg5MQ==&mid=2715291842&idx=1&sn=e605f9b4099d946f94ca6783a8e4a6f6

背景:

CronJob是Kubernetes提供的定时任务功能,CronJob可以根据你指定的cron策略来完成任务。我们在使用CronJob的时候,我们发现,当创建一个CronJob的时候,只会创建一个CronJob,当到指定时间时,会创建一个job和一个pod,随着时间的推移,我们会发现,越来越多的job和pod,甚至是满屏的job和pod,我们在调用API删除这个cronjob的时候,发现只会删除cronjob这个资源,而不会删除对应的已有的job和pod,然后,我们尝试删除job,发现删除job,会把对应的pod删除掉,为什么好多的操作不符合心理预期呢?心里冒着十万个为什么?

原作者疑问

1. cronjob是怎么定时创建job的呢?

2. 为什么删除的时候,只是删除了cronjob,而没有删除对应的job和pod呢?

3. cronjob、job和pod之间的关系是怎么样的呢?

4. job和pod的关系是怎么对应上的呢?

原作者答案

Q:cronjob和job是如何维护关系的呢?

A: cronjob和job关系,使用了types.UID,来判断的,每个cronjob拥有唯一的UID,然后列出所有的jobs,使用遍历job的策略来判断job应该属于哪个cronjob。

Q:job和pod的关系是怎么样维护的呢?

A: 先拿到了job中的Selector,然后,根据选择器来获取对应标签的pods

Q:cronjob是怎么定时创建job的呢?

A: 通过代码发现,cronjob会在后台启动一个go程,后台一直在处理cronjob,job和pod,同时也在维护cornjob的Active列表数据的正确性,同时,我们也在syncOne()函数中找到了他后台周期期创建job的操作。job是cronjob-controller创建的,逻辑是,当创建一个cronjob后,会把这个cronjob交接到cronjob-controller下的goroutine,然后就返回了,正在创建任务的是controller下的goroutine。

Q:删除是cronjob,为何没有删除对应的job和pod?

A: 删除的时候,会首先检查并发job的并发策略,如果不为0,会设置为0,并更新这个job的状态,然后找到对应的pod,删除完pod后再删除job本身,如果有一个pod删除失败,会直接退出而不会删除job。删除完job后,再从cronjob的Active列表中移除job。

对于删除cronjob,可能没有立即删除job和pod,是因为删除的时候会有三种策略,即:

DeletionPropagation string="Orphan","Foreground"(默认),"Background"

Orphan:垃圾回收GC自动触发;

Background:垃圾回收器会在后台执行删除(手动触发,立即后台处理)。

Foreground:API调用后会设置删除的过期时间,并把他放入到要删除的队列,在没删除之前,前台一直可见(手动触发,可能不立即处理)。

当真正执行Delete(或者其他操作)的时候,根据资源获取resource,然后重新组装deleteOptions策略,然后删除。

# 注意,删除cronjob的时候不会自动删除job,这些job可以用kubectl delete job来删除

参考链接:

Cronjob源码地址http://github.com/kubernetes/kubernetes/pkg/controller/cronjob/cronjob_controller.go

Cronjob中文文档:https://www.kubernetes.org.cn/cronjob

【读书笔记】Cronjob原理及源码分析的更多相关文章

  1. OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波

    http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 201 ...

  2. ConcurrentHashMap实现原理及源码分析

    ConcurrentHashMap实现原理 ConcurrentHashMap源码分析 总结 ConcurrentHashMap是Java并发包中提供的一个线程安全且高效的HashMap实现(若对Ha ...

  3. HashMap和ConcurrentHashMap实现原理及源码分析

    HashMap实现原理及源码分析 哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表, ...

  4. (转)ReentrantLock实现原理及源码分析

    背景:ReetrantLock底层是基于AQS实现的(CAS+CHL),有公平和非公平两种区别. 这种底层机制,很有必要通过跟踪源码来进行分析. 参考 ReentrantLock实现原理及源码分析 源 ...

  5. 【转】HashMap实现原理及源码分析

    哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景极其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashMap的实现原理也常常出 ...

  6. 【OpenCV】SIFT原理与源码分析:DoG尺度空间构造

    原文地址:http://blog.csdn.net/xiaowei_cqu/article/details/8067881 尺度空间理论   自然界中的物体随着观测尺度不同有不同的表现形态.例如我们形 ...

  7. 《深入探索Netty原理及源码分析》文集小结

    <深入探索Netty原理及源码分析>文集小结 https://www.jianshu.com/p/239a196152de

  8. HashMap实现原理及源码分析之JDK8

    继续上回HashMap的学习 HashMap实现原理及源码分析之JDK7 转载 Java8源码-HashMap  基于JDK8的HashMap源码解析  [jdk1.8]HashMap源码分析 一.H ...

  9. 【OpenCV】SIFT原理与源码分析:关键点描述

    <SIFT原理与源码分析>系列文章索引:http://www.cnblogs.com/tianyalu/p/5467813.html 由前一篇<方向赋值>,为找到的关键点即SI ...

随机推荐

  1. python全栈开发 * 进程池,线程理论 ,threading模块 * 180727

    一.进程池 (同步 异步 返回值) 缺点: 开启进程慢 几个CPU就能同时运行几个程序 进程的个数不是无线开启的 应用: 100个任务 进程池 如果必须用多个进程 且是高计算型 没有IO型的程序 希望 ...

  2. java awt 中文乱码 显示为 方块

    今天调试同学的五子棋程序,同学的界面是用awt写的,运行的时候,发现菜单栏中的中文都无法正常显示,而是变为了一个个方框, 类似于这样:(图片来源于网络) 即使做了字体设置,比如设置为宋体,也还是无法正 ...

  3. 泡泡一分钟:Semantic Labeling of Indoor Environments from 3D RGB Maps

    张宁 Semantic Labeling of Indoor Environments from 3D RGB Maps Manuel Brucker,  Maximilian Durner,  Ra ...

  4. Luogu 1093 - 奖学金 - [排序水题]

    题目链接:https://www.luogu.org/problemnew/show/P1093 题目描述某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金.期末,每个学生 ...

  5. IntelliJ IDEA 注册码激活

    IntelliJ IDEA 注册码激活 方法一:使用激活服务器激活方法 步骤 1.打开注册/激活窗口: 2.选择 License server: 3.填入上述其中一个网址(如:http://idea. ...

  6. Web开发——HTML基础(图像、音频和视频内容)

    参考: 参考:HTML中的图像 参考:视频和音频内容 目录: 1.HTML中的图像 1.1 我们如何在网页上放置图像? (1)替代文字(alt) (2)宽度和高度 (3)图片标题 1.2 用图形和图形 ...

  7. CSS 字体效果

    text-shadow还没有出现时,大家在网页设计中阴影一般都是用photoshop做成图片,现在有了css3可以直接使用text-shadow属性来指定阴影.这个属性可以有两个作用,产生阴影和模糊主 ...

  8. 安装caffe-ssd或者caffe时make all,make pycaffe,make test运行慢的问题

    之所有运行慢,是因为没有在这三条语句后面加上 -j,即没用全部的进程运行,不加-j 表示用单一进程运行,加上-j5表示用5个进程,-j不带数字表示用所有进程

  9. php年会抽奖

    <?php/** * 抽奖 * @param int $total */function getReward($total=1000){ $win1 = floor((0.12*$total)/ ...

  10. http返回状态码含义

    http返回状态码 http状态码 200 2开头的都表示这个请求发送成功,最常见的就是200,就代表这个请求是ok的,服务器也返回了. 300 3开头的代表重定向,最常见的是302,把这个请求重定向 ...