Kubernetes列出所有未运行的容器



如何使用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}'

相关内容

  • 没有找到相关文章

最新更新