如何使用kubernetes go客户端获得kubectl提供的相同Pod状态信息
使用kubernetes go客户端(如何使用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
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。如果一个吊舱中的所有容器都完成了,并且吊舱的生命周期都完成了,我们怎么能得到通知呢?任何例子都将不胜感激。