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
本文来自博客园,作者:huangSir-devops,转载请注明原文链接:https://www.cnblogs.com/huangSir-devops/p/18904493,微信Vac666666,欢迎交流

浙公网安备 33010602011771号