【问题标题】:Kubernetes pod marked as `Completed` despite the exit code `255`尽管退出代码为“255”,但 Kubernetes pod 仍标记为“已完成”
【发布时间】:2020-10-30 08:33:57
【问题描述】:

情况: 我有一个经常失败的 CronJob(目前这是预期的)。由于执行工作的容器有一个边车,容器之间的依赖关系通过 bash 脚本和emptyDir 的常见挂载在/etc/liveness 文件夹中表示:

        spec:
          containers:
          - args:
            - -c
            - set -x;
              ...
              ./process; # execute the main process
              rc=$?;
              rm /etc/liveness; # clean-up
              exit $rc;
            command:
            - /bin/bash

问题: 在作业失败的情况下,我在日志中看到以下内容:

+ rc=255
+ rm /etc/liveness
+ exit 255

retryPolicy 设置为never,失败的pod 进入Completed 状态,这是一种误导:

scheduler-1594015200-wl9xc   0/2     Completed     0          24m

【问题讨论】:

    标签: kubernetes kubernetes-cronjob


    【解决方案1】:

    根据official doc

    一个 Job 创建一个或多个 Pod 并确保指定数量的 Pod 他们成功终止

    容器进入terminated state

    它已成功完成执行或当它失败了一些 原因。

    因此,如果您将 retryPolicy 设置为 never,就会发生这种情况。

    【讨论】:

    • 很抱歉,我没有得到您的答复。那么为什么 pod 状态是 Completed 而不是 Failed
    • Pod 失败。作业已完成。
    • 嗨@coderanger,正如您在kubectl get pods 命令输出中的问题中看到的那样,pod 不是Failed,而是Completed。此外,来自文档:描述:失败。 Pod 中的所有 Container 都已终止,并且至少有一个 Container 因失败而终止。也就是说,容器要么以非零状态退出,要么被系统终止。参考:kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/…
    【解决方案2】:

    Pod 的状态字段是一个 PodStatus 对象,它有一个阶段字段。

    参考:https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase

    状态和阶段不一样。所以我了解到,上面发生的情况是我的 pod 最终处于状态 Completed 和阶段 Failed

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-20
      • 2012-03-25
      • 1970-01-01
      • 2020-04-30
      • 2012-02-27
      • 1970-01-01
      • 2014-09-22
      • 1970-01-01
      相关资源
      最近更新 更多