Pod 中多个容器的活跃度和就绪度探测

时间:2021-06-21 11:56:32

标签: kubernetes kubernetes-health-check readinessprobe livenessprobe

我想知道是否有可能对一个 pod 中的多个容器或仅对一个 pod 中的一个容器应用活性和就绪探针检查。 我确实尝试检查多个容器,但容器 A 的探测检查失败,而容器 B 的探测检查通过了 Pod。

2 个答案:

答案 0 :(得分:0)

根据 K8S 规范,可以对每个容器执行活性和就绪检查,并带有自己的模板,该模板嵌套在特定容器中。参见示例:https://raw.githubusercontent.com/kubernetes/website/main/content/en/examples/pods/probe/exec-liveness.yaml .

所以我认为这实际上取决于您在探测器中检查什么以及容器 A 如何以与容器 B 不同的方式回答。

如果您需要模板,您应该查看kustomize

答案 1 :(得分:0)

欢迎来到社区。

回答

绝对可以对 Pod 内的容器应用多个探测器。接下来会发生什么取决于探测。

Containers probes 中列出了三个可以使用的探针:livenessreadinessstartup。我将详细介绍 livenessreadiness

活力

<块引用>

livenessProbe:表示容器是否正在运行。如果 liveness 探测失败,kubelet 杀死容器,并且 容器受其重启策略的约束。如果一个容器没有 提供 liveness 探针,默认状态为成功

<块引用>

kubelet 使用活性探针来知道何时重新启动容器。 例如,活性探测器可以捕获死锁,其中 应用程序正在运行,但无法取得进展。重启一个 处于这种状态的容器有助于使应用程序更加 尽管存在错误,但仍然可用。

如果 livenessProbe 失败,kubelet 将重新启动 POD 中的容器,POD 将保持不变(其年龄也是如此)。

也可以在container events中查看,此引用来自Kubernetes in Action - Marko Lukša

<块引用>

我在很多场合都看到过这种情况,但用户很困惑为什么他们的 容器正在重新启动。但如果他们使用了 kubectl describe, 他们会看到容器以退出代码 137 或 143,告诉他们 pod 已从外部终止

准备就绪

<块引用>

readinessProbe:表示容器是否准备好响应 要求。如果 readiness 探测失败,端点控制器 从所有服务的端点中删除 Pod 的 IP 地址 匹配 Pod。初始延迟前 readiness 的默认状态 是失败。如果 Container 不提供 readiness 探测,则 默认状态为成功

<块引用>

kubelet 使用就绪探针来了解容器何时准备就绪 开始接受流量。当一个 Pod 的所有的 容器准备好了。此信号的一种用途是控制哪些 Pod 用作服务的后端。当一个 Pod 没有准备好时,它是 从服务负载平衡器中删除。

这里发生的事情是 kubernetes 检查容器中的网络服务器是否正在处理请求,如果没有,readinessProbe 失败并且 POD 的 IP(一般来说是整个 POD)将从端点中删除,并且没有流量将被定向到 POD。

有用的链接