如何在 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
为非负整数。
我正在尝试做一些简单的事情,只需在一个作业中创建两个 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
为非负整数。