【发布时间】:2019-07-11 16:46:57
【问题描述】:
在对 kubernetes pod 进行健康检查时,为什么即使我们已经维护就绪探测,也需要进行活跃度探测?
Readiness probe 已经持续检查 pod 中的应用程序是否准备好为请求提供服务,这意味着 pod 处于活动状态。但是,为什么需要活性探测?
【问题讨论】:
标签: kubernetes kubernetes-health-check
在对 kubernetes pod 进行健康检查时,为什么即使我们已经维护就绪探测,也需要进行活跃度探测?
Readiness probe 已经持续检查 pod 中的应用程序是否准备好为请求提供服务,这意味着 pod 处于活动状态。但是,为什么需要活性探测?
【问题讨论】:
标签: kubernetes kubernetes-health-check
探针含义不同,结果不同:
您无法根据准备情况来确定活跃度,反之亦然。仅仅因为 pod 不能接受流量知道,并不意味着需要重新启动,它可能意味着它只需要时间来完成一些工作。
如果您正在部署,例如php 应用程序,这两个可能是相同的,但 k8s 是一个通用系统,支持多种类型的工作负载。
发件人:https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/
kubelet 使用 liveness probes 来了解何时重启 Container。例如,活跃度探针可以捕获死锁,即应用程序正在运行,但无法取得进展。在这种状态下重新启动容器有助于使应用程序更加可用,尽管存在错误。
kubelet 使用就绪探测来了解容器何时准备好开始接受流量。当一个 Pod 的所有容器都准备好时,它就被认为准备好了。此信号的一种用途是控制哪些 Pod 用作服务的后端。当 Pod 未准备好时,它会从服务负载均衡器中移除。
旁注:实际上就绪应该是活跃度的一个子集,这意味着就绪度意味着活跃度(而失败的活跃度意味着失败的准备度)。但这并没有改变上面的解释,因为如果你只有准备好,你只能暗示什么时候不需要重启,这和根本没有任何重启的探针是一样的。同样因为探针是单独定义的,所以不能保证 k8s 一个是另一个的子集
【讨论】:
就绪探测检查您的应用程序是否已准备好为请求提供服务,并且在满足就绪检查之前,它不会将该特定 pod 添加到就绪 pod pull 中。主要区别在于,如果 pod 未准备好,它不会重新启动 pod。
Liveness probe 检查 pod 是否未准备好(不满足特定条件),它会重新启动 pod,希望该 pod 能够恢复并准备好。
【讨论】:
Kubernetes 允许您定义一些东西以使应用程序可用。
1: 活性探针为您的容器。
2: Readiness probe 用于您的 Pod。
1- 活跃度探测:它们通过确保不健康的容器自动重启来帮助保持您的应用健康。
2:就绪探测它们通过定期调用来帮助确定特定 Pod 是否应该接收客户端请求。
就绪探测操作
当容器启动时,Kubernetes 可以配置为在执行第一次就绪检查之前等待可配置的时间过去。之后,它会定期调用探针并根据就绪探针的结果进行操作。
liveness 和 readiness 探针之间的重要区别
1: 不像 liveness probes(即上面提到的“如果一个 pod 报告它还没有准备好,它就会从服务中删除”),如果一个容器没有通过就绪检查,它就赢了'不会被杀死或重新启动。
2: Liveness 探针通过杀死不健康的容器并用新的健康容器替换它们来保持 Pod 的健康,而 Readiness 探针确保只有准备好为请求提供服务的 Pod 才能接收它们
我希望这对你有更好的帮助。
【讨论】: