1

问题:

我们在函数中添加了健康检查配置。但是,由于活动性和就绪性检查中的超时错误,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)

任何想法可能是错的。

4

1 回答 1

0

这些错误:

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 响应代码,则表示端点已正确创建和配置。任何其他答案都表明您的图像存在问题。

也可以看看:

于 2021-08-26T07:55:11.733 回答