如何使用Kuectl命令列出未运行的所有容器。我想要像一样的输出
CONTAINER_NAME STATUS POD_NAME NAMESPACE <br>
container_1 Running pod_1 ns1 <br>
container_2 Not Running pod_2 ns2 <br>
container_3 Running pod_2 ns2 <br>
kubectl get pods --field-selector status.phase!=Running
Above命令将在上面列出所有pod,而不是默认命名空间的运行状态。
如果您想在所有命名空间中运行命令&列出所有PODS
kubectl get pods --field-selector status.phase!=Running --all-namespaces
如果您想打印命名空间,您也可以根据需要打印自定义列
kubectl get pod --field-selector status.phase!=Running -o=custom-columns=NAME:.metadata.name,STATUS:.status.phase,NAMEDPACE:.metadata.namespace
最终命令-你期待的列的方式
kubectl get pod --field-selector status.phase!=Running -o=custom-columns=POD_NAME:.metadata.name,STATUS:.status.phase,NAMEDPACE:.metadata.namespace,CONTAINER_NAME:.spec.containers[*].name
这里的问题是.status.phase
实际上是调度状态,而不是实际状态。它可以在";正在运行";状态,并且您在pod中的容器仍处于崩溃循环中。我所做的是检查最新的containerStatuses
是否处于等待状态。如果是,那么这些将是被卡住的集装箱:
kubectl get pods -o jsonpath='{range .items[?(@.status.containerStatuses[-1:].state.waiting)]}{.metadata.name}: {@.status.containerStatuses[*].state.waiting.reason}{"n"}{end}'
除了上面的答案,我还有一个特殊的用例,我想获取所有未运行的pod名称来删除它们。所以我用这个把名字作为列表
kubectl get pods --all-namespace --field-selector status.phase!="Running" -o=jsonpath='{.items[*].metadata.name}'