k8s-job简介和访问

2次阅读

共计 2253 个字符,预计需要花费 6 分钟才能阅读完成。

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
正文完
 0