Job 负载资源会创建一个或者多个 Pod
,并将继续重试 Pod
的执行,直到指定数量的 Pod
成功终止
Pod
执行成功,Job 跟踪记录成功完成的 Pod
个数Pod
Pod
,直到 Job 被再次恢复执行Pod
来自官方的示例
####job-demo.yaml
apiVersion: batch/v1
kind: Job
metadata:name: job-demo
spec:template:spec:containers:- name: job-demoimage: perl:5.34.0command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]restartPolicy: NeverbackoffLimit: 4
运行一下
kubectl apply -f job.yaml
查看一下
看一下日志
还是老办法,官网说明加 kubectl explain job
基础的内容
##这部分资源基本都是通用的
apiVersion: batch/v1
kind: Job
metadata:name: job-demonamspace: test
spec 规约
job.spec
描述了任务执行的具体情况信息
FIELDS:activeDeadlineSeconds
## 系统尝试终止任务之前任务可以持续活跃的持续时间(秒),时间长度是相对于 startTime 的; 字段值必须为正整数。如果任务被挂起(在创建期间或因更新而挂起), 则当任务再次恢复时,此计时器会被停止并重置backoffLimit
## 指定标记此任务失败之前的重试次数。默认值为 6。completionMode
## 指定如何跟踪 Pod 完成情况。它可以是 NonIndexed (默认) 或者 Indexed。
## NonIndexed 表示当有 .spec.completions 个成功完成的 Pod 时,认为 Job 完成。每个 Pod 完成都是彼此同源的。
## Indexed 意味着 Job 的各个 Pod 会获得对应的完成索引值,从 0 到(.spec.completions - 1),可在注解 "batch.kubernetes.io/job-completion-index" 中找到。当每个索引都对应有一个成功完成的 Pod 时, 该任务被认为是完成的。 当值为 Indexed 时,必须指定 .spec.completions 并且 .spec.parallelism 必须小于或等于 10^5。 此外,Pod 名称采用 $(job-name)-$(index)-$(random-string) 的形式,Pod 主机名采用 $(job-name)-$(index) 的形式。completions
## 指定任务应该运行并预期成功完成的 Pod 个数。设置为 nil 意味着任何 Pod 的成功都标识着所有 Pod 的成功, 并允许 parallelism 设置为任何正值。设置为 1 意味着并行性被限制为 1,并且该 Pod 的成功标志着任务的成功。manualSelector
## manualSelector 控制 Pod 标签和 Pod 选择器的生成。parallelism
## 指定任务应在任何给定时刻预期运行的 Pod 个数上限。 selector
Pod 选择算符
字段 .spec.selector
是可选的。在绝大多数场合,你都不需要为其赋值
Job 的并行执行
.spec.completions
字段设置为非 0 的正数值.spec.completions
之间的每个整数都存在 一个成功的 Pod 时,Job 被视为完成spec.completions
,默认值为 .spec.parallelism
这个感觉理解还不够
spec.completions
和 spec.parallelism
。 这两个属性都不设置时,均取默认值 1。.spec.completions
为所需要的完成个数。 你可以设置 .spec.parallelism
,也可以不设置。其默认值为 1。.spec.completions
,但要将.spec.parallelism
设置为一个非负整数。准备一个示例文件
###job-demo.yaml
apiVersion: batch/v1
kind: Job
metadata:name: job-demonamespace: defaultlabels:app: job-demo
spec:template:metadata:name: job-demolabels:app: job-demospec:restartPolicy: Nevercontainers:- name: job-demoimage: nginx:1.23
尝试运行一下
重新修改一下这个文件
###job-demo.yaml
apiVersion: batch/v1
kind: Job
metadata:name: job-demonamespace: defaultlabels:app: job-demo
spec:template:metadata:name: job-demolabels:app: job-demospec:restartPolicy: Nevercontainers:- name: job-demoimage: nginx:1.23command: ["/bin/sh", "-c","echo hello world;sleep 30;"]
重新运行一下,跟踪状态
发现 Job 完成以后,Pod
依然存在,完成的 Job 通常不需要留存在系统中,在系统中一直保留它们会给 API 服务器带来额外的压力
Complete
或 Failed
)的另一种方式是使用由 TTL 控制器 所提供 的 TTL 机制。 通过设置 Job 的 .spec.ttlSecondsAfterFinished
字段,可以让该控制器清理掉 已结束的资源。如果该字段设置为 0
,Job 在结束之后立即成为可被自动删除的对象。 如果该字段没有设置,Job 不会在结束之后被 TTL 控制器自动清除。###job-demo.yaml
apiVersion: batch/v1
kind: Job
metadata:name: job-demonamespace: defaultlabels:app: job-demo
spec:ttlSecondsAfterFinished: 20 ##任务完成以后,20s自动清理Podtemplate:metadata:name: job-demolabels:app: job-demospec:restartPolicy: Nevercontainers:- name: job-demoimage: nginx:1.23command: ["/bin/sh", "-c","echo hello world;sleep 30;"]
参考官网:https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/job/
最近感觉学习有点慢,工作事情太多了,感觉没啥子动力了