如何在 kubectl 中将 READY、STATUS、RESTARTS、AGE 等作为自定义列获取?

ece*_*ulm 13 kubernetes kubectl

我只想列出 pod,并将其.status.podIP作为额外的列。似乎一旦我指定-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"
Run Code Online (Sandbox Code Playgroud)

但这并不真正等同于默认列,如下所示:

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

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

aci*_*uji 5

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

  • 通过聚合:
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 
Run Code Online (Sandbox Code Playgroud)
  • 没有聚合:
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
Run Code Online (Sandbox Code Playgroud)

所以你会注意到,当-o custom columns使用时,kubectl 获取PodList而不是Table响应主体。Podlist 没有聚合数据,因此据我了解,使用 kubectl pod 不可能获得相同的输出custom-column

这是负责您想要的输出的代码片段。可能的解决方案是分叉客户端并根据您自己的需求对其进行自定义,因为您可能已经注意到此输出需要一些自定义逻辑。另一种可能的解决方案是使用 Kubernetes API 客户端库之一。最后,您可能想尝试使用kubectl 插件扩展 kubectl功能。