如何使用kubernetes go客户端获得kubectl提供的相同Pod状态信息

如何使用kubernetes go客户端获得kubectl提供的相同Pod状态信息,go,kubernetes,kubernetes-go-client,Go,Kubernetes,Kubernetes Go Client,使用kubernetes go客户端(k8s.io/client go/kubernetes),我知道如何获取pod.Status,我发现pod.Status.Phase很有用()。例如,我可以使用以下命令输出所有吊舱的吊舱状态阶段: 。。。 api:=clientset.CoreV1() pods,err:=api.pods(“”.List(metav1.ListOptions{}) 对于i,pod:=范围pods.Items{ podstatusPhase:=字符串(pod.Status.P

使用kubernetes go客户端(
k8s.io/client go/kubernetes
),我知道如何获取
pod.Status
,我发现
pod.Status.Phase
很有用()。例如,我可以使用以下命令输出所有吊舱的吊舱状态阶段:

。。。
api:=clientset.CoreV1()
pods,err:=api.pods(“”.List(metav1.ListOptions{})
对于i,pod:=范围pods.Items{
podstatusPhase:=字符串(pod.Status.Phase)
podCreationTime:=pod.GetCreationTimestamp()
年龄:=时间.自(podCreationTime.time).Round(time.Second)
podInfo:=fmt.Sprintf(“[%d]Pod:%s,阶段:%s,已创建:%s,年龄:%s”,i,Pod.GetName(),podstatusPhase,podCreationTime,年龄.String())
fmt.Println(PONDINFO)
}
但是,
阶段有点简单,因为它只显示5个值(
挂起
运行
成功
失败
未知
)。我希望获得与状态列中的
kubectl get pods
相同的信息,例如:

$ kubectl get pods

NAME                                        READY   STATUS              RESTARTS   AGE     IP             NODE                           NOMINATED NODE   READINESS GATES
moby-dick-cron-scheduler-1564578660-bg4sb   0/2     ContainerCreating   0          178m    <none>         ip-10-30-13-151.ec2.internal   <none>           <none>
notifications-missed-calls-1564564740-js762 0/2     Init:0/1            0          6h49m   <none>         ip-10-30-13-6.ec2.internal     <none>           <none>
antivirus-scanner-cron-1564576740-sd6hh     0/2     Completed           0          3h30m   10.30.13.169   ip-10-30-13-151.ec2.internal   <none>           <none>
$kubectl获得吊舱
名称就绪状态重新启动老化IP节点指定节点就绪门
moby-dick-cron-scheduler-1564578660-bg4sb 0/2容器创建0 178m ip-10-30-13-151.ec2.internal
notifications-missed-calls-1564564740-js762 0/2初始化:0/1 0 6h49m ip-10-30-13-6.ec2.internal
antivirus-scanner-cron-1564576740-sd6hh 0/2已完成0 3h30m 10.30.13.169 ip-10-30-13-151.ec2.1内部
特别是,我对
Init:0/1
podinitialization
状态感兴趣。当使用
pod.Status.Phase
时,处于这些状态的pod仅显示为“挂起”

  • Init:0/1
    表示Pod有1个Init容器,到目前为止0个已成功完成。在启动应用程序容器之前运行
  • Pod初始化
    表示Pod已经完成初始化容器的执行

是否有一种方法可以使用
k8s.io/client go/kubernetes
获取诸如
Init:0/1
之类的状态?或者没有捷径,我需要像库贝特一样重新计算?我猜它使用Pod状态来建立信息。如果我需要重新计算,也许我可以使用?有人知道我在哪里可以找到相关的比特吗?(我的golang经验非常有限)

我想你需要重新计算一下。请参见

简短的回答是,通常不必计算客户端上的“状态”,因为它是在服务器级别计算的

举例说明:

您尝试使用
kubectl get pods
打印的标准方式,在Kubernetes代码库中称为。此方法使用,默认为。这个

正如您所看到的,TablePrinter的
PrintObj
函数被委派,但委派来自配置HumanPrintFlags和保存原始文件

另外,您可以看到它包含了
k8s.io/cliruntime/pkg/printers
,并且您可以看到它正在实例化一个在
k8s.io/kubernetes/pkg/printers
中定义的

实际调用的print函数是这样的,您可以看到它处理3种情况,因为在某些情况下,服务器返回一个表,而在某些情况下不返回(看起来像<1.16个情况)

您还可以看到,在上述情况下,中的所有代码都没有被使用,因此这发生在kube apiserver端的后面


请记住,这是人类可读的打印机,这里定义了其他类型的打印机(取决于选项):

您定义的大多数链接都已断开。谢谢,我会看一看。内容更改。更新了链接。。。好像是移动了代码。谢谢Rico。如果一个吊舱中的所有容器都完成了,并且吊舱的生命周期都完成了,我们怎么能得到通知呢?任何例子都将不胜感激。