【问题标题】:List all containers in all pods with status列出所有 pod 中所有容器的状态
【发布时间】:2019-07-21 14:05:18
【问题描述】:

我正在尝试获取所有 pod 中所有非就绪容器的列表,以调试集群中的网络问题。

是否可以使用 kubectl 获取所有 pod 中所有容器及其状态 (READY/..) 的干净列表?

我正在使用

$ kubectl get pods 

但是,输出可能很大,并且很难知道哪些容器已准备好,哪些有问题。

谢谢。

【问题讨论】:

    标签: kubernetes kubectl


    【解决方案1】:

    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
    

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

    【讨论】:

    • 很好的答案!在我的集群中,一些容器最多显示 3 个状态 = true,如下所示:kube-dns-86f4d74b45-cqt6f: true, true, true。有些显示 2 个真值,例如:calico-node-w968t:真,真。你知道这是什么意思吗@Joshua Oliphant
    • 另外,你能解释一下那个 jsonpath 中发生了什么吗?
    • true, true, true 表示 pod 有 3 个容器,每个容器都准备好了
    • 答案中的命令改编自:kubectl get pods --all-namespaces -o=jsonpath='{range .items[]}{"\n"}{.metadata .name}{":\t"}{range .spec.containers[]}{.image}{", "}{end}{end}' 列出所有 pod 以及其中的容器。
    【解决方案2】:

    我已调整 @joshua-oliphant's answer 以包含容器名称:

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

    这将显示所有 Pod,包括当前命名空间中的所有容器及其就绪状态,例如:

    pod-name: container-name-a: true, container-name-b: false
    

    【讨论】:

      【解决方案3】:

      使用 jq,我们可以列出所有 pod 及其容器的状态:

      kubectl get pods --output=json | jq --raw-output '.items | map([.metadata.name, (.status.containerStatuses | map(.name + ": " + (.ready | tostring)))[]]) | .[] | join("\n ")'

      这会显示如下内容:

      pod-1234-auiend
        container1: true
        container2: false
      another-pod-2454-123123:
        container1: true
      (...)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-28
        • 2018-06-10
        • 1970-01-01
        • 1970-01-01
        • 2017-06-26
        • 1970-01-01
        相关资源
        最近更新 更多