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 的生产环境中执行很长时间。这就是为什么我选择将单个调用的结果保存到临时文件的解决方案。
我想列出节点的 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 的生产环境中执行很长时间。这就是为什么我选择将单个调用的结果保存到临时文件的解决方案。