【问题标题】:How can get READY, STATUS, RESTARTS, AGE,etc in kubectl as custom-columns?如何在 kubectl 中将 READY、STATUS、RESTARTS、AGE 等作为自定义列?
【发布时间】:2021-08-08 18:55:13
【问题描述】:

我只想列出带有 .status.podIP 的 pod 作为额外的列。 似乎只要我指定 -o=custom-colums=,默认列 NAME, READY, STATUS, RESTARTS, AGE 就会消失。

我能得到的最接近的是

kubectl get pod -o wide -o=custom-columns="NAME:.metadata.name,STATUS:.status.phase,RESTARTS:.status.containerStatuses[0].restartCount,PODIP:.status.podIP"

但这并不真正等同于以下方式的默认列:

  • READY:我不知道如何获取默认输出(使用自定义列看起来像 2/20/1
  • STATUS:在默认行为 STATUS 中,可以是 Running、Failed、Evicted,但 .status.phase 永远不会是 Evicted。似乎默认状态是.status.phase.status.reason 的组合。 有没有办法说如果它正在运行则显示.status.phase,但如果不显示.status.reason
  • RESTARTS:这仅显示 pod 中第一个容器的重新启动(我猜所有容器的总和是正确的)
  • AGE:我还是不知道如何使用自定义列获取 pod 的年龄

有人知道自定义列语法中默认列的定义吗?

【问题讨论】:

    标签: kubernetes kubectl


    【解决方案1】:

    我检查了 kubectl get podskubectl -o custom columns 之间的 API 请求之间的差异:

    • 使用聚合:
    curl -k -v -XGET -H Accept: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application/json -H User-Agent: kubectl/v1.18.8 (linux/amd64) kubernetes/9f2892a http://127.0.0.1:8001/api/v1/namespaces/default/pods?limit=500 
    
    • 没有聚合:
    curl -k -v -XGET -H Accept: 
    application/json -H User-Agent: kubectl/v1.18.8 (linux/amd64) kubernetes/9f2892a http://127.0.0.1:8001/api/v1/namespaces/default/pods?limit=500
    

    所以你会注意到,当使用-o custom columns 时,kubectl 在响应正文中得到PodList 而不是Table。 Podlist 没有该聚合数据,因此据我了解,使用 custom-column 的 kubectl pod 无法获得相同的输出。

    这是一个code sn-p,负责您想要的输出。可能的解决方案是分叉客户端并根据您自己的需要对其进行自定义,因为您可能已经注意到此输出需要一些自定义逻辑。另一种可能的解决方案是使用 Kubernetes api client libraries 之一。最后,您可能想尝试 extend kubectlkubectl plugins 的功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-18
      • 2023-03-31
      • 2022-08-17
      • 2021-06-19
      • 1970-01-01
      • 2020-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多