【发布时间】:2020-01-10 07:02:39
【问题描述】:
从 K8S 关于Configure liveness, readiness probes 的文档中,假设successThreshold 和failureThreshold 的值很小,并且当Pod 运行时,探针无法同时满足successThreshold 和failureThreshold 的限制。一开始,pods应该是什么状态?
【问题讨论】:
标签: kubernetes probe
从 K8S 关于Configure liveness, readiness probes 的文档中,假设successThreshold 和failureThreshold 的值很小,并且当Pod 运行时,探针无法同时满足successThreshold 和failureThreshold 的限制。一开始,pods应该是什么状态?
【问题讨论】:
标签: kubernetes probe
我猜你还没有完全理解就绪和活跃度探测。
就绪探测
就绪探测旨在让 Kubernetes 知道您的应用何时准备好为流量提供服务。 Kubernetes 在允许服务向 pod 发送流量之前确保就绪探测通过。如果就绪探测开始失败,Kubernetes 会停止向 pod 发送流量,直到它通过为止。
同样按照官方 Kubernetes docs.
如果就绪探测失败,端点控制器会从与 Pod 匹配的所有服务的端点中删除 Pod 的 IP 地址。初始延迟之前的默认就绪状态是失败。如果 Container 不提供就绪探测,则默认状态为 Success。
例如,如果您的应用程序需要大约 15 秒才能正常工作,需要加载大量数据,您可以设置 readinessProbe。当您扩展部署或在 Pod 接收数据之前需要一段时间时,它会很有帮助。
对于就绪探测,failureThreshold 值定义了在从端点列表中删除 pod 之前探测必须失败的次数。
活性探针
Liveness 探针让 Kubernetes 知道您的应用是活着还是死了。如果你的应用程序还活着,那么 Kubernetes 就不会管它了。如果您的应用已死,Kubernetes 会移除该 Pod 并启动一个新的来替换它。
简而言之,当您的应用程序运行时,Kubernetes 会检查它可以访问某些共享的时间段,如果是,则返回成功。如果没有,则将其视为失败并再次尝试,直到探测到达failureThreshold。达到这个值后,pod会被重启。
===
基于docs example。
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,如this case。
您可以在网上找到很多关于此的文章。例如google article 或openshift article。
在使用探针时检查this docs 的信息。
如果这没有回答,请编辑您的问题。
【讨论】:
Pending: > Pod 已被 Kubernetes 系统接受,但一个或多个 Container 镜像尚未创建。这包括计划之前的时间以及通过网络下载图像所花费的时间,这可能需要一段时间。后来依赖休息是Failed,Running,Succeeded 就像在文档中:kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/…