k8s job简介和访问

前赴后继
• 阅读 2780

job 描述

job是k8s提供的一种任务类型,负责批量处理短暂的一次性任务 (short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束

job的三种使用场景

  • 非并行任务:只启一个pod,pod成功,job正常结束
  • 并行任务同时指定成功个数:.spec.completions为指定成功个数,可以指定也可以不指定.spec.parallelism(指定>1,会有多个任务并行运行)。当成功个数达到.spec.completions,任务结束。
  • 有工作队列的并行任务:.spec.completions默认为1,.spec.parallelism为大于0的整数。此时并行启动多个pod,只要有一个成功,任务结束,所有pod结束

参数

completions

指定job启动的任务(如:pod)成功运行completions次,job才算成功结束

parallelism

指定job同时运行的任务(如:pod)个数,Parallelism默认为1,如果设置为0,则job会暂定

backoffLimit

job建议指定pod的重启策略为never,如:.spec.template.spec.restartPolicy = "Never",然后通过job的backoffLimit来指定失败重试次数

在达到backoffLimit指定的次数后,job状态设置为failed(默认为6次),重试时间采用指数规避(10s, 20s, 40s …),并限制在6分钟内

activeDeadlineSeconds

通过指定job存活时间,来结束一个job。当job运行时间达到activeDeadlineSeconds指定的时间后,job会停止由它启动的所有任务(如:pod),并设置job的状态为failed, reason: DeadlineExceeded

activeDeadlineSeconds的优先级高于backoffLimit

apiVersion: batch/v1
kind: Job
metadata:
  name: pi-with-timeout
spec:
  backoffLimit: 5
  activeDeadlineSeconds: 100
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never

ttlSecondsAfterFinished

默认情况下,job异常或者成功结束后,包括job启动的任务(pod),都不会被清理掉,因为你可以依据保存的job和pod,查看状态、日志,以及调试等。这些用户可以手动删除,用户手动删除job,job controller会级联删除对应的pod

除了手动删除,通过指定参数ttlSecondsAfterFinished也可以实现自动删除job,以及级联的资源,如:pod。如果设置为0,job会被立即删除。如果不指定,job则不会被删除

apiVersion: batch/v1
kind: Job
metadata:
  name: pi-with-ttl
spec:
  ttlSecondsAfterFinished: 100
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never

域名访问

通过job的service或者pod域名来访问job的任务

yaml

需要指定hostname,以及subdomain,subdomain和svc name保持一致。

apiVersion: v1
kind: Service
metadata:
  name: pi-sub
spec:
  selector:
    job-name: pi
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376
---
apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      hostname: pi
      subdomain: pi-sub
      containers:
      - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(10000)"]
      restartPolicy: Never
  backoffLimit: 4

访问

[root@master01 job]# nslookup pi-sub.default.svc.cluster.local 10.96.0.10
Server:        10.96.0.10
Address:    10.96.0.10#53

Name:    pi-sub.default.svc.cluster.local
Address: 10.109.132.186

[root@master01 job]# 
[root@master01 job]# 
[root@master01 job]# nslookup pi.pi-sub.default.svc.cluster.local 10.96.0.10
Server:        10.96.0.10
Address:    10.96.0.10#53

Name:    pi.pi-sub.default.svc.cluster.local
Address: 100.64.0.80
点赞
收藏
评论区
推荐文章
Kent_Sun Kent_Sun
4年前
使用jsp直接执行定时任务
使用jsp直接执行定时任务servicehtml<%@pageimport"com.leasing.emogo.framework.util.ApplicationContextUtils"%<%@pageimport"job.dsc.GetInfoByAssetPackageJob"%<%@pagecontentType
Stella981 Stella981
3年前
Elastic
JobScheduler是elasticjob作业调度的关键类,也是起始类,在包com.dangdang.ddframe.job.lite.api下。调度任务的执行需要包含两大步骤:任务的配置和任务的注册。JobScheduler的构造函数除了任务配置和注册相关信息之外还有事件和监听。后两者是elasticjob的扩展功能,我们后续再介绍。任务的配置
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
3年前
kubernetes资源对象
podPod是K8S的最小操作单元,一个Pod可以由一个或多个容器组成;整个K8S系统都是围绕着Pod展开的,比如如何部署运行Pod、如何保证Pod的数量、如何访问Pod等。特点Pod是能够被创建、调度和管理的最小单元;每个Pod都有一个独立的IP;一个Pod由一个或多个容器构成,并共享命名空间和共享存储等;Pod所有容
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
3年前
Eclipse RCP中多线程Job使用
在我们基于Eclipse的Java程序中,我们有很多种方式提供多任务的实现。熟悉Java的朋友立即会想到Java的Thread类,这是Java中使用最多的一个实现多任务的类。Eclipse平台为多任务处理提供了自己的API,那就是Job以及UIJob。Eclipse中的Job是对JavaThread的一个封装,为我们实现多任务提供了更方便的接口。以下是
Stella981 Stella981
3年前
Spring Boot @Scheduled 执行两遍
使用springcloud\Dalston.SR1\版本开发定时job时,发现job执行了两次;下面日志里发现一个job被一个任务调度池(taskscheduler)里的两个worker(taskscheduler1和taskscheduler2)执行,很奇怪;2018022314:28:30.001task
Easter79 Easter79
3年前
Spring的业务层和Web层
任务调度  quartz框架  quartz框架实现了Spring的任务调度,用户可以随意的定义触发器调度时间表,并将触发器和任务进行映射。quartz通过调度器、触发器和任务实现任务调度。  Job:主要用来设计任务实现的逻辑,并且只有一个方法execute。  JobDetail:主要用来通过newInst
Stella981 Stella981
3年前
ES6 Promise
Promisepromise是异步编程的一种解决方案1什么是异步?异步模式,每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的。"异步模式"非常重要。在浏
Stella981 Stella981
3年前
Quartz.NET总结(四)Quartz 远程调度
转载自:http://www.cnblogs.com/zhangweizhong/p/5552558.html 前面篇已经介绍了Quartz.NET的配置,使用和Cron表达式表达式的写法。基本上后台的定时任务的定时执行已经完成,并能正确的按照执行计划,执行相关的job。  然后,如果任务需要更新,停止某个任务呢?总不能上服务器去改相关
Quartz核心原理之架构及基本元素介绍 | 京东物流技术团队
1什么是QuartzQuartz是一个作业调度框架,它可以与J2EE和J2SE应用相结合,也可以单独使用。它能够创建多个甚至数万个jobs这样复杂的程序,jobs可以做成标准的java组件或EJBS。Quartz很容易上手,创建一个任务仅需实现Job接口,