使用kubectl get pods --field-selector=status.phase=Failed 命令可以显示Failed 阶段的所有Pod。
Failed 表示 Pod 中的所有容器都已终止,并且至少有一个容器因故障而终止(参见:Pod phase):
Failed - Pod 中的所有容器都已终止,并且至少有一个容器因故障而终止。也就是说,容器要么以非零状态退出,要么被系统终止。
在您的示例中,两个 Pod 都处于 Running 阶段,因为每个 Pod 中至少有一个容器仍在运行。:
正在运行 - Pod 已绑定到一个节点,并且所有容器都已创建。至少有一个容器仍在运行,或者正在启动或重新启动过程中。
您可以使用以下命令检查 Pod 的当前阶段:
$ kubectl get pod -o=jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.phase}{"\n"}{end}'
让我们看看这个命令是如何工作的:
$ kubectl get pods
NAME READY STATUS
app-1 1/2 Error
app-2 0/1 Error
$ kubectl get pod -o=jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.phase}{"\n"}{end}'
app-1 Running
app-2 Failed
如您所见,只有app-2 Pod 处于Failed 阶段。 app-1 Pod 中还有一个容器在运行,所以这个 Pod 处于Running 阶段。
要列出所有具有Error 状态的 pod,您可以简单地使用:
$ kubectl get pods -A | grep Error
default app-1 1/2 Error
default app-2 0/1 Error
另外值得一提的是,您可以检查 Pods 中所有容器的状态:
$ kubectl get pod -o=jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.containerStatuses[*].state}{"\n"}{end}'
app-1 {"terminated":{"containerID":"containerd://f208e2a1ff08c5ce2acf3a33da05603c1947107e398d2f5fbf6f35d8b273ac71","exitCode":2,"finishedAt":"2021-08-11T14:07:21Z","reason":"Error","startedAt":"2021-08-11T14:07:21Z"}} {"running":{"startedAt":"2021-08-11T14:07:21Z"}}
app-2 {"terminated":{"containerID":"containerd://7a66cbbf73985efaaf348ec2f7a14d8e5bf22f891bd655c4b64692005eb0439b","exitCode":2,"finishedAt":"2021-08-11T14:08:50Z","reason":"Error","startedAt":"2021-08-11T14:08:50Z"}}