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 计数

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐