1

从K8S关于Configure liveness,readiness probes的文档中,假设和的值successThreshold很小failureThreshold,并且pods一开始运行时probes不满足successThresholdfailureThreshold同时的bar,那么pods应该是什么状态呢?

4

1 回答 1

0

我猜你还没有完全理解就绪和活跃度探测。

准备探测

就绪探测旨在让 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 文章

使用探针时,请检查此文档的信息。

如果这没有回答,请编辑您的问题。

于 2020-01-10T14:48:32.677 回答