问题:
我们在功能中添加了健康检查配置。然而,由于活跃度和准备状态检查中的超时错误,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的问题非常相似
- 指导如何设置活跃度和就绪度探测器
- 这篇漂亮的文章