使用Kubernetes cronjob自动删除Pod

时间:2019-03-10 00:30:47

标签: kubernetes

我在Kubernetes中有一个Cronjob,它每3分钟运行一次。如下所示,它似乎运行正常,但是生成的pod会立即删除自身,我无法查看有关为什么删除它的任何细节。

下面是cronjob骨架,

apiVersion: batch/v1beta1
kind: CronJob
...
spec:
  schedule: "*/3 * * * *"
  successfulJobsHistoryLimit: 1
  failedJobsHistoryLimit: 3
  concurrencyPolicy: Forbid
  startingDeadlineSeconds: 120
  jobTemplate:
    spec:
      backoffLimit: 2
      template:
        spec:
        ...

这将生成如下的cronjob,

NAME   SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
test   */3 * * * *   False     0        1m              51m

由此产生的工作,

NAME              DESIRED   SUCCESSFUL   AGE
test-1552177080   1         0            8m
test-1552177260   1         0            5m
test-1552177440   1         0            2m

查看我可以看到的其中一项工作的细节,

Name:           test-1552177440
Namespace:      storage
...
Events:
  Type     Reason                Age                    From            Message
  ----     ------                ----                   ----            -------
  Normal   SuccessfulCreate      2m57s                  job-controller  Created pod: test-1552177440-b5d6g
  Normal   SuccessfulDelete      2m40s                  job-controller  Deleted pod: test-1552177440-b5d6g
  Warning  BackoffLimitExceeded  2m40s (x2 over 2m40s)  job-controller  Job has reached the specified backoff limit

您可以看到,SuccessfulDelete立即删除了广告连播。 有什么办法可以阻止这种情况的发生吗?最终,id希望查看有关为何无法启动pod的任何日志或任何详细信息。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。

参考:https://github.com/kubernetes/kubernetes/issues/78644#issuecomment-498165434

<块引用>

一旦作业失败(当它超过其活动截止时间秒数或退避限制时会发生这种情况),所有活动 pod 都会被删除,以防止它们永远运行/崩溃循环。任何不活跃的 Pod,例如它们处于失败或成功的 Pod 阶段,都应该留下。
如果您希望 pod 在失败后仍然存在,将 pod 的重启策略更改为 Never 应该可以防止它们被立即清理,但这确实意味着每次 pod 失败时都会创建一个新的 pod直到达到退避限制。

您能否尝试将 restartPolicy 修复为 Never

apiVersion: batch/v1beta1
kind: CronJob
...
spec:
  schedule: "*/3 * * * *"
  ...
  jobTemplate:
    spec:
      ...
      template:
        spec:
          ...
          restartPolicy: Never # Point!