如何设置Kubernetes作业的时间限制?

Bos*_*osh 7 jobs containers docker kubernetes kubernetes-jobs

我想启动Kubernetes工作,并给它一个固定的截止日期。如果在截止日期到来之前吊舱仍在运行,我希望该作业自动终止。

是否存在这样的东西?(起初我以为Job规范activeDeadlineSeconds涵盖了这个用例,但现在我看到这activeDeadlineSeconds仅限制了​​重试作业的时间;它不会主动杀死慢速/失控的工作。)

小智 16

根据我对activeDeadlineSeconds部分文档的理解,它指的是作业的活动时间,并且在该时间之后考虑作业Failed

官方文档声明:

activeDeadlineSeconds 适用于作业的持续时间,无论创建了多少个 Pod。一旦 Job 达到 activeDeadlineSeconds,其所有正在运行的 Pod 都会被终止,并且 Job 状态将变为 type: Failed with Reason: DeadlineExceeded

https://kubernetes.io/docs/concepts/workloads/controllers/job/#job-termination-and-cleanup


Ahm*_*gle 6

您可以使用GNU timeout实用程序在容器的entrypoint命令上自定义超时。

例如,以下计算pi的前4000位的作业将在10秒后超时:

apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    metadata:
      name: pi
    spec:
      containers:
      - name: pi
        image: perl
        command: ["/usr/bin/timeout", "10", "perl", "-Mbignum=bpi", "-wle", "print bpi(4000)"]
      restartPolicy: Never
Run Code Online (Sandbox Code Playgroud)

(清单来自https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#running-an-example-job

您可以玩数字游戏,看看它是否超时。通常,在我的工作站上计算pi的4000位数字需要大约23秒,因此,如果将其设置为5秒,则可能始终会失败,而如果将其设置为120秒,它将始终可以工作。