【问题标题】:How to get Readiness Probe's result in code?如何在代码中获取 Readiness Probe 的结果?
【发布时间】:2021-11-30 15:15:44
【问题描述】:

一个 pod 有两个容器:A 和 B,A 需要调用 B,所以它必须等待 B 准备好。目前,我对此就绪检测的实现是使用“就绪探针”。但是,有一个问题。 “k8s.io/api/core/v1.Container”中的容器结构没有像“ready”这样的布尔值。这对我来说没有意义,不应该有这样一个字段,以便另一个容器可以轻松检测到状态吗?还是我一开始就弄错了这个“就绪探针”?

我注意到如果一个容器的就绪状态不正常,那么它的容器就不会被创建。所以也许我可以查看 pod 并检查是否创建了 B 的容器,这可能是“k8s.io/api/core/v1.Container”没有“Readiness Probe”布尔字段的原因。

我的问题是:可以使用容器的存在作为“Readiness Probe”的指标吗?

【问题讨论】:

  • 我见过的常用方法是让 A 假设 B 存在,然后重试调用或重新启动 A 容器(如果它不存在或尚未准备好)。这种方法不是特定于 Kubernetes 的,即使 B 在启动后一段时间失败,它也可以工作。

标签: kubernetes


【解决方案1】:

不,Pod 的容器存在这一事实并不意味着容器已准备就绪。 考虑一个需要 30 秒引导的 Java 容器。容器将存在并且在前 30 秒内未准备好。

你需要做的是检查 Pod Status 中的 Container State:https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-states

更具体地说,您需要遍历数组status.containerStatuses,直到找到您感兴趣的容器的名称,然后检查ready字段。

来自文档 (https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#PodStatus):

containerStatuses.ready (boolean): 指定容器是否通过了它的就绪探测。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 2020-07-19
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多