【读书笔记】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 ...
随机推荐
- Luogu 1068 - 分数线划定 - [快速排序]
题目链接:https://www.luogu.org/problemnew/show/P1068 题目描述世博会志愿者的选拔工作正在 A 市如火如荼的进行.为了选拔最合适的人才,A 市对所有报名的选手 ...
- css3之动画属性transform、transition、animation
工作当中,会遇到很多有趣的小动画,使用css3代替js会节省工作量,css3一些属性浏览器会出现不兼容,加浏览器的内核前缀 -moz-. -webkit-. -o- 1.transform rotat ...
- javaScript放在head和body的区别
JavaScript写在哪里? 内部:Html网页的<body></body>中: 内部:Html网页的<head></head>中: 外部:外部js文 ...
- 1_01 vue的双向绑定
听说vue1是双向绑定,不过现在Vue2不能直接双向绑定,需要设置绑定. 一.常见的是input表单的v-model const component = { template: ` <div&g ...
- 苹果cms安装及配置详细教程
听说这个好!php+mysql的 下载 http://www.maccms.com/down.html 下载之后解压到你的网站跟目录中,就像这个样子的 后台目录 然后重要的一步来了,在ftp工具上 ...
- 第十二届GOPS全球运维大会2019深圳站即将开幕
第十二届 GOPS 全球运维大会深圳站 会议召开时间:2019年4月12日-13日 会议召开地点:深圳圣淘沙酒店(翡翠店) 会议主办单位:高效运维社区 票务合作伙伴:活动家 会议报名地址:https: ...
- 记录一则xtts测试遇到的诡异现象
背景:在一次xtts的测试中遇到因源库数据文件名称包含特殊字符导致表空间全量备份缺失文件,之所以说是诡异现象,是因为xtts的全备日志不报任何错误,在恢复阶段才发现缺少文件,这个缺陷比较隐晦,尤其在迁 ...
- XML DOM 节点类型(Node Types)
节点类型 下面的表格列出了不同的 W3C 节点类型,以及它们可拥有的子元素: 节点类型 描述 子元素 Document 表示整个文档(DOM 树的根节点) Element (max. one) Pro ...
- IIS下载无后缀文件的设置
HTTP 错误 404.3 - Not Found由于扩展配置问题而无法提供您请求的页面.如果该页面是脚本,请添加处理程序.如果应下载文件,请添加 MIME 映射. 解决方法:MIME类型加 . ...
- 深入FM和FFM原理与实践
FM和FFM模型是最近几年提出的模型,凭借其在数据量比较大并且特征稀疏的情况下,仍然能够得到优秀的性能和效果的特性,屡次在各大公司举办的CTR预估比赛中获得不错的战绩.美团点评技术团队在搭建DSP的过 ...