深入剖析Kubernetes
张磊
Kubernetes社区资深成员与项目维护者
立即订阅
22715 人已学习
课程目录
已完结 56 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (5讲)
开篇词 | 打通“容器技术”的任督二脉
免费
01 | 预习篇 · 小鲸鱼大事记(一):初出茅庐
02 | 预习篇 · 小鲸鱼大事记(二):崭露头角
03 | 预习篇 · 小鲸鱼大事记(三):群雄并起
04 | 预习篇 · 小鲸鱼大事记(四):尘埃落定
容器技术概念入门篇 (5讲)
05 | 白话容器基础(一):从进程说开去
06 | 白话容器基础(二):隔离与限制
07 | 白话容器基础(三):深入理解容器镜像
08 | 白话容器基础(四):重新认识Docker容器
09 | 从容器到容器云:谈谈Kubernetes的本质
Kubernetes集群搭建与实践 (3讲)
10 | Kubernetes一键部署利器:kubeadm
11 | 从0到1:搭建一个完整的Kubernetes集群
12 | 牛刀小试:我的第一个容器化应用
容器编排与Kubernetes作业管理 (15讲)
13 | 为什么我们需要Pod?
14 | 深入解析Pod对象(一):基本概念
15 | 深入解析Pod对象(二):使用进阶
16 | 编排其实很简单:谈谈“控制器”模型
17 | 经典PaaS的记忆:作业副本与水平扩展
18 | 深入理解StatefulSet(一):拓扑状态
19 | 深入理解StatefulSet(二):存储状态
20 | 深入理解StatefulSet(三):有状态应用实践
21 | 容器化守护进程的意义:DaemonSet
22 | 撬动离线业务:Job与CronJob
23 | 声明式API与Kubernetes编程范式
24 | 深入解析声明式API(一):API对象的奥秘
25 | 深入解析声明式API(二):编写自定义控制器
26 | 基于角色的权限控制:RBAC
27 | 聪明的微创新:Operator工作原理解读
Kubernetes容器持久化存储 (4讲)
28 | PV、PVC、StorageClass,这些到底在说啥?
29 | PV、PVC体系是不是多此一举?从本地持久化卷谈起
30 | 编写自己的存储插件:FlexVolume与CSI
31 | 容器存储实践:CSI插件编写指南
Kubernetes容器网络 (8讲)
32 | 浅谈容器网络
33 | 深入解析容器跨主机网络
34 | Kubernetes网络模型与CNI网络插件
35 | 解读Kubernetes三层网络方案
36 | 为什么说Kubernetes只有soft multi-tenancy?
37 | 找到容器不容易:Service、DNS与服务发现
38 | 从外界连通Service与Service调试“三板斧”
39 | 谈谈Service与Ingress
Kubernetes作业调度与资源管理 (5讲)
40 | Kubernetes的资源模型与资源管理
41 | 十字路口上的Kubernetes默认调度器
42 | Kubernetes默认调度器调度策略解析
43 | Kubernetes默认调度器的优先级与抢占机制
44 | Kubernetes GPU管理与Device Plugin机制
Kubernetes容器运行时 (3讲)
45 | 幕后英雄:SIG-Node与CRI
46 | 解读 CRI 与 容器运行时
47 | 绝不仅仅是安全:Kata Containers 与 gVisor
Kubernetes容器监控与日志 (3讲)
48 | Prometheus、Metrics Server与Kubernetes监控体系
49 | Custom Metrics: 让Auto Scaling不再“食之无味”
50 | 让日志无处可逃:容器日志收集与管理
再谈开源与社区 (1讲)
51 | 谈谈Kubernetes开源社区和未来走向
答疑文章 (1讲)
52 | 答疑:在问题中解决问题,在思考中产生思考
特别放送 (1讲)
特别放送 | 2019 年,容器技术生态会发生些什么?
结束语 (1讲)
结束语 | Kubernetes:赢开发者赢天下
特别放送 | 云原生应用管理系列 (1讲)
基于 Kubernetes 的云原生应用管理,到底应该怎么做?
深入剖析Kubernetes
登录|注册

22 | 撬动离线业务:Job与CronJob

张磊 2018-10-12
你好,我是张磊。今天我和你分享的主题是:撬动离线业务之 Job 与 CronJob。
在前面的几篇文章中,我和你详细分享了 Deployment、StatefulSet,以及 DaemonSet 这三个编排概念。你有没有发现它们的共同之处呢?
实际上,它们主要编排的对象,都是“在线业务”,即:Long Running Task(长作业)。比如,我在前面举例时常用的 Nginx、Tomcat,以及 MySQL 等等。这些应用一旦运行起来,除非出错或者停止,它的容器进程会一直保持在 Running 状态。
但是,有一类作业显然不满足这样的条件,这就是“离线业务”,或者叫作 Batch Job(计算业务)。这种业务在计算完成后就直接退出了,而此时如果你依然用 Deployment 来管理这种业务的话,就会发现 Pod 会在计算结束后退出,然后被 Deployment Controller 不断地重启;而像“滚动更新”这样的编排功能,更无从谈起了。
所以,早在 Borg 项目中,Google 就已经对作业进行了分类处理,提出了 LRS(Long Running Service)和 Batch Jobs 两种作业形态,对它们进行“分别管理”和“混合调度”。
不过,在 2015 年 Borg 论文刚刚发布的时候,Kubernetes 项目并不支持对 Batch Job 的管理。直到 v1.4 版本之后,社区才逐步设计出了一个用来描述离线业务的 API 对象,它的名字就是:Job。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《深入剖析Kubernetes》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(29)

  • 刘孟
    需要创建的 Pod 数目 = 最终需要的 Pod 数目 - 实际在 Running 状态 Pod 数目 - 已经成功退出的 Pod 数目 = 2 - 0 - 0= 2。而parallelism数量为4,2小于4,所以应该会创建2个。

    作者回复: 聪明宝宝

    2018-10-12
    1
    23
  • DJH
    说到pod的重新启动,我想再请教一个问题:假设我把deployment的restart policy设置成always,假设某个pod中的容器运行失败,那么是重新创建了一个新的pod,还是仅仅重启了pod里的容器?pod的名称和ip地址会变化吗?

    作者回复: restartpoliccy当然是针对容器。pod没有重启这个说法。至于ip,那跟用户容器没关系,那是infra container

    2018-10-12
    10
  • pain
    问个不相关的问题:configmap 更新,怎么做到不重启 pod 生效

    作者回复: 这得看应用咋写的。configmap volume里的内容已经就是自动更新的。但应用能做到监视文件的更新吗?

    2019-01-03
    7
  • pain
    job 执行结束,处于 completed 状态之后,还会占用系统资源吗,可以让它执行结束后自动退出吗

    作者回复: 需要删除掉,或者设置规则

    2019-01-03
    2
  • jssfy
    请问job成功结束后一直处于completed状态吗?需要手动清吗?

    作者回复: 对

    2018-11-25
    2
  • fangxuan
    从公式可以看出,启动的job的最大值由completion决定
    2018-11-23
    1
  • hochuenw
    老师请问kubeflow在哪一部分用到了第一种job的使用方法?他们不是自己写了tf-operator吗

    作者回复: 你说operator 管理的是啥呢?

    2018-11-04
    1
  • 大星星
    你好,磊哥,我想问下job运行后,会有字段controller-uid。这个东西和node节点有关系么,还是它只是用来标识job。job应该是调度器随便调度一个节点,执行job吧,谢谢。
    2018-10-20
    1
  • Nokiak8
    老师,请教一个问题,假如Job中定义的pod运行失败,比如有异常。pod就会接着新生成,这样带来的就是会有大量的pod 产生,如何解决这种问题?

    作者回复: 有个字段叫backofflimit

    2018-10-18
    1
  • silver
    Job的第三种方法中是不是需要有其他process最后去Kill这个Job,否则Job会在Pod退出后不断创建新的Pod?

    作者回复: 不需要的。completion没设置默认等于1,所以任何一个pod判断到队列为空退出进入succeed状态,Job controller就不会再创建新pod了。

    2018-10-14
    1
  • 参悟
    最近实践遇到的问题,盼请赐教,多套分支的开发,测试环境,是按一套k8s集群按命名空间分区,还是按多套集群,实践方案哪种更好,有何优缺点?如果按一套多空间,会有nodeport冲突的问题,比如数据库需要暴露稳定的端口,方便运维。

    作者回复: 多套集群。

    2018-10-12
    1
  • abc
    请问老师:miss的数目100是默认的吗?哪个参数可以修改呢

    作者回复: 这个是写死的

    2018-10-12
    1
  • frozen
    请教老师,cronjob每次启动执行都需要拉取镜像,而拉取镜像需要一定时间,这就会导致容器里的服务启动时间是对比cron表达式要延迟,这个不算问题的问题怎么解决
    2019-07-08
  • 每日都想上班
    cronjob可以每秒执行吗

    作者回复: 可以想一下linux cron 的语法支持秒么?

    2019-06-04
  • 单朋荣
    大神,我一直很喜欢你的课程。现在更新的也比较多了~能不能在以后的章节里讲讲自动伸缩控制HPA、VPA、CA的知识点,谢谢了。
    2018-11-26
  • jssfy
    请问这里的label必须成对出现吗?
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: process-item-$ITEM
      labels:
        jobgroup: jobexample
    spec:
      template:
        metadata:
          name: jobexample
          labels:
            jobgroup: jobexample

    作者回复: 不需要

    2018-11-25
  • georgesuper
    是不是Spark job,hadoop job,k8s job 底层原理都相似?

    作者回复: 这个差别可就太大了

    2018-10-20
  • kyleqian
    如果想模仿传统调度系统,比如执行1000个Job,是不是可以为Job指定资源需求,然后把并行度和完成度都设为1000,这样k8s调度时会不会调度尽可能多的Pod,直到集群资源耗尽(但此时可能只能运行300个Pod)。然后若有Pod退出,k8s自动再补上新的Pod,直到满足完成数。不知道是不是这样?如果是就能满足一个基本调度系统的需求了。

    作者回复: 1000个并行度没必要吧……

    2018-10-17
  • acmore
    Job里的Pod被抢占的时候,我觉得pod的containers exit code应该是未知,pod的状态应该是被抢占,当job看到pod的状态是被抢占,应该等着它被重新调度。因为pod被抢占,是外部的干预,用户的container 还没有退出。
    2018-10-14
  • 北卡
    第一次接触到k8s job这个概念,开心。
    2018-10-13
收起评论
29
返回
顶部