如果就绪探针失败,是否会重试 Pod 的探测?

12

readinessProbe: 表示容器是否准备好响应请求。如果就绪探测失败,Endpoints 控制器将从匹配 Pod 的所有服务的端点中删除该 Pod 的 IP 地址。在初始延迟之前,就绪状态的默认值为 Failure。如果容器没有提供就绪探测,则默认状态为 Success。

如果就绪探测失败(Pod 的 IP 地址被移除),接下来会发生什么?Pod 的就绪探测条件会再次被检查吗?它会在初始延迟后再次检查吗?如果 Pod 在就绪探测失败后自我修复,是否有机会将其 IP 地址添加到 Endpoint 中?如果修复了,那么该 Pod 是否会再次接收流量?


你是在询问就绪探针还是相似性探针? - Raedwald
嗨@Raedwald,我问的是准备探针而不是存活探针。 - User5678
就绪状态完全独立于活跃状态。如果一旦不准备好,Pod 就再也不会被选择,那么就绪探针将成为活性探针,除非您让垃圾运行而不是重新启动它。您可能希望明确从服务中删除 Pod,例如在运行某些昂贵的计算/批处理作业时,当它完成后,您可能希望将其恢复在线状态。 - GACy20
@GACy20 是的,它会在一定时间间隔内不断检查,即使它变成了垃圾。因此,垃圾也会被不断地评估对吧! - User5678
2个回答

9

POD 的就绪状态条件会再次检查吗?

是的,取决于您设置的阈值,条件将再次被检查。

在每个 periodSeconds 配置中,将检查 POD 的就绪状态。

在初始延迟后它还会再次检查吗?

它只会在初始延迟后进行检查。初始延迟是在 POD 初始化或启动时出现的。就绪状态检查将等待配置的时间,之后将开始按照每个时间间隔(例如每 5 秒或 10 秒)检查 POD 的就绪状态,具体取决于 periodSeconds 的配置。

如果 POD 自愈后就会将其 IP 地址添加到终结点末尾吗?

是的,如果自动恢复,意味着将 successThreshold 设置为 1,如果 POD 返回 200,则会将其标记为已恢复并且正在运行的 POD 将再次接收流量。

如果 POD 恢复了,它是否会再次接收流量?

是的

例如:

readinessProbe:
            httpGet:
              path: /k8/readiness
              port: 9595
            initialDelaySeconds: 25
            periodSeconds: 8
            timeoutSeconds: 10
            successThreshold: 1
            failureThreshold: 30
        livenessProbe:
            httpGet:
              path: /k8/liveness
              port: 9595
            initialDelaySeconds: 30
            periodSeconds: 8
            timeoutSeconds: 10
            successThreshold: 1
            failureThreshold: 30

就像配置中所提到的那样,就绪探针和存活探针会检查HTTP端点的状态。

initialDelaySeconds:仅在POD初始化或由于重启或其他任何原因重新启动时才会起作用。所以当POD启动时,就绪性不会检查服务状态,直到经过30秒。

经过30 seconds后,它将尝试检查端点的状态。如果成功,POD将处于准备好处理流量的状态;否则,它将在periodSeconds时间后再次尝试,因此如果我们得到200 response,则在8秒后再次尝试,POD将为Ready,否则将在8秒后再次尝试。

timeoutSeconds:单个跳数或请求将等待一定的时间来从服务获取响应,否则将标记为失败的检查。

failureThreshold:按照配置就绪性或存活性的最大失败检查次数之后,此POD将被启动或更改为无法使用状态。

successThreshold:成功阈值意味着如果单个请求从服务获得成功响应,则POD状态将更改为Ready

如果连续30failureThreshold发生,那么只有POD会被标记为Not ready,如果在singlesuccessThreshold之间发生,则POD将被标记为Ready,liveness也是如此。

注意:上面的示例仅供参考,不能在实际的生产场景中使用。

阅读更多信息:https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/


1
嗨,@Harsh manvar,我仍然需要在那部分上有些澄清。我已经编辑了我的问题。你能回答吗? - User5678
1
将等待10秒的超时时间来读取服务表单的响应。如果我们从服务中获得1次200响应,它将由于“successThreshold”标记为就绪。如果在串行线准备检查失败30次并获得404或400状态,则状态将更改为“未就绪”,POD将被“重新启动”,然后检查将重新开始,但延迟25秒。如果POD启动并开始工作,它将开始接受流量。 - Harsh Manvar
1
如果您的服务启动时间较短,请将“initialDelaySeconds”减少到2-3秒,但如果服务需要花费30-40秒的时间,则应相应调整。此外,将“periodSeconds”设置为每8秒运行一次就绪检查的间隔时间。 - Harsh Manvar
1
嗨@Harsh manvar,所以在准备探针中,一旦Pod变为就绪状态,它将变为未就绪状态。在25(初始延迟)秒或8秒(周期秒)后,Pod将再次进行检查。 - User5678
1
嗨@Harsh Manvar,我看到了你编辑过的答案,我有一个疑问:使用活动探针和就绪探针有什么好处?你在就绪探针和活动探针中使用了相同的参数,我不明白这提供了哪些好处。你能否解释一下?我在许多示例中看到了相同的情况。 - User5678
显示剩余8条评论

4

在经过与平时一样的periodSeconds延迟后,它会再次进行检查,当连续通过successThreshold次后,它将被视为已准备就绪,并具有所有常规行为。


嗨@coderanger,您是说它只在经过periodseconds后再次检查,而不考虑初始延迟吗? - User5678
不,那只在容器启动时使用。在启动探针添加之前,这是我们进行启动延迟的方法。 - coderanger
嗨@codranger,在读取探针失败的情况下,Pod将被标记为未就绪。我的问题是,在放弃后,Pod的准备条件是否会再次进行检查?那个Pod会变得准备好吗? - User5678
1
正如我的回答所说,是的,在 successThreshold 次成功探测之后,容器将被标记为 Ready。 - coderanger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接