k8s中的Pod和Job资源之间有什么区别?

时间:2020-01-12 16:09:24

标签: kubernetes

Pod和Job资源相同吗?

apiVersion: v1
kind: Pod
metadata:
  name: ""
  labels:

apiVersion: v1
kind: Job
metadata:
  name: ""
  labels:

我认为Job仍会创建一个广告连播。只是想知道何时使用一个而不是另一个。

3 个答案:

答案 0 :(得分:5)

Pod是在Kubernetes上表达可运行过程的基本单元。

Job是更高级别的抽象,它使用pod来运行可完成的任务

您可能正在考虑使用带有restartPolicy: Never的广告连播来运行可完成的任务。但是,如果发生节点故障,则由Job管理的该节点上的pod会被重新安排到其他节点,而不受管理的pod不会被安排。

Job还具有completionsparallelism之类的额外功能,可以使用它们运行多个实例。

答案 1 :(得分:1)

如果任务将完成,请使用Jobs(例如,将π计算为2000个位置并将其打印出来)。

在后台,乔布斯使用Pods进行计算。想象Job比Pods具有更高的抽象层次。

https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/

答案 2 :(得分:0)

豆荚

作为容器协调器,K8S用称为Pod的工作单元包装容器。

所有其他资源和组件(不包括Kubelet)都是K8S模块化体系结构的一部分,旨在为Pod提供不同的功能,例如:调度,扩展,内部和外部网络,处理故障,管理cpu和内存等

(*)Kubelet是与容器运行时交互的唯一组件。

您可以说Pod将一个或多个容器包装在其下,就像VM中正在运行多个进程一样。如果要从外部访问其中之一,则必须引用主机的IP和进程的端口(容器)。

工作-从控制器端

(*)如果有点高级-只需查看下面的yaml示例,然后跳到下一部分。

Job资源是一组资源的一部分,该资源负责直接引用Pod的状态(请参阅最后对 的评论)。

因此,与ReplicaSet / Deployments,StatefulSet和CronJob等其他资源一起,它们具有专用的Controller,它们在控制平面中无限循环地运行,并监视对由相应资源类型创建的Pod的更改
因此,如果pod是由Job资源创建的,则:

apiVersion: batch/v1
kind: Job
metadata:
  name: my-computational-job
spec:
  template:
    metadata:
      labels:
         name: my-computational-job
    spec:
      containers:
      - name: my-image
        image: some-image
      restartPolicy: Never #<---- We will discuss this below

适用于此类型资源的每项更改都将由Job控制器检查,该控制器查看资源的新期望状态(或换句话说,Pods为新状态)并确定当前状态是什么需要执行的操作-告诉K8S删除先前的Pod并创建新的Pod(例如在更改图像或标签选择器的情况下),或保持Pod的当前状态并仅更改与之相关的其他配置他们。

工作-从资源方面

那么,这种资源有什么特别之处?
我们看到,像其他资源一样,它通过相应的Controller管理Pods状态。

这里的重点是如何配置这些Pod?
也可以称为:
我应该使用哪种类型的应用程序使用此资源?

答案是:需要执行专门任务并随后终止的应用程序。

为此,作业资源应支持与以下类型任务相关的配置:

1)重新启动策略-如果我们查看上面yaml中的restartPolicy字段-我们可以指定诸如onFailureNever之类的值,但不能指定{{1} },因为它将与应使用此资源运行的任务类型相反。
here中了解更多信息。

2)顺序或并行运行多个Pod-就像我们在“副本集/部署”规范中有Always字段,该字段将指定K8S应缩放的Pod一样,Job资源具有不同的语法,还告诉K8S如何运行这些吊舱。

要运行多个作业,您需要在replicas字段中指定窗格的数量。这些作业默认情况下将一一运行。
为了并行运行它们,您需要在.spec.completions字段中指定要并行运行的pod数。

“作业”资源支持更多高级配置选项-请在Parallel execution for Jobs中阅读更多内容。

3)失败政策-如果在多次重试后我们需要使Job失败,则可以设置.spec.parallelism字段。
here中了解更多。


更多参考:
并行计算的模式-参见Job Patterns

基于一个通用模板运行多个作业-请参见Parallel Processing using Expansions


“作业-从控制器端”部分的评论:
很难说资源直接负责 的状态,因为在K8S中,体系结构的每个部分都具有特定的模块化作用-但是对于控制器而言,它离这一点不远因为他们安静很多。