列出具有状态的所有容器中的所有容器

use*_*669 0 kubernetes kubectl

我试图获取所有pod中所有非READY容器的列表,以调试我的集群中的网络问题.

是否可以使用kubectl获取所有容器中所有容器的清单及其状态(READY/..)?

我目前正在使用

$ kubectl get pods 
Run Code Online (Sandbox Code Playgroud)

但是,输出可能很大,并且很难知道哪些容器是READY以及哪些容器有问题.

谢谢.

Jos*_*ant 6

kubectl get pods -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .status.containerStatuses[*]}{.ready}{", "}{end}{end}'

改编自这个文档:https://kubernetes.io/docs/tasks/access-application-cluster/list-all-running-container-images/#list-containers-by-pod

编辑以描述jsonpath正在做什么:

根据我对jsonpath的理解,range会迭代通过获取pod返回的所有.items [*].\n被添加以将结果拆分为每行一个,否则结果将变为一行.要查看其余的工作方式,您应该选择一个pod并运行: kubectl get pod podname -o yaml
.metadata.name对应

apiVersion: v1
kind: Pod
metadata:
  name: podname
Run Code Online (Sandbox Code Playgroud)

类似地,.status.containerStatuses [*]对应于应该位于底部的容器状态列表.