【问题标题】:Kubernetes: list all pods and its nodesKubernetes:列出所有 Pod 及其节点
【发布时间】:2021-05-25 23:51:47
【问题描述】:

我有 3 个节点,运行各种 pod。例如,我想要一个节点和 pod 列表:

NODE1 POD1
NODE1 POD2
NODE2 POD3
NODE3 POD4

请问如何实现?

谢谢。

【问题讨论】:

  • kubectl get pod --all-namespaces -o json | jq '.items[] | .spec.nodeName + " " + .metadata.name'

标签: kubernetes


【解决方案1】:

您可以使用custom columns

kubectl get pod -o=custom-columns=NAME:.metadata.name,STATUS:.status.phase,NODE:.spec.nodeName --all-namespaces

或者只是:

kubectl get pod -o=custom-columns=NODE:.spec.nodeName,NAME:.metadata.name --all-namespaces

【讨论】:

  • 谢谢。这就是我一直在寻找的。它有效,但需要在命令中添加 --all-namespaces 以便出现 pod。例如:kubectl get pod --all-namespaces -o=custom-columns=NAME:.metadata.name,STATUS:.status.phase,NODE:.spec.nodeName
  • 我发现在第二个命令的末尾添加| sort 会很有帮助,以便按节点对结果进行分组。
  • 这是按节点查找和分组 pod 的绝佳答案。有助于查找哪些节点包含哪些 pod
  • -o=wide 选项也会默认显示节点。 kubectl get pods -o=wide
  • | sort -r 将标题保持在排序的顶部
【解决方案2】:

kubectl 有一个简单但有用的扩展输出格式,您可以像这样使用

kubectl get pod -o wide

因此,虽然其他答案中提供的自定义格式很好,但这可能是一个方便的捷径。

【讨论】:

  • 这比其他答案要简单得多。
  • 完整的命令是kubectl get pod --all-namespaces -o wide,这将给出包括节点信息在内的所有细节。列出特定命名空间 kubectl get pod -n YOUR_NAMESPACE -o wide 的 pod。希望这会有所帮助。
  • 让我的生活变得轻松
【解决方案3】:

您可以使用kubectl get pods --all-namespaces 列出所有命名空间中的所有 pod,使用kubectl get nodes 列出所有节点。

【讨论】:

  • 好的,谢谢。虽然您的命令有效,并且它是我目前使用的那种,但目标是有一个输出 pod/nodes 关系的命令。希望你能帮忙。再次感谢!
  • 也许这个对你有帮助:kubectl get pods -o wide,但它会打印很多信息。
【解决方案4】:

以下命令或多或少可以满足您的需求。然而,这更像是jq 的把戏,而不是kubectl 的把戏:

kubectl get pod --all-namespaces -o json | jq '.items[] | .spec.nodeName + " " + .status.podIP'

【讨论】:

  • 谢谢!安装“jq”后,不幸的是,我在上面的命令中收到“解析错误:第 1 行第 10 列的数字文字无效”。
  • 这仅给出节点的名称和 pod 的 IP
  • @AmineZaine 将 .status.podip 替换为 kubectl get pod --all-namespaces -o json | jq '.items[] | .spec.nodeName + " " + .metadata.name'
【解决方案5】:

不完全如你所愿,因为它描述的更多,但你可以使用

kubectl describe nodes

它将使用以下信息公开集群中的每个 pod 每个节点

命名空间 |姓名 | CPU 请求 | CPU 限制 |内存请求 | 内存限制

【讨论】:

  • 非常感谢!您知道是否可以根据上述问题删除所有额外信息并在简化表中显示详细信息?再次感谢!
【解决方案6】:

这将为您提供:跨集群的“nodeName namespace pod”:

kubectl get pods --all-namespaces --output 'jsonpath={range .items[*]}{.spec.nodeName}{" "}{.metadata.namespace}{" "}{.metadata.name}{"\n"}{end}'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多