【问题标题】:Which Kubernetes Object manages Job and CronJob workloads?哪个 Kubernetes 对象管理 Job 和 CronJob 工作负载?
【发布时间】:2021-09-04 19:20:14
【问题描述】:

所有作业和 CronJobs 最终都作为 Pod 运行。除了独立的 pod 之外,其他 pod 由部署/副本管理。但是对于 Job 和 CronJob,我看不到任何部署或 ReplicaSet,尽管 job/cronjob pod 具有与 RS 托管 POD 相同的命名法,例如 [deployment.replicaset-name]-XXX。

谁来管理这些工作负载?

【问题讨论】:

  • 你好@AdityaBhuyan。以下任何一个答案是否helped you

标签: kubernetes deployment jobs replicaset kubernetes-cronjob


【解决方案1】:

哪个 Kubernetes 对象管理 Job 和 CronJob 工作负载?

让我从Cronjob开始:

CronJob 在重复的计划中创建 Jobs

考虑到,cronjob 是一个相对较新的功能。它从 1.21 版(稳定版)开始可用。 更进一步:

Job 创建一个或多个 Pod,并将继续重试执行 Pod,直到指定数量的 Pod 成功终止。当 pod 成功完成时,作业会跟踪成功完成。当达到指定的成功完成次数时,任务(即 Job)就完成了。删除作业将清理它创建的 Pod。暂停 Job 将删除其活动 Pod,直到 Job 再次恢复。

这都是Job Controller管理的,Jonas提到的很好。

但是,如果您使用的是专用解决方案,例如GKE,你可以得到additional information

在 GKE 中,Job 是表示有限任务的控制器对象。 Jobs 与其他控制器对象的不同之处在于,Jobs 在任务运行到完成时对其进行管理,而不是管理正在进行的所需状态(例如正在运行的 Pod 的总数)。

在 GKE 中,有两种类型的作业:

  • 非并行作业:只创建一个 Pod 的作业(如果 Pod 终止不成功会重新创建),并在 Pod 终止成功时完成。
  • 具有完成计数的并行作业:当一定数量的 Pod 成功终止时完成的作业。您可以使用 completions 字段指定所需的完成次数。

另见:

【讨论】:

    【解决方案2】:

    Kubernetes 作业可能会失败,并且可能会安排一个新的 Pod 来运行该作业。这是由Job Controller 管理的:

    Job 控制器是 Kubernetes 内置控制器的一个示例。内置控制器通过与集群 API 服务器交互来管理状态。

    Job 是一种 Kubernetes 资源,它运行一个 Pod,或者可能是多个 Pod,以执行一项任务然后停止。

    (一旦调度,Pod 对象就会成为 kubelet 所需状态的一部分)。

    当 Job 控制器看到一个新任务时,它会确保在集群中的某个位置,一组 Node 上的 kubelet 正在运行正确数量的 Pod 来完成工作。 Job 控制器本身不运行任何 Pod 或容器。相反,Job 控制器告诉 API 服务器创建或删除 Pod。控制平面中的其他组件根据新信息进行操作(有新的 Pod 需要调度和运行),最终工作完成。

    【讨论】:

      【解决方案3】:

      Job 就像你只运行一个 Pod,它不是由 Deployment/ReplicaSet 管理的。

      来自文档:

      一个 Job 创建一个或多个 Pod 并将继续重试执行 直到指定数量的 Pod 成功终止。

      https://kubernetes.io/docs/concepts/workloads/controllers/job/

      对于 CronJob 也是如此,它只是在定义的时间执行作业。

      【讨论】:

        猜你喜欢
        • 2018-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-08
        • 2021-07-05
        • 2011-08-28
        • 2021-06-08
        • 2019-11-28
        相关资源
        最近更新 更多