【问题标题】:What the status of pods should be if the health check doesn't meet successThreshold and failureThreshold, neither如果健康检查不满足successThreshold和failureThreshold,pod的状态应该是什么,也不
【发布时间】:2020-01-10 07:02:39
【问题描述】:

从 K8S 关于Configure liveness, readiness probes 的文档中,假设successThresholdfailureThreshold 的值很小,并且当Pod 运行时,探针无法同时满足successThresholdfailureThreshold 的限制。一开始,pods应该是什么状态?

【问题讨论】:

    标签: kubernetes probe


    【解决方案1】:

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

    就绪探测

    就绪探测旨在让 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 articleopenshift article

    在使用探针时检查this docs 的信息。

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

    【讨论】:

    • 感谢您的回复。抱歉,我的问题可能不是那么清楚或难以理解。我的真正意思是,我想知道在探针开始工作之前 pod 的初始状态。我猜初始状态就像没有探针的情况
    • 是的,总是第一个状态是Pending: > Pod 已被 Kubernetes 系统接受,但一个或多个 Container 镜像尚未创建。这包括计划之前的时间以及通过网络下载图像所花费的时间,这可能需要一段时间。后来依赖休息是FailedRunningSucceeded 就像在文档中:kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/…
    猜你喜欢
    • 2019-05-27
    • 1970-01-01
    • 2020-01-26
    • 2017-07-16
    • 2022-06-13
    • 1970-01-01
    • 2019-02-01
    • 2020-01-18
    • 2018-04-08
    相关资源
    最近更新 更多