我正在尝试使用Kubernetes client-go访问集群中的pod详细信息。
我想用它来获取在一个特定名称空间(类似于kubectl get pods -n <my namespace>
)中运行的pod的详细信息。
我需要的详细信息是pod的name
、status
、ready
、restarts
和age
。
我怎样才能获得这些数据?
我正在尝试使用Kubernetes client-go访问集群中的pod详细信息。
我想用它来获取在一个特定名称空间(类似于kubectl get pods -n <my namespace>
)中运行的pod的详细信息。
我需要的详细信息是pod的name
、status
、ready
、restarts
和age
。
我怎样才能获得这些数据?
2条答案
按热度按时间b4wnujal1#
因此,我编写了一个函数,该函数接受Kubernetes客户端(有关创建客户端的详细信息,请参阅客户端)和名称空间,并返回所有可用的pod-
在得到所有的pod之后,我使用一个循环来运行所有的pod和每个pod内的容器,并手动得到我所需要的所有数据-
这将产生与运行
kubectl get pods -n <my namespace>
时完全相同的数据。o8x7eapl2#
Adding on to Navendu's excellent answer, sometimes there is a difference in the "STATUS" column when you run
kubectl get pods
vs. thepodStatus.Phase
.As described here: How to use the kubernetes go-client to get the same Pod status info that kubectl gives . Sometimes you want the actual reason why a specific container in a pod is not booting up or if it's initializing.
To get the reason, update Navendu's code to be:
Note that this is a more direct method of doing the same thing as the source code: https://github.com/kubernetes/kubectl/blob/81cffe129f76292f24be1d05435c8d35e975f765/pkg/describe/describe.go#L2013
It seems like kubectl is abstracting the end result to a writer, and it also looks like the writer is encapsulating data about the terminationCode, times, and more.
You can update your code to be more or less the same, but the Waiting.Reason/Terminating.Reason is enough for me.