OpenFaaS:在功能Pod的健康检查期间接收超时错误



问题:

我们在功能中添加了健康检查配置。然而,由于活跃度和准备状态检查中的超时错误,pod变得不健康,因此重新启动。然而,如果我使用CURL或浏览器点击了相同的健康检查url,它会返回正确的响应

运行状况检查配置参考。

我们使用Kubernetes HPAv2进行自动缩放(参考)。

测试功能.yml

test-function:
lang: quarkus-java-with-fonts
handler: ./test-function
image: repo.azurecr.io/test-function:0.1
labels:
agentpool: openfaas
com.openfaas.scale.min: "2"
com.openfaas.scale.max: "10"
com.openfaas.scale.factor: 0
annotations:
com.openfaas.health.http.path: "/health"
com.openfaas.health.http.initialDelay: "30s"
environment:
secret_name: environment-variables
secrets:
- environment-variables 
constraints:
- agentpool=openfaas
limits:
cpu: 1500m
memory: 1Gi
requests:
cpu: 500m
memory: 500Mi

错误跟踪:

Liveness probe failed: Get "http://XX.XXX.XX.XX:8080/health": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
Readiness probe failed: Get "http://XX.XXX.XX.XX:8080/health": context deadline exceeded (Client.Timeout exceeded while awaiting headers)

任何可能出错的想法。

这些错误:

Liveness probe failed: Get "http://XX.XXX.XX.XX:8080/health": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
Readiness probe failed: Get "http://XX.XXX.XX.XX:8080/health": context deadline exceeded (Client.Timeout exceeded while awaiting headers)

意味着HTTP请求失败。为了使就绪和活跃度探测器正常工作,这种类型的请求必须成功。

要找出问题所在,您需要获取pod IP地址。运行:

kubectl get pods -o wide

您应该看到类似的输出:

NAME                        READY   STATUS    RESTARTS   AGE   IP          NODE                                       NOMINATED NODE   READINESS GATES
<my-pod-name>               1/1     Running   0          25d   10.92.3.4   <my-node-name>                             <none>           1/1

获取您的IP并运行:

kubectl exec -t <another_pod> -- curl -I <pod's cluster IP>

如果您得到一个200响应代码,则意味着端点已正确创建和配置。任何其他答案都表明你的形象有问题。

另请参阅:

  • 这个类似的问题(带解决方案)在github上
  • 关于Stack Overflow的问题非常相似
  • 指导如何设置活跃度和就绪度探测器
  • 这篇漂亮的文章

相关内容

  • 没有找到相关文章

最新更新