Kubernetes:readinessProbes 失败,但 livelinessProbe 使用相同的设置成功

Posted

技术标签:

【中文标题】Kubernetes:readinessProbes 失败,但 livelinessProbe 使用相同的设置成功【英文标题】:Kubernetes: readinessProbes failing but the livelinessProbe is succeeding with the same settings 【发布时间】:2019-03-13 15:36:00 【问题描述】:

我为我的 pod 配置了一个 livelinessProbe,它在同一个 pod 和特定端口上的路径上执行 http-get。它完美地工作。但是,如果我使用相同的设置并配置 readinessProbe,它会失败并出现以下错误。

Readiness probe failed: wsarecv: read tcp :50578->:80: 现有连接被远程主机强行关闭

实际上,在某个点之后,我什至看到活力探测失败了。不知道为什么。活跃度探测成功应该表明 kube-dns 工作正常,我们能够从节点访问 pod。这是我的 pod 规范的 readinessProbe

readinessProbe:  
        httpGet:  
          path: /<path> # -> this works for livelinessProbe  
          port: 80  
        initialDelaySeconds: 30  
        periodSeconds: 10  
        timeoutSeconds: 10  

有没有人知道这里可能发生了什么。

【问题讨论】:

【参考方案1】:

我认为这与kube-dnscoredns 无关。最可能的原因是您的 pod/容器/应用程序崩溃或停止服务请求。

好像是这样的时间线:

Pod/容器出现。 Liveliness 探测成功。 一段时间过去了。 可能是应用崩溃或错误。 准备失败。 Liveliness 探测也失败了。

有关该错误含义的更多信息: An existing connection was forcibly closed by the remote host

【讨论】:

感谢您的快速回复 :) 但是,如果没有准备就绪探测,livelinessprobe 永远不会失败。只有当我添加了 readinessProbe 时,事情才开始失败。 您是否检查过您的 pod 中的一切都运行良好? 如果我不在 pod 中设置 readinessProbe,一切运行正常。我可以调用我部署的服务,livelinessProbes 也成功了。但是一旦我设置了 readinessProbe,我也无法在该 pod 上运行我的服务。当我运行 wget 时,它一直在失败。 实际上,我的 readinessprobe 第一次大约需要 2-3 分钟。所以,我的超时时间是 180。但是,过了一会儿(大约 2 分钟),它失败并出现错误“wsarecv:现有连接被远程主机强行关闭” 这可能是您的应用程序的问题。我建议您进入 pod 并检查日志文件,或使用 kubectl logs &lt;pod-name&gt; 检查标准输出日志

以上是关于Kubernetes:readinessProbes 失败,但 livelinessProbe 使用相同的设置成功的主要内容,如果未能解决你的问题,请参考以下文章

kubernetes之pod健康检查

kubernetes健康检查配置解析

健康检查调度约束

k8s之Probe

Kubernetes CKAD 1.20 - 真题 (第4题) - 建议收藏

云原生Kubernetes(k8s)之容器的探测