K8S Jobs创建
fabric8代码创建Map<String, String> labels = new LinkedHashMap<>();labels.put(SPIDER_GROUP_ID, spiderGroupId);labels.put(APP_NAME, "job-spider-worker");//TODO 参考buildContainer,构建Deployment的容器参数
fabric8代码创建
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
backoffLimit: 4
Map<String, String> labels = new LinkedHashMap<>();
labels.put(SPIDER_GROUP_ID, spiderGroupId);
labels.put(APP_NAME, "job-spider-worker");
//TODO 参考buildContainer,构建Deployment的容器参数
Container container = buildContainer(new SpiderGroupPO());
Job job = new JobBuilder()
.withApiVersion("batch/v1")
.withNewMetadata()
.withName(spiderGroupId)
.withLabels(labels)
.endMetadata()
.withNewSpec()
//是否并行
.withCompletions(1)
.withParallelism(1)
//一旦 Job 运行时间达到 1小时,其所有运行中的 Pod 都会被终止
.withActiveDeadlineSeconds(60 * 60L)
//失效重试3次
.withBackoffLimit(3)
.withNewTemplate()
.withNewSpec()
.withContainers(container)
//重启策略Never 或 OnFailure
.withRestartPolicy("Never")
.endSpec()
.endTemplate()
.endSpec()
.build();
k8sClient.batch().jobs().inNamespace(namespace).createOrReplace(job);
//查看podList
PodList podList = k8sClient.pods().inNamespace(namespace).withLabel(APP_NAME, "job-spider-worker").list();
文档地址
https://kubernetes.io/zh/docs/concepts/workloads/controllers/job/
类型和参数
Job类型
- 非并行Job:通常创建一个Pod直至其成功结束。
- 固定结束次数的Job:设置.spec.completions,创建多个Pod,直到.spec.completions个Pod成功结束。
- 带有工作队列的并行Job:设置.spec.Parallelism但不设置.spec.completions,当所有Pod结束并且至少一个成功时,Job就认为是成功。
- 固定结束次数的并行Job:同时设置.spec.completions和.spec.Parallelism,多个Pod同时处理工作队列。
参数
.spec.completionMode 设置完成模式
- NonIndexed(默认值):当成功完成的 Pod 个数达到 .spec.completions 所 设值时认为 Job 已经完成。换言之,每个 Job 完成事件都是独立无关且同质的。 要注意的是,当 .spec.completions 取值为 null 时,Job 被隐式处理为 NonIndexed
- Indexed:Job 的 Pod 会获得对应的完成索引,取值为 0 到 .spec.completions-1
.spec.template.spec.restartPolicy 容器失效重启策略
- Never
- OnFailure
.spec.backoffLimit 回退失效策略
在有些情形下,你可能希望 Job 在经历若干次重试之后直接进入失败状态,因为这很 可能意味着遇到了配置错误。 为了实现这点,可以将 .spec.backoffLimit 设置为视 Job 为失败之前的重试次数。 失效回退的限制值默认为 6。 与 Job 相关的失效的 Pod 会被 Job 控制器重建,回退重试时间将会按指数增长 (从 10 秒、20 秒到 40 秒)最多至 6 分钟。 当 Job 的 Pod 被删除时,或者 Pod 成功时没有其它 Pod 处于失败状态,失效回退的次数也会被重置(为 0)
.spec.activeDeadlineSeconds
- 一旦 Job 运行时间达到 activeDeadlineSeconds 秒,其所有运行中的 Pod 都会被终止,并且 Job 的状态更新为 type: Failed 及 reason: DeadlineExceeded
- .spec.activeDeadlineSeconds 优先级高于其 .spec.backoffLimit 设置
.spec.ttlSecondsAfterFinished
TTL机制控制器,清理 Job 时,会级联式地删除 Job 对象
.spec.suspend
暂时挂起 Job 执行, 将 Job 的 .spec.suspend 字段更新为 true。 之后,当你希望恢复其执行时,将其更新为 false
Pod 以这种形式终止时,不会被记入 Job 的 completions 计数
更多推荐
所有评论(0)