作业失败后Kubernetes pod消失

u59ebvdq  于 2023-03-17  发布在  Kubernetes
关注(0)|答案(2)|浏览(181)

我正在通过cron运行Kubernetes作业。在某些情况下,作业可能会失败,我希望它们重新启动。我计划的作业如下所示:
kubectl run collector-60053 --schedule=30 10 * * * * --image=gcr.io/myimage/collector --restart=OnFailure --command node collector.js
我遇到了一个问题,其中一些作业正在运行并失败,但关联的pod正在消失,因此我无法查看日志,它们也没有重新启动。
例如:

$ kubectl get jobs | grep 60053
collector-60053-1546943400     1         0            1h
$ kubectl get pods -a | grep 60053
$    // nothing returned

这是在运行1.10.9-gke.5的Google云平台上
任何帮助将不胜感激!
编辑:
我发现了一些更多的信息。我在我的GCP集群上有自动缩放设置。我注意到当服务器被删除时,pod也被删除(以及它们的 meta数据)。这是预期的行为吗?不幸的是,这给了我查看pod日志的简单方法。
我的理论是,当pod发生故障时,CrashLoopBackOff会启动,最终自动扩展会决定不再需要该节点(它不会将pod视为活动工作负载)。此时,节点会消失,pod也会消失。我认为这不是Restart OnFailure的预期行为,但我通过密切观察基本上见证了这一点。

qcbq4gxm

qcbq4gxm1#

在深入研究了这个问题之后,我对自己的情况有了一个了解。根据Kubernetes存储库上的issue 54870,当设置为Restart=OnFailure时,作业会出现一些问题。
我已经将配置更改为使用Restart=Never,并为作业设置了backoffLimit。即使restart设置为never,在我使用restart never进行的测试中,Kubernetes实际上会将pod重新启动到backoffLimit设置,并保留错误pod以供检查。

hwamh0ep

hwamh0ep2#

获取作业的名称

kubectl get jobs --watch

查找最后一个计划作业的Pod

pods=$(kubectl get pods --selector=job-name=nameofjob-xxxxx --output=jsonpath={.items..metadata.name})

获取pod日志

echo $pods
kubectl logs $pods

相关问题