如何防止 Kubernetes 调度程序因资源限制而延迟处于挂起状态的作业 Pod

问题描述 投票:0回答:1

我正在开展一个研究项目,在该项目中我部署了一个 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
kubernetes jobs
1个回答
0
投票

通过将

parallelism
设置为
0
,调度程序将尝试一次调度所有作业。如果没有足够的资源来容纳所有作业,调度程序将立即使无法调度的作业失败,允许您报告成功作业和失败作业的数量。

您还可以在 YAML 文件中设置 spec.completions 来设置总体任务数,并设置 spec.completionMode 来检索状态(

completedIndexes
failedIndexes
)。

© www.soinside.com 2019 - 2024. All rights reserved.