我正在使用Go中的client-go API来访问给定 Controller (部署)下的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的最新状态,应该怎么做?从我在本地集群中进行的一项试验中,获得了 Controller 的其中一个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  }
如您所见,给定的Pod几乎同时ContainersReadyReady转换为08:01:22 +0000 UTC。但是它们都不在第一个或最后一个索引中。
因此,TLDR的问题是如何从该值数组中推断最新的Pod条件类型和状态?

最佳答案

Pod并未从ContainersReady转换为Ready,那些ConditionStatusPodConditionTypesFalse变为TruePodCondition数组包含有关每个ConditionType的详细信息,但它们不相关,因此您不应依赖PodCondition更新的顺序。
相反,您可以监视您感兴趣的每个PodCondition的详细信息。
如果您只是想知道Pod是否正在运行,请查看 PodPhase 。它也是PodStatus结构的一部分。

关于kubernetes - 如何使用客户端API返回的Pod条件数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63154258/

10-10 04:28