K8s新手系列之Job资源

概述

官方文档:https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/job/

Job 表示一次性任务,运行完成后就会停止。

Job 会创建一个或者多个 Pod,并将继续重试 Pod 的执行,直到指定数量的 Pod 成功终止。 随着 Pod 成功结束,Job 跟踪记录成功完成的 Pod 个数。 当数量达到指定的成功个数阈值时,任务(即 Job)结束。 删除 Job 的操作会清除所创建的全部 Pod。 挂起 Job 的操作会删除 Job 的所有活跃 Pod,直到 Job 被再次恢复执行。

Job,主要用于负责批量处理(一次要处理指定数量任务)短暂的一次性(每个任务仅运行一次就结束)任务。Job特点如下:

  • 当Job创建的pod执行成功结束时,Job将记录成功结束的pod数量
  • 当成功结束的pod达到指定的数量时,Job将完成执行
  • 说白了就是一次性任务,Pod运行结束后,就终止运行。

Job的核心特性

任务导向

  • 确保一个或多个 Pod 成功执行指定任务,任务完成后 Pod 自动终止。
  • 适用于需要确定性结果的场景(如数据备份、报表生成)。

多种完成策略

  • 单 Pod 任务:创建单个 Pod 执行任务,成功即结束(默认策略)。
  • 并行任务:支持并行运行多个 Pod,可通过参数配置完成任务的 Pod 数量(如 completions 指定总成功次数,parallelism 指定并行度)。

故障处理

  • 自动重试失败的 Pod(可通过 backoffLimit 设置最大重试次数,默认 6 次)。
  • 任务成功完成后,Pod 不会重启。

Job的资源清单文件

apiVersion: batch/v1
kind: Job
metadata:
  name: data-processing-job  # Job名称,需符合K8s命名规范
  namespace: default         # 命名空间
  labels:
    app: data-processor
    env: production
  annotations:
    description: "并行处理数据的批处理任务"
spec:
  completions: 10            # 任务需要成功完成的总次数(默认为1)
  parallelism: 3             # 并行运行的Pod数量(默认为1)
  backoffLimit: 4            # 失败Pod的重试次数上限(默认为6)
  activeDeadlineSeconds: 3600 # 任务的最大运行时间(秒),超时则终止
  ttlSecondsAfterFinished: 86400 # 任务完成后保留资源的时间(秒),需K8s 1.12+
  manualSelector: false      # 是否允许手动管理Pod(默认为false)
  selector:
    matchLabels:
      job-name: data-processing-job # Pod标签选择器
  template:
    metadata:
      labels:
        job-name: data-processing-job # Pod标签,需与selector匹配
    spec:
      restartPolicy: Never  # 容器失败时的重启策略:Never或OnFailure
      containers:
      - name: data-processor
        image: my-data-processor:v1.2.3  # 替换为实际镜像

Job实战案例

[root@master ~/job]# cat job-1.yaml 
apiVersion: batch/v1
kind: Job
metadata:
  name: pi-job
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4

# 查看job
[root@master ~/job]# kubectl get jobs -o wide
NAME     COMPLETIONS   DURATION   AGE     CONTAINERS   IMAGES   SELECTOR
pi-job   1/1           3m2s       6m28s   pi           perl     controller-uid=9dcb16bf-aa3b-4e50-b711-df2f3e68795b

# 查看详细信息
[root@master ~/job]# kubectl describe job pi-job
Name:             pi-job
Namespace:        default
Selector:         controller-uid=9dcb16bf-aa3b-4e50-b711-df2f3e68795b
Labels:           controller-uid=9dcb16bf-aa3b-4e50-b711-df2f3e68795b
                  job-name=pi-job
Annotations:      batch.kubernetes.io/job-tracking: 
Parallelism:      1
Completions:      1
Completion Mode:  NonIndexed
Start Time:       Fri, 30 May 2025 16:30:56 +0800
Completed At:     Fri, 30 May 2025 16:33:58 +0800
Duration:         3m2s
Pods Statuses:    0 Active (0 Ready) / 1 Succeeded / 0 Failed
Pod Template:
  Labels:  controller-uid=9dcb16bf-aa3b-4e50-b711-df2f3e68795b
           job-name=pi-job
  Containers:
   pi:
    Image:      perl
    Port:       <none>
    Host Port:  <none>
    Command:
      perl
      -Mbignum=bpi
      -wle
      print bpi(2000)
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Events:
  Type    Reason            Age    From            Message
  ----    ------            ----   ----            -------
  Normal  SuccessfulCreate  7m     job-controller  Created pod: pi-job-ldm8x
  Normal  Completed         3m58s  job-controller  Job completed

查看一下pod,当pod执行完之后,状态是Completed

[root@master ~/job]# kubectl get po
NAME           READY   STATUS      RESTARTS   AGE
pi-job-ldm8x   0/1     Completed   0          7m40s
posted @ 2025-05-30 16:39  huangSir-devops  阅读(71)  评论(0)    收藏  举报
作者:你的名字
出处:你的博客链接
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。