Kubernetes:列出节点的所有 pods 和 pod 状态

Kubernetes: list a node's all pods and pod statuses

我想列出节点的 pods 和 pod 状态,例如

Node A
Pod1 Status
Pod2 Status

Node B
Pod1 Status
Pod2 Status

有没有我可以使用的 kubectl 命令?

试试这个:
kubectl get pods -A --field-selector spec.nodeName=<node name> | awk '{print " "}'

kubectl get pods

几乎可以满足您的需求,但它没有 Node 信息,这就是您需要 -o wide 的原因(我怀疑您是否真的需要此处的 -A 参数) ;那么你需要一点awk。所以可能是这样的:

kubectl get pods -o wide  | awk '{print "  ""  "}

这个脚本给出了你想要的输出:

kubectl get --no-headers pods --all-namespaces -o wide > /tmp/allpods

while read node; do
    echo "${node/node\//}"
    grep " ${node/node\//} " /tmp/allpods | \
        while read line; do
            set -- $line
            echo " "
        done
done < <(kubectl get nodes --no-headers --output=name)

但我认为这个版本的输出更易读:

  • 第一列:k8s节点名
  • 第二列:namespace/pod-name
  • 第三列:pod 状态
kubectl get --no-headers pods --all-namespaces -o wide > /tmp/allpods

while read node; do
    echo "${node/node\//}"
    while read line; do
        set -- $line
        echo "  "
    done < <(grep " ${node/node\//} " /tmp/allpods)
done < <(kubectl get nodes --no-headers --output=name) | column -t -s ' '

输出:

k8s-node01
            my-namespace01/mypod01-321-86d58674d8-kv222         Completed
            my-namespace01/mypod01-321-redis-55dc88454c-z6xfj   Running
            [...]
k8s-node02
            [...]

正如接受的答案所暗示的那样,对每个集群节点进行 API 调用会使脚本在具有数十个节点和数千个 pods 的生产环境中执行很长时间。这就是为什么我选择将单个调用的结果保存到临时文件的解决方案。