kubernetes cronjob只运行一次?

时间:2020-06-24 17:20:35

标签: kubernetes

我按照以下时间表创建了一个k8s CronJob(每分钟运行一次):

sub

我看到我的CronJob已创建:

REDIRECT_URI

我的工作只是对日志执行一次Printf,然后退出。

当我做schedule: "*/1 * * * *"时,我看到:

NAMESPACE     NAME                   READY   STATUS    RESTARTS   AGE
job-staging   job-1593017820-tt2sn   2/3     Running   0          10m

当我查看日志时,看起来它只运行了一次,这是第一次运行。我需要阻止我的程序退出吗?

我假设k8s将重新启动程序,但这也许是一个错误的假设。

1 个答案:

答案 0 :(得分:1)

您对Kubernetes行为(“重新启动程序”)的假设是正确的。

您可能知道,Job基本上是Kubernetes Pod,它执行某些过程并在以零退出代码退出时成功完成。 CronJob的“ Cron”部分最明显,它安排Job在特定的时间模式下执行。

大多数CronJobs的YAML对象都包含restartPolicy: OnFailure键,该键可防止Kubernetes为非零退出代码重新安排作业(Kubernetes文档中的hello-world YAML file使用此标志)。

根据我在kubectl指令获得的日志中所看到的,看来您的作业正在失败-由于Status 1。我建议您使用kubectl logs -f -n default job-1593017820-tt2sn检查CronJob的日志,以查看脚本执行过程中是否存在任何错误(如果脚本以退出代码显式退出,请检查是否存在非零代码)。

[更新]

CronJobs也有局限性:

cron作业在其计划的每个执行时间大约创建一次作业对象。我们之所以说“关于”,是因为在某些情况下可能会创建两个作业,或者可能不会创建任何作业。我们试图使它们变得罕见,但并不能完全防止它们。因此,工作应该是幂等的。

我认为这是非常罕见的情况,但是也许您发现自己处于这些罕见的情况下。该文档为here

相关问题