准备就绪探针失败,但仍在运行,并且EndPoint不会删除吊舱ID

时间:2019-12-20 02:07:07

标签: kubernetes

我描述了豆荚。我发现了错误信息。似乎Pod Readiness探针失败。但是我检查了端点,该端点没有删除pod IP。 Pod接收到流量,即使活动探测失败。

  Warning  Unhealthy  92s (x84 over 3d1h)  kubelet, aks-agentpool-xxxxx Readiness probe failed: Get https://10.244.14.21:5001/api/alive: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
$ kubectl describe ep myapp
Name:         myapp
Namespace:    default
Labels:       <none>
Annotations:  <none>
Subsets:
  Addresses:          10.244.14.21,10.244.24.34
  NotReadyAddresses:  <none>
  Ports:
    Name    Port  Protocol
    ----    ----  --------
    legacy  5001  TCP
    https   5001  TCP

Events:  <none>

我想知道如果准备失败了怎么办?

1 个答案:

答案 0 :(得分:1)

实践

  

似乎Pod Readiness探针失败。但是我检查了端点,端点没有删除pod IP。

检查时Pod处于健康状态,并且您看到的Warning只是说在某些情况下Readiness探测失败。

请注意,如果就绪探测器失败,则端点控制器将从与Pod匹配的所有服务的端点中删除Pod的IP地址(一旦就绪探测器成功,它们就会重新添加)。

您可以使用 $ kubectl describe svc/YOUR_SERVICE

它将在您执行命令时输出为该服务的流量服务的端点(EP)列表。

如果EP准备就绪探针失败,则EP不会在该命令的输出中列出。

从您提供的输出中:

$ kubectl describe ep myapp
...
Subsets:
  Addresses:          10.244.14.21,10.244.24.34
  NotReadyAddresses:  <none>

我们可以说目前所有EP都已准备就绪。

理论

  

我想知道如果准备失败了怎么办?

简而言之:流量将被重定向到其他EP,直到该EP重新准备就绪。

Readiness probe上的官方文档说:

Probekubelet在容器上进行的定期诊断。为了执行诊断,kubelet调用由Container实现的Handler

kubelet可以选择对正在运行的Container进行三种探测并对其做出反应: -livenessProbe -准备就绪探针 -startupProbe

readinessProbe:指示容器是否准备好处理请求。 如果准备就绪探针失败,则端点控制器从所有与Pod相匹配的服务的端点中删除Pod的IP地址。初始延迟之前的默认就绪状态为Failure。如果容器未提供就绪探测器,则默认状态为Success

希望这正是您一直在寻找的信息。