问题描述
我想知道是否有可能对一个 pod 中的多个容器或仅对一个 pod 中的一个容器应用活性和就绪探针检查。 我确实尝试检查多个容器,但容器 A 的探测检查失败,而容器 B 的探测检查通过了 Pod。
解决方法
根据 K8S 规范,可以对每个容器执行活性和就绪检查,并带有自己的模板,该模板嵌套在特定容器中。参见示例:https://raw.githubusercontent.com/kubernetes/website/main/content/en/examples/pods/probe/exec-liveness.yaml .
所以我认为这实际上取决于您在探测器中检查什么以及容器 A 如何以与容器 B 不同的方式回答。
如果您需要模板,您应该查看kustomize
,欢迎来到社区。p>
回答
绝对可以对 Pod 内的容器应用多个探测器。接下来会发生什么取决于探测。
Containers probes 中列出了三个可以使用的探针:liveness
、readiness
和 startup
。我将详细介绍 liveness
和 readiness
:
活力
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。
有用的链接
-
Container probes - 一般信息和
types
- Configure Liveness,Readiness and Startup Probes(练习和示例)