我描述了 pod 。我发现了错误信息。似乎Pod Readiness探针失败。但是我检查了端点,端点没有删除pod IP。 Pod接收流量,即使 Activity 探测失败。
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>
我想知道如果准备失败了怎么办?
最佳答案
实践
It seems the pod Readiness probe is failed. But I check the endpoint, the endpoint doesn't remove the pod IP.
当您检查Pod时,该Pod处于健康状态,并且您看到的Warning只是说在某些情况下Readiness探测失败。
请注意,如果就绪探测器失败,则端点 Controller 将从与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都已准备就绪。
理论
I want to know what if readiness failed?
简而言之:流量将被重定向到其他EP,直到该EP重新准备就绪。
关于Readiness probe的官方文档说:
Probe是由Container上的kubelet定期执行进行的诊断。为了执行诊断,kubelet调用由Container实现的Handler。
kubelet可以选择对正在运行的Container进行三种探测并对其使用react:
-livenessProbe
-准备就绪探针
-startupProbe
readinessProbe
:指示容器是否准备好服务请求。 如果准备就绪探针失败,则端点 Controller 从与Pod匹配的所有服务的端点中删除Pod的IP地址。初始延迟之前的默认就绪状态为Failure
。如果容器未提供就绪探测器,则默认状态为Success
。希望这正是您一直在寻找的信息。
关于kubernetes - 准备就绪探针失败,但仍在运行,并且EndPoint不会删除 pods ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59419074/