任务

Job 会创建一个或者多个 Pods,并确保指定数量的 Pods 成功终止。 随着 Pods 成功结束,Job 跟踪记录成功完成的 Pods 个数。 当数量达到指定的成功个数阈值时,任务(即 Job)结束。 删除 Job 的操作会清除所创建的全部 Pods。

一种简单的使用场景下,你会创建一个 Job 对象以便以一种可靠的方式运行某 Pod 直到完成。 当第一个 Pod 失败或者被删除(比如因为节点硬件失效或者重启)时,Job 对象会启动一个新的 Pod。你也可以使用 Job 以并行的方式运行多个 Pod。

下面是在 KubeSphere 中的一个 Job 配置示例。它负责计算 π 到小数点后 2000 位,并将结果打印出来。

前提条件

  • 您需要创建一个工作区,一个项目和一个帐户(project-regular)。 如果尚未准备好,请参考创建工作区,项目,帐户和角色
  • 您需要先使用project-admin帐户登录,然后邀请 project-regular加入相应的项目。 如果尚未准备好,请首先邀请成员

创建任务

第一步:打开工作台

以常规项目身份登录控制台。 访问应用负载,然后单击任务, 单击创建

create-job

第二步:输入基本信息

输入基本信息。 请参考下图作为示例。

  • 名称:任务(Job)的名称,也是唯一的标识符。
  • 别名:任务(Job)的别名,使资源易于识别。
  • 描述信息:任务(Job)的描述,简要介绍了作业。

job-create-basic-info

第三步: 任务设置(可选)

您可以按照以下步骤在此步骤中设置值,或单击下一步以使用默认值。 有关每个字段的详细说明,请参见下表。

job-create-job-settings

名称定义描述信息
最大重试次数spec.backoffLimit设置为视 Job 为失败之前的重试次数。 失效回退的限制值默认为 6
完成数spec.completions设置完成数时,Job 控制器所创建的每个 Pod 使用完全相同的 <code>spec</code>。 这意味着任务的所有 Pod 都有相同的命令行,都使用相同的镜像和数据卷,甚至连 环境变量都(几乎)相同。 这些模式是让每个 Pod 执行不同工作的几种不同形式。有关更多信息,请参见 Jobs.
并行数spec.parallelism并行性请求(.spec.parallelism)可以设置为任何非负整数。 如果未设置,则默认为 1。 如果设置为 0,则 Job 相当于启动之后便被暂停,直到此值被增加。 有关更多信息,请参见 Jobs.
退出超时时限(单位:秒)spec.activeDeadlineSeconds终止 Job 可以设置一个活跃期限。 你可以为 Job 的 .spec.activeDeadlineSeconds 设置一个秒数值。 该值适用于 Job 的整个生命期,无论 Job 创建了多少个 Pod。 一旦 Job 运行时间达到 activeDeadlineSeconds 秒,其所有运行中的 Pod 都会被终止,并且 Job 的状态更新为 type: Failedreason: DeadlineExceeded

第四步: 设置镜像

  1. 重启策略选择从不。 当任务未完成时,您只能为重启策略指定从不OnFailure

    • 如果将重新启动策略设置为从不,则当 Pod 发生故障时,任务将创建一个新 Pod,并且失败的 Pod 不会消失。

    • 如果将重新启动策略设置为 OnFailure,则任务将在 Pod 发生故障时在内部重新启动容器,而不是创建新的 Pod。

    job-container-settings

  2. 点击添加容器镜像,它将引导您进入添加容器页面。 在图片搜索栏中输入 perl ,然后按 Return 键。

    add-container-image-job

  3. 在同一页面上,向下滚动到启动命令。 在计算 pi 到 2000 位数的框中输入以下命令,然后打印出来。 单击右下角的,然后选择下一步以继续。

    1. perl,-Mbignum=bpi,-wle,print bpi(2000)

    start-command-job

    备注

    有关设置图像的更多信息,请参见容器镜像设置

第五步: 检查任务清单(可选)

  1. 启用右上角的编辑模式,以显示任务的清单文件。 您可以看到所有值都是根据先前步骤中指定的值设置的。

    1. apiVersion: batch/v1
    2. kind: Job
    3. metadata:
    4. namespace: cc
    5. labels:
    6. app: job-test-1
    7. name: job-test-1
    8. annotations:
    9. kubesphere.io/alias-name: Test
    10. kubesphere.io/description: A job test
    11. spec:
    12. template:
    13. metadata:
    14. labels:
    15. app: job-test-1
    16. annotations:
    17. kubesphere.io/containerSecrets: null
    18. spec:
    19. containers:
    20. - name: container-xv4p2o
    21. imagePullPolicy: IfNotPresent
    22. image: perl
    23. command:
    24. - perl
    25. - '-Mbignum=bpi'
    26. - '-wle'
    27. - print bpi(2000)
    28. restartPolicy: Never
    29. serviceAccount: default
    30. initContainers: []
    31. volumes: []
    32. imagePullSecrets: null
    33. backoffLimit: 5
    34. parallelism: 2
    35. completions: 4
    36. activeDeadlineSeconds: 300
  2. 您可以直接在清单中进行调整,然后单击创建或禁用编辑模式,然后返回创建任务页面。

    备注

    您可以跳过本教程的安装卷高级设置。 有关更多信息,请参见 Pod 卷Deployment 高级设置

第六步:检查结果

  1. 高级设置的最后一步中,单击创建以完成。 如果创建成功,新项目将添加到任务列表中。

    job-list-new

  2. 单击此任务,然后转到执行记录选项卡,您可以在其中查看每个执行记录的信息。 由于在步骤 3 中完成次数设置 4,因此完成了四个 Pod。

    execution-record

    提示

    如果任务失败,则可以重新运行该任务,其原因显示在消息下。

  3. 资源状态中,您可以检查 Pod 状态。 每次将 Parallelism 设置为 2 时,都会创建两个 Pod。单击右侧的箭头,然后检查容器日志,如下所示,该日志显示了预期的计算结果。

    container-log

    container-log-check

    提示

    • 资源状态中,Pod 列表提供了 Pod 的详细信息(例如创建时间,节点,Pod IP 和监视数据)。
    • 您可以通过单击 Pod 来查看容器信息。
    • 单击容器日志图标以查看容器的输出日志。
    • 您可以通过单击 Pod 名称查看 Pod 详细信息页面。

任务操作

在任务详细信息页面上,您可以在创建任务后对其进行管理。

  • 编辑信息:编辑除名称以外的基本信息。
  • 重新运行任务:重新运行任务,Pod 将重新启动,并生成新的执行记录。
  • 查看配置文件:以 YAML 格式查看任务的规范。
  • 删除:删除任务并返回到任务列表页面。

job-operation