博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深入K8S Job(一):介绍
阅读量:6800 次
发布时间:2019-06-26

本文共 1728 字,大约阅读时间需要 5 分钟。

介绍

Kubernetes有两个概念跟job有关:

  • : 负责批量处理短暂的一次性任务,仅执行一次,并保证处理的一个或者多个Pod成功结束。
  • : 负责定时任务,在指定的时间周期运行指定的任务。

Job

Job用于批量处理短暂的一次性任务,并保证指定数量的Pod成功结束。

K8S支持以下几种方式:

  • 非并行Job:

    • 通常只运行一个Pod,Pod成功结束Job就退出。
  • 固定完成次数的并行Job:

    • 并发运行指定数量的Pod,直到指定数量的Pod成功,Job结束。
  • 带有工作队列的并行Job:

    • 用户可以指定并行的Pod数量,当任何Pod成功结束后,不会再创建新的Pod
    • 一旦有一个Pod成功结束,并且所有的Pods都结束了,该Job就成功结束。
    • 一旦有一个Pod成功结束,其他Pods都会准备退出。

Job Spec

完整Job字段可以参考。Job有几个主要参数配合用于指定完成次数,并发运行,错误重试等操作:

  • .spec.completions: 指定job需要成功运行Pods的次数。默认值: 1
  • .spec.parallelism: 指定job在任一时刻应该并发运行Pods的数量。默认值: 1
  • .spec.activeDeadlineSeconds: 指定job可运行的时间期限,超过时间还未结束,系统将会尝试进行终止。
  • .spec.backoffLimit: 指定job失败后进行重试的次数。默认是6次,每次失败后重试会有延迟时间,该时间是指数级增长,最长时间是6min。
已知问题 , .spec.template.spec.restartPolicy设置为”Onfailure”时,会与.spec.backoffLimit冲突,可以暂时将restartPolicy设置为”Never”进行规避。

注1: .spec.activeDeadlineSeconds要比.spec.backoffLimit优先级高,如果时间到了,但是backoffLimit还未到,该Job也会被强制停止。

Job模式

Job有几种典型的模式应用于不同的业务场景:

  • 基于Job模版进行扩展:

    • 需要先编写一个通用的Job模版,根据不同的参数生成多个Job json/yml文件用于Job的创建,可以使用相同的标签进行Job管理。
  • 按每个工作项目排列的队列:

    • 需要用户提前准备好一个消息队列服务,比如rabbitMQ,该服务是一个公共组件,每个工作项目可以往里塞任务消息。
    • 用户可以创建并行Job,需要能适用于该消息队列,然后从该消息队列中消费任务,并进行处理直到消息被处理完。
    • 该模式下,用户需要根据项目数量填写spec.completions, 并行数量.spec.parallelism可以根据实际情况填写。该模式下就是以所有的任务都成功完成了,job才会成功结束。
  • 可变任务数量的队列:

    • 需要用户提前准备好一个存储服务来保存工作队列,比如Redis。每个项目可以往该存储服务填充消息。
    • 用户可以启动适用于该工作队列的多个并行Job,进行消息处理。与前一个Rabbit消息队列的差异在于,每个Job任务是可以知道工作队列已经空了,这时候便可以成功退出。
    • 该模式下,spec.completions需要置1, 并行数量.spec.parallelism可以根据实际情况填写。只要其中有一个任务成功完成,该Job就会成功结束。
  • 普通的静态任务

CronJob

cronJob是基于时间进行任务的定时管理:

  • 在特定的时间点运行任务
  • 反复在指定的时间点运行任务:比如定时进行数据库备份,定时发送电子邮件等等。

CronJob Spec

完整的spec字段,可以参考,介绍几个主要的字段:

  • .spec.schedule: 指定任务运行周期,具体格式参考
  • .spec.startingDeadlineSeconds: 指定任务运行的截止时间
  • .spec.concurrencyPolicy: 指定任务的并发策略,参数支持Allow、Forbid和Replace。
  • .spec.jobTemplate: 指定需要运行的任务,格式同。所以其实cronJob是基于Job进行实现。

参考资料

转载地址:http://tnywl.baihongyu.com/

你可能感兴趣的文章
《圣殿祭司的ASP.NET4.0专家技术手册》----1-7 HTML5与CSS3的支持
查看>>
数据结构之链表
查看>>
八年了必须放手了,我不是你妈妈
查看>>
cmd如何实现快速粘贴复制
查看>>
《Hadoop海量数据处理:技术详解与项目实战(第2版)》一1.2 Hadoop和大数据
查看>>
精通Python网络爬虫:核心技术、框架与项目实战.3.4 网页分析算法
查看>>
ROS机器人程序设计(原书第2版)2.4.6 如何使用主题与节点交互
查看>>
Eric S. Raymond 五部曲
查看>>
《Ansible权威指南 》一2.7 本章小结
查看>>
《iOS编程指南》——2.4节安装iOS SDK
查看>>
《Java 2D游戏编程入门》—— 2.3 处理鼠标输入
查看>>
Comparing Mongo DB and Couch DB
查看>>
市值登顶亚洲后,马云对话全球投资者:与未来相比阿里还是个baby
查看>>
《配置管理最佳实践》——1.6 工具的选择
查看>>
前端工程师如何快速的开发一个微信JSSDK应用
查看>>
Apache Spark源码走读(九)如何进行代码跟读&使用Intellij idea调试Spark源码
查看>>
【好书试读】数据有度:场景时代的内容玩法
查看>>
mysql 主从设计
查看>>
mybatis使用数组批量删除
查看>>
npm scripts 使用指南
查看>>