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

san*_*ndy 6 kubernetes kubernetes-health-check readinessprobe livenessprobe

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

moo*_*tte 7

欢迎来到社区。

\n

回答

\n

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

\n

容器探针中列出了三个可以使用的探针:livenessreadinessstartup。我将详细描述livenessreadiness

\n

活力

\n
\n

livenessProbe:表示容器是否正在运行。如果探测liveness失败,kubelet 将终止容器,并且容器将遵循其重新启动策略。如果容器不提供\n探测liveness,则默认状态为成功

\n
\n
\n

kubelet 使用活性探针来了解何时重新启动容器。\n例如,活性探针可能会捕获死锁,\n应用程序正在运行,但无法取得进展。在这种状态下重新启动\n容器有助于提高应用程序\n的可用性,尽管存在错误。

\n
\n

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

\n

也可以签入container events,此报价来自Kubernetes in Action - Marko Luk\xc5\xa1a

\n
\n

我\xe2\x80\x99在很多情况下都看到过这种情况,用户很困惑为什么他们的容器被重新启动。但是,如果他们\xe2\x80\x99d 使用了kubectl describe,\n他们\xe2\x80\x99d 已经看到容器以退出代码 137 或\n143 终止,告诉他们 pod 已从外部终止

\n
\n

准备状态

\n
\n

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

\n
\n
\n

kubelet 使用就绪探针来了解容器何时准备好\n开始接受流量。当 Pod 的所有容器都准备就绪时,\n该 Pod 就被视为准备就绪。此信号的一种用途是控制将哪些 Pod 用作服务的后端。当 Pod 未就绪时,\n它会从服务负载均衡器中删除。

\n
\n

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

\n

有用的链接

\n\n


小智 0

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

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

如果您需要模板,您应该考虑kustomize