如何使用client-go API返回的Pod条件数组?

Ini*_*ian 5 kubernetes kubernetes-apiserver kubernetes-pod client-go

我使用 Go 中的 client-go API 来访问给定控制器(部署)下的 Pod 列表。使用选择器标签查询属于它的 pod 列表时,您会得到一个数组PodConditions- https://pkg.go.dev/k8s.io/api/core/v1?tab=doc#PodCondition

这与 Pod 条件的官方文档非常一致 - https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-conditions。但文档并不清楚如何访问这个条目数组。是按照最近的条目先排序吗?例如,如果我只想访问 Pod 的最新状态,应该怎么做?从我在本地集群中进行的一项试验中,我获得了控制器 Pod 之一的更新(Pod 条件数组),如下所示

{Initialized True 0001-01-01 00:00:00 +0000 UTC 2020-07-29 08:01:15 +0000 UTC  } 
{Ready True 0001-01-01 00:00:00 +0000 UTC 2020-07-29 08:01:22 +0000 UTC  } 
{ContainersReady True 0001-01-01 00:00:00 +0000 UTC 2020-07-29 08:01:22 +0000 UTC  } 
{PodScheduled True 0001-01-01 00:00:00 +0000 UTC 2020-07-29 08:01:15 +0000 UTC  }
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,给定的 Pod几乎同时从 转变ContainersReady为。但它们都不在第一个或最后一个索引中。Ready08:01:22 +0000 UTC

TLDR,问题是如何从这个值数组推断最新的 Pod 条件类型和状态?

hil*_*rat 2

Pod 没有从 转变ContainersReadyReady,而是ConditionStatusPodConditionTypes转变FalseTrue
PodCondition数组保存有关每个 ConditionType 的详细信息,但它们不相关,并且您不应依赖 PodCondition 更新的顺序。
相反,您可以监控您感兴趣的每个 PodCondition 的详细信息。

如果您只想知道 Pod 是否正在运行,请查看PodPhase。它也是PodStatus结构的一部分。