我正在开展一个研究项目,在该项目中我部署了一个 Kubernetes 作业,旨在生成特定的 CPU 和内存负载。该作业请求 0.5 个 CPU 和 500Mi 内存,我的目标是通过将并行度设置为 20 来并行运行该作业的 20 个副本。鉴于我的集群能够同时处理大约 15 个作业,我预计 15 个作业将成功完成,而其余 5 个应该因资源限制而失败或保持待处理状态。
问题在于,调度程序将其中一些 pod 置于挂起状态,并在其他作业完成时启动它们。这种行为不符合我的项目要求。我需要调度程序尝试对所有作业进行初始调度,并直接使那些由于资源限制而无法立即容纳的作业失败,而不是延迟它们。这将帮助我报告成功作业和失败作业的数量。
以下是作业 YAML 文件:
apiVersion: batch/v1
kind: Job
metadata:
name: stress-job
spec:
parallelism: 20
template:
metadata:
name: stress-job
spec:
containers:
- name: stress-app
image: annis99/stress-app:v1.1
imagePullPolicy: Always
ports:
- containerPort: 8081
resources:
requests:
cpu: 500m
memory: 500Mi
limits:
cpu: 500m
memory: 600Mi
restartPolicy: Never
通过将
parallelism
设置为 0
,调度程序将尝试一次调度所有作业。如果没有足够的资源来容纳所有作业,调度程序将立即使无法调度的作业失败,允许您报告成功作业和失败作业的数量。
您还可以在 YAML 文件中设置 spec.completions 来设置总体任务数,并设置 spec.completionMode 来检索状态(
completedIndexes
和 failedIndexes
)。