运行 Kubernetes 作业
此页面展示了如何在启用了 Kueue 的 Kubernetes 集群中运行作业。
此页面的目标受众是 批处理用户。
开始之前
确保满足以下条件
下图显示了您将在本教程中交互的所有概念
0. 识别命名空间中可用的队列
运行以下命令,列出命名空间中可用的 LocalQueues
。
kubectl -n default get localqueues
# Or use the 'queues' alias.
kubectl -n default get queues
输出类似于以下内容
NAME CLUSTERQUEUE PENDING WORKLOADS
user-queue cluster-queue 3
ClusterQueue 定义队列的配额。
1. 定义作业
在 Kueue 中运行作业类似于 在没有 Kueue 的 Kubernetes 集群中运行作业。但是,您必须考虑以下区别
- 您应该在 挂起状态 下创建作业,因为 Kueue 将决定何时开始作业。
- 您必须设置要将作业提交到的队列。使用
kueue.x-k8s.io/queue-name
标签。 - 您应该包含每个作业 Pod 的资源请求。
这是一个包含三个 Pod 的作业示例,这些 Pod 仅休眠几秒钟。
apiVersion: batch/v1
kind: Job
metadata:
generateName: sample-job-
namespace: default
labels:
kueue.x-k8s.io/queue-name: user-queue
spec:
parallelism: 3
completions: 3
suspend: true
template:
spec:
containers:
- name: dummy-job
image: gcr.io/k8s-staging-perf-tests/sleep:v0.1.0
args: ["30s"]
resources:
requests:
cpu: 1
memory: "200Mi"
restartPolicy: Never
2. 运行作业
您可以使用以下命令运行作业
kubectl create -f sample-job.yaml
在内部,Kueue 将为此作业创建一个具有匹配名称的相应 工作负载。
kubectl -n default get workloads
输出类似于以下内容
NAME QUEUE RESERVED IN ADMITTED AGE
sample-job-sl4bm user-queue 1s
3.(可选)监控工作负载状态
您可以使用以下命令查看工作负载状态
kubectl -n default describe workload sample-job-sl4bm
如果 ClusterQueue 没有足够的配额来运行工作负载,输出将类似于以下内容
Name: sample-job-sl4bm
Namespace: default
Labels: <none>
Annotations: <none>
API Version: kueue.x-k8s.io/v1beta1
Kind: Workload
Metadata:
...
Spec:
...
Status:
Conditions:
Last Probe Time: 2022-03-28T19:43:03Z
Last Transition Time: 2022-03-28T19:43:03Z
Message: workload didn't fit
Reason: Pending
Status: False
Type: Admitted
Events: <none>
当 ClusterQueue 有足够的配额来运行工作负载时,它将允许工作负载。要查看工作负载是否已允许,请运行以下命令
kubectl -n default get workloads
输出类似于以下内容
NAME QUEUE RESERVED IN ADMITTED AGE
sample-job-sl4bm user-queue cluster-queue True 1s
要查看工作负载允许的事件,请运行以下命令
kubectl -n default describe workload sample-job-sl4bm
输出类似于以下内容
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Admitted 50s kueue-manager Admitted by ClusterQueue cluster-queue
要继续监控工作负载进度,您可以运行以下命令
kubectl -n default describe workload sample-job-sl4bm
工作负载运行完成后,输出类似于以下内容
...
Status:
Conditions:
...
Last Probe Time: 2022-03-28T19:43:37Z
Last Transition Time: 2022-03-28T19:43:37Z
Message: Job finished successfully
Reason: JobFinished
Status: True
Type: Finished
...
要查看有关作业状态的更多详细信息,请运行以下命令
kubectl -n default describe job sample-job-sl4bm
输出类似于以下内容
Name: sample-job-sl4bm
Namespace: default
...
Start Time: Mon, 28 Mar 2022 15:45:17 -0400
Completed At: Mon, 28 Mar 2022 15:45:49 -0400
Duration: 32s
Pods Statuses: 0 Active / 3 Succeeded / 0 Failed
Pod Template:
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Suspended 22m job-controller Job suspended
Normal CreatedWorkload 22m kueue-job-controller Created Workload: default/sample-job-sl4bm
Normal SuccessfulCreate 19m job-controller Created pod: sample-job-sl4bm-7bqld
Normal Started 19m kueue-job-controller Admitted by clusterQueue cluster-queue
Normal SuccessfulCreate 19m job-controller Created pod: sample-job-sl4bm-7jw4z
Normal SuccessfulCreate 19m job-controller Created pod: sample-job-sl4bm-m7wgm
Normal Resumed 19m job-controller Job resumed
Normal Completed 18m job-controller Job completed
由于事件的时间戳具有秒的分辨率,因此事件可能以与实际发生顺序略有不同的顺序列出。
部分允许
从 v0.4.0 版本开始,Kueue 为批处理用户提供了创建作业的功能,这些作业理想情况下将以并行度 P0
运行,但如果作业不符合可用配额,则可以接受较小的并行度 Pn
。
在允许过程中考虑了借用和抢占后,Kueue 才会尝试降低并行度,并且两者均不可行。
要允许部分允许,您可以在作业的 kueue.x-k8s.io/job-min-parallelism
注释中提供最小可接受并行度 Pmin
,Pn
应大于 0 且小于 P0
。当作业被部分允许时,其并行度将设置为 Pn
,Pn
将设置为 Pmin
和 P0
之间的最大可接受值。作业的完成计数不会更改。
例如,由以下清单定义的作业
apiVersion: batch/v1
kind: Job
metadata:
name: sample-job-partial-admission
namespace: default
labels:
kueue.x-k8s.io/queue-name: user-queue
annotations:
kueue.x-k8s.io/job-min-parallelism: "5"
spec:
parallelism: 20
completions: 20
suspend: true
template:
spec:
containers:
- name: dummy-job
image: gcr.io/k8s-staging-perf-tests/sleep:v0.1.0
args: ["30s"]
resources:
requests:
cpu: 1
memory: "200Mi"
restartPolicy: Never
当在仅有 9 个可用 CPU 的 ClusterQueue 中排队时,它将以 parallelism=9
允许。请注意,完成数不会更改。
注意:PartialAdmission 是一项默认禁用的Alpha
功能,有关详细信息,请查看更改功能门配置部分的安装。