如何在 kubernetes yaml 文件中的同一个作业中指定两个 pods?

How to specify two pods in the same job in a kubernetes yaml file?

我正在尝试做一些简单的事情,只需在一个作业中创建两个 pods。我在这里查看文档:https://kubernetes.io/docs/concepts/workloads/controllers/job/#single-job-starts-controller-pod

虽然文档讨论了并行化,但并未提供太多示例。一个 pod 的唯一示例如下:

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

为了创建两个 pods 我尝试了这个:

apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
      - name: pi1
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
    spec:
      containers:
      - name: pi2
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4

但这并没有让我得到两个 pods,相反,一个 pod 中似乎只有第二个容器 运行。

我不清楚我是如何找到工作来启动多个 pods 的。我的 pods 不需要 运行 在同一台机器上,但他们每个人都需要设置一个唯一的环境变量,这样 pods 就知道要做什么工作。该工作以令人尴尬的并行方式划分,并且固定数量 pods(本例中为 2)。

同一个作业中不能有两个不同的 pod 模板。来自文档 here

具有工作队列的并行作业:

  • 不指定.spec.completions,默认为.spec.parallelism.

  • Pods 必须相互协调或外部服务才能 确定每个人应该做什么。例如,一个 Pod 可能会获取一个 工作队列中最多 N 项的批处理 .

  • 每个 Pod 都能够独立地确定是否所有 它的同行已经完成,因此整个工作已经完成。什么时候 作业中的 Pod 成功终止,没有创建新的 Pods。

  • 一旦至少一个 Pod 成功终止并且所有 Pods 终止,则作业成功完成。

  • 一旦任何 Pod 成功退出,其他 Pod 应该仍然存在 为此任务做任何工作或编写任何输出。他们都应该 正在退出。

对于工作队列作业,您必须离开

.spec.completions

取消设置,然后设置

.spec.parallelism

为非负整数。