我描述了豆荚。我发现了错误信息。似乎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>
我想知道如果准备失败了怎么办?
答案 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上的官方文档说:
Probe是kubelet在容器上进行的定期诊断。为了执行诊断,kubelet调用由Container实现的Handler。
kubelet可以选择对正在运行的Container进行三种探测并对其做出反应: -livenessProbe -准备就绪探针 -startupProbe
readinessProbe
:指示容器是否准备好处理请求。 如果准备就绪探针失败,则端点控制器从所有与Pod相匹配的服务的端点中删除Pod的IP地址。初始延迟之前的默认就绪状态为Failure
。如果容器未提供就绪探测器,则默认状态为Success
。
希望这正是您一直在寻找的信息。