首页 > 解决方案 > 如何利用 Kubernetes readinessProbe 在不重启 Pod 的情况下自行修复 Pod?

问题描述

根据此文档,我看到 readinessProbe 可用于暂时停止对 pod 的请求,而无需重新启动它即可正常恢复。

https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#define-readiness-probes

当我看到 pod 事件时,看起来 pod 在 Readiness 探测失败时重新启动。以下是事件:

 1. Readiness probe failed
 2. Created container
 3. Started container
 4. Killing container with id {}

尝试将容器 restartPolicy 修改为 OnFailure,希望此配置在 readinessProbe 失败时决定 pod 操作,但我看到以下错误:

The Deployment {} is invalid: spec.template.spec.restartPolicy: Unsupported value: "OnFailure": supported values: "Always"

哪种方法可以停止对 pod 的请求,而无需重新启动它并让应用程序正常恢复?

标签: kuberneteskubernetes-health-check

解决方案


有两种类型的探头。由于活动探测失败而发生重新启动。 https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/

活体探针

kubelet 使用 liveness probes 来了解何时重启 Container。例如,活跃度探针可以捕获死锁,即应用程序正在运行,但无法取得进展。尽管存在错误,但在这种状态下重新启动 Container 有助于使应用程序更加可用。

准备探测

有时,应用程序暂时无法提供流量。例如,应用程序可能需要在启动过程中加载大数据或配置文件,或者在启动后依赖外部服务。在这种情况下,您不想杀死应用程序,但也不想向它发送请求。Kubernetes 提供就绪探针来检测和缓解这些情况。带有容器报告它们尚未准备好的 pod 不会通过 Kubernetes 服务接收流量。

今天我发现了一篇关于探针的非常好的文章https://blog.colinbreck.com/kubernetes-liveness-and-readiness-probes-how-to-avoid-shooting-yourself-in-the-foot/


推荐阅读