工作失败后,Kubernetes吊舱消失了

时间:2019-01-08 12:17:06

标签: kubernetes google-kubernetes-engine

我正在通过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 Cloud Platform上

任何帮助将不胜感激!

编辑:

我发现了更多信息。我的GCP群集上有自动缩放设置。我注意到,当删除服务器时,pod也将被删除(及其元数据)。那是预期的行为吗?不幸的是,这使我无法轻松查看吊舱日志。

我的理论是,随着Pod发生故障,CrashLoopBackOff会启动,最终自动缩放将决定不再需要该节点(它不会将Pod视为活动工作负载)。此时,节点消失,吊舱也消失。我不认为这是Restart OnFailure的预期行为,但我基本上是通过仔细观察来见证的。

2 个答案:

答案 0 :(得分:1)

深入研究此问题后,我对自己的情况有所轻描淡写。根据Kubernetes存储库上的issue 54870,当设置为Restart = OnFailure时,作业会有一些问题。

我已将配置更改为使用Restart = Never并为作业设置backoffLimit。即使重新启动设置为永不,在我的测试中,从不重新启动,Kubernetes实际上将重新启动Pod直到backoffLimit设置,并保留错误Pod进行检查。

答案 1 :(得分:0)

获取工作名称

kubectl get jobs --watch

找到最后一个预定作业的窗格

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

获取pod日志

echo $pods
kubectl logs $pods