K8s新手系列之Job资源
<h2 id="概述">概述</h2><p>官方文档:https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/job/</p>
<p>Job 表示一次性任务,运行完成后就会停止。</p>
<p>Job 会创建一个或者多个 Pod,并将继续重试 Pod 的执行,直到指定数量的 Pod 成功终止。 随着 Pod 成功结束,Job 跟踪记录成功完成的 Pod 个数。 当数量达到指定的成功个数阈值时,任务(即 Job)结束。 删除 Job 的操作会清除所创建的全部 Pod。 挂起 Job 的操作会删除 Job 的所有活跃 Pod,直到 Job 被再次恢复执行。</p>
<p>Job,主要用于负责批量处理(一次要处理指定数量任务)短暂的一次性(每个任务仅运行一次就结束)任务。Job特点如下:</p>
<ul>
<li>当Job创建的pod执行成功结束时,Job将记录成功结束的pod数量</li>
<li>当成功结束的pod达到指定的数量时,Job将完成执行</li>
<li>说白了就是一次性任务,Pod运行结束后,就终止运行。</li>
</ul>
<h2 id="job的核心特性">Job的核心特性</h2>
<h3 id="任务导向">任务导向</h3>
<ul>
<li>确保一个或多个 Pod 成功执行指定任务,任务完成后 Pod 自动终止。</li>
<li>适用于需要确定性结果的场景(如数据备份、报表生成)。</li>
</ul>
<h3 id="多种完成策略">多种完成策略</h3>
<ul>
<li>单 Pod 任务:创建单个 Pod 执行任务,成功即结束(默认策略)。</li>
<li>并行任务:支持并行运行多个 Pod,可通过参数配置完成任务的 Pod 数量(如 completions 指定总成功次数,parallelism 指定并行度)。</li>
</ul>
<h3 id="故障处理">故障处理</h3>
<ul>
<li>自动重试失败的 Pod(可通过 backoffLimit 设置最大重试次数,默认 6 次)。</li>
<li>任务成功完成后,Pod 不会重启。</li>
</ul>
<h2 id="job的资源清单文件">Job的资源清单文件</h2>
<pre><code>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# 替换为实际镜像
</code></pre>
<h2 id="job实战案例">Job实战案例</h2>
<pre><code># 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
# 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
# 查看详细信息
# 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
---- ------ ---- ---- -------
NormalSuccessfulCreate7m job-controllerCreated pod: pi-job-ldm8x
NormalCompleted 3m58sjob-controllerJob completed
</code></pre>
<p>查看一下pod,当pod执行完之后,状态是Completed</p>
<pre><code># kubectl get po
NAME READY STATUS RESTARTS AGE
pi-job-ldm8x 0/1 Completed 0 7m40s
</code></pre>
</div>
<div id="MySignature" role="contentinfo">
<p>本文来自博客园,作者:huangSir-devops,转载请注明原文链接:https://www.cnblogs.com/huangSir-devops/p/18904493,微信Vac6666666,欢迎交流</p><br><br>
来源:https://www.cnblogs.com/huangSir-devops/p/18904493
頁:
[1]