我按照以下时间表创建了一个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将重新启动程序,但这也许是一个错误的假设。
答案 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。