问题描述
对于 Kubernetes 中的 HTTP readinessProbe 提出了一些疑问:
- 如果探测 (readinessProbe) 失败多次 (failureThreshold),并且一个 Pod 被标记为 NOT READY,Kubernetes 是否会不断尝试 readinessProbe,如果 Pod 开始正确响应,是否会将该 Pod 标记为 Ready?或者被标记为 Not Ready 的 Pod 会永远保持在这个状态而不会重试?
- 如果被标记为 Not Ready 的 Pod 会永远保持在这个状态,Kubernetes 的 Deployment 会尝试启动新的 Pods 吗?还是我会一直拥有较少可用的 Pods?
- 如果一个 Pod 通过了 readinessProbe,Kubernetes 是否会持续检查它是否准备就绪,如果将来开始失败,是否会将其标记为未准备就绪?这种情况可能吗?或者被标记为一次准备就绪的 Pod 是否会永远准备就绪?
解决方案
在 Kubernetes 中,readinessProbe 是用来检查 Pod 是否已经准备好接收网络流量的机制。下面是对用户的三个问题的解答:
对于第一个问题,一旦一个 Pod 被标记为 NOT READY,Kubernetes 不会自动重试 readinessProbe 来检查是否已经准备好。Pod 会保持在 NOT READY 的状态,直到触发一些事件(如新的 Deployment、Pod 更新等),或者手动干预才能改变这个状态。因此,被标记为 Not Ready 的 Pod 不会自动重试 readinessProbe。
在第二个问题中,readinessProbe 只是控制流量的机制,不会触发 Kubernetes 重新启动 Pod 的操作。如果一个 Pod 被标记为 Not Ready,Kubernetes 的 Deployment 不会自动尝试启动新的 Pods 来替代它。因此,你可能会一直拥有较少可用的 Pods,除非手动干预(如删除 Not Ready 的 Pod)或者触发了自动伸缩策略等。
对于第三个问题,如果一个 Pod 通过了 readinessProbe,Kubernetes 会持续检查它是否准备就绪。如果将来这个 Pod 开始失败(可能由于某些原因导致不再能够正确处理流量),Kubernetes 会将其标记为 Not Ready。因此,一次被标记为 Ready 的 Pod 并不意味着它会永远保持准备就绪状态,Kubernetes 会根据 readinessProbe 的检查结果来动态调整状态。
总结一下,readinessProbe 是一个控制流量的机制,而不会自动触发 Pod 的重启或替代。被标记为 Not Ready 的 Pod 不会自动重试 readinessProbe。如果一个 Pod 通过了 readinessProbe,Kubernetes 会持续检查其状态,并在必要时将其标记为 Not Ready。
附注:除了 readinessProbe,Kubernetes 还有 livenessProbe 和 startupProbe。livenessProbe 用于检查 Pod 是否还在运行,如果 livenessProbe 失败,Kubernetes 会尝试重新启动 Pod。startupProbe 用于在启动过程中检查应用程序是否已经准备好接收流量,适用于需要一些启动时间的应用。在设计 Probe 时,要考虑应用的不同方面,以确保应用的稳定性和可用性。