从K8S关于Configure liveness,readiness probes的文档中,假设和的值successThreshold
很小failureThreshold
,并且pods一开始运行时probes不满足successThreshold
和failureThreshold
同时的bar,那么pods应该是什么状态呢?
1 回答
我猜你还没有完全理解就绪和活跃度探测。
准备探测
就绪探测旨在让 Kubernetes 知道您的应用何时准备好为流量提供服务。Kubernetes 在允许服务向 Pod 发送流量之前确保就绪探测通过。如果就绪探测开始失败,Kubernetes 会停止向 pod 发送流量,直到它通过。
也根据官方 Kubernetes文档。
如果就绪探测失败,端点控制器会从与 Pod 匹配的所有服务的端点中删除 Pod 的 IP 地址。初始延迟之前的默认就绪状态是失败。如果 Container 不提供就绪探测,则默认状态为 Success。
例如,如果您的应用程序需要大约 15 秒才能正常工作,则需要加载大量数据,您可以设置readinessProbe
. 当您扩展部署或在 Pod 接收数据之前需要一段时间时,它会很有帮助。
对于就绪探测,该failureThreshold
值定义了在从端点列表中删除 pod 之前探测必须失败的次数。
活性探针
Liveness probes 让 Kubernetes 知道你的应用程序是活着还是死了。如果你的应用程序还活着,那么 Kubernetes 就不会管它了。如果你的应用已经死了,Kubernetes 会移除 Pod 并启动一个新的来替换它。
简而言之,当您的应用程序运行时,Kubernetes 会检查它是否可以访问某些共享的时间段,如果是,则返回成功。如果没有,则将其视为失败并再次尝试,直到探测到达failureThreshold
。达到这个值后,pod会重启。
===
基于文档示例。
readinessProbe 什么时候会成功:
readiness-exec 0/1 Pending 0 0s
readiness-exec 0/1 Pending 0 0s
readiness-exec 0/1 ContainerCreating 0 0s
readiness-exec 0/1 Running 0 8s
readiness-exec 1/1 Running 0 15s
readiness-exec 0/1 Completed 0 98s
readinessProbe 何时失败:
readiness-exec 0/1 Pending 0 0s
readiness-exec 0/1 Pending 0 0s
readiness-exec 0/1 ContainerCreating 0 0s
readiness-exec 0/1 Running 0 3s
readiness-exec 0/1 Completed 0 92s
由于 readinessProbe 失败,它不会创建 pod。在 pod 的描述中:
Warning Unhealthy 2s (x12 over 57s) kubelet, gke-default-pool-bc1968b0-1sh7 Readiness probe failed: cat: /tmp/healthyyyyy: No such file or directory
关于 livenessProbe 到达failureThreshold
容器时将执行RestartPolicy中设置的操作。
由于探针生成的信息存储在 kubelet 中,因此您可以描述 pod 以检查当前状态。如果您想获得更详细的信息,您必须在这种情况下$ journalctl -u kubelet
使用like 。
你可以在网上找到很多关于这个的文章。例如google 文章或openshift 文章。
使用探针时,请检查此文档的信息。
如果这没有回答,请编辑您的问题。