15

我想启动一项 Kubernetes 工作,并给它一个固定的完成期限。如果截止日期到来时 pod 仍在运行,我希望自动终止该作业。

这样的事情存在吗?(起初我认为 Job 规范activeDeadlineSeconds涵盖了这个用例,但现在我发现activeDeadlineSeconds它只限制了重新尝试工作的时间;它不会主动杀死缓慢/失控的工作。)

4

3 回答 3

11

timeout您可以使用 GNU实用程序在容器的入口点命令上自行设置超时。

例如,以下计算 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

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

你可以玩这些数字,看看它是否超时。通常在我的工作站上计算 4000 位 pi 大约需要 23 秒,所以如果你将它设置为 5 秒,它可能总是会失败,如果你将它设置为 120 秒,它总是会工作。

于 2017-07-06T22:36:41.060 回答
4

从我理解activeDeadlineSeconds部分文档的方式来看,它是指作业的活动时间,在此时间之后考虑作业Failed

官方文档声明:

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

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

于 2020-12-08T10:40:00.767 回答
0

您可以改为将 activeDeadlineSeconds 添加到定义为作业的一部分的 pod 模板中的 pod 规范中。这样,作业生成的 pod 会受到超时限制。

于 2022-03-03T12:10:48.033 回答