k8s job简介和访问

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

你可能感兴趣的:(kubernetes,docker)