【读书笔记】Cronjob原理及源码分析
背景:
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原理及源码分析的更多相关文章
- OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波
http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 201 ...
- ConcurrentHashMap实现原理及源码分析
ConcurrentHashMap实现原理 ConcurrentHashMap源码分析 总结 ConcurrentHashMap是Java并发包中提供的一个线程安全且高效的HashMap实现(若对Ha ...
- HashMap和ConcurrentHashMap实现原理及源码分析
HashMap实现原理及源码分析 哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表, ...
- (转)ReentrantLock实现原理及源码分析
背景:ReetrantLock底层是基于AQS实现的(CAS+CHL),有公平和非公平两种区别. 这种底层机制,很有必要通过跟踪源码来进行分析. 参考 ReentrantLock实现原理及源码分析 源 ...
- 【转】HashMap实现原理及源码分析
哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景极其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashMap的实现原理也常常出 ...
- 【OpenCV】SIFT原理与源码分析:DoG尺度空间构造
原文地址:http://blog.csdn.net/xiaowei_cqu/article/details/8067881 尺度空间理论 自然界中的物体随着观测尺度不同有不同的表现形态.例如我们形 ...
- 《深入探索Netty原理及源码分析》文集小结
<深入探索Netty原理及源码分析>文集小结 https://www.jianshu.com/p/239a196152de
- HashMap实现原理及源码分析之JDK8
继续上回HashMap的学习 HashMap实现原理及源码分析之JDK7 转载 Java8源码-HashMap 基于JDK8的HashMap源码解析 [jdk1.8]HashMap源码分析 一.H ...
- 【OpenCV】SIFT原理与源码分析:关键点描述
<SIFT原理与源码分析>系列文章索引:http://www.cnblogs.com/tianyalu/p/5467813.html 由前一篇<方向赋值>,为找到的关键点即SI ...
随机推荐
- 微信小程序(微信应用号)组件讲解[申明:来源于网络]
微信小程序(微信应用号)组件讲解[申明:来源于网络] 地址:http://www.cnblogs.com/muyixiaoguang/p/5902008.html
- lsass.exe占用cpu 解决方法
最终解决办法如下: RD /s /q "%USERPROFILE%\AppData\Roaming\Microsoft\Protect"
- css学习_css文字阴影、盒子阴影
文字阴影和盒子阴影的用法: 多阴影
- idea实用插件
代码规范检测插件: Alibaba Java Coding GuideLines使用@data插件lombok数据库mapper插件mybatisX前端运行vue的插件,装起了后在Terminal上运 ...
- 最全的MonkeyRunner自动化测试从入门到精通(10)
三.MonkeyRunner复杂的功能开始学习 (1)获取APK文件中ID的两种方式 Monkeyrunner的环境已经搭建完成,现在对Monkeyrunner做一个简介. Monkeyrunner工 ...
- 记录常用的adb命令
1.启动adb服务 adb start-server 2.关闭服务 adb kill-server 3.进入shell环境 adb shell 4.安装应用 adb install -r xxx.ap ...
- 图像分类(一)GoogLenet Inception_V1:Going deeper with convolutions
论文地址 在该论文中作者提出了一种被称为Inception Network的深度卷积神经网络,它由若干个Inception modules堆叠而成.Inception的主要特点是它能提高网络中计算资源 ...
- Mybatis tinyint(1)自动转boolean
使用Mybatis查询tinyint(1)字段数据,返回值为Map类型,那么tinyint(1)的数据默认会转化为boolean类型数据.解决方案: 1.使用ifnull(column, 0)处理该 ...
- java之jdbc使用
简单使用 Statement 通过 Statement 执行 ,其实是拼接 sql 语句的. 先拼接 sql 语句,然后在一起执行. package com.zze.test; import jav ...
- 转换编码utf-8
用这个enca -x utf-8 * 或者是 filename,还有别的方法,参见:https://blog.csdn.net/a280606790/article/details/8504133 我 ...