1

当端点在 /health 端点上返回 HTTP 500 时,我尝试重新启动 pod。服务,probe-pod,不应该在失败时向 pod 发送流量。

  • 应用程序需要有一个端点 /start,它将通过返回 HTTP 200 来指示它是否可以接受流量。如果端点返回 HTTP 500,则表明应用程序尚未完成初始化
  • 应用程序需要有另一个端点 /health 来指示应用程序是否仍按预期通过返回 HTTP 200 工作。如果端点返回 HTTP 500,则应用程序不再响应。
  • 探针应使用端口 8080

我知道就绪和活跃度探针是如何工作的,但是如何连接它们的输出响应基础?我无法解决第一项和第二项。我该如何测试解决方案?有人可以帮我吗?

4

2 回答 2

3

当端点在 /health 端点上返回 HTTP 500 时,我尝试重新启动 pod。服务,probe-pod,不应该在失败时向 pod 发送流量。

这是带有就绪探针的 Kubernetes 中的默认行为。如果探测失败,则 Pod 尚未“准备好”,并且没有服务将流量转发到该 Pod。periodSeconds您可以使用该选项控制它的响应能力(具有一些性能损失) 。例如,您可以将其设置为 1 秒,以确保一旦探测失败,它就会从流量池中取出。

在就绪、活跃度和启动探测方面,它们有一个httpGet机制。他们将所有状态代码200-399视为通过,而将其他所有状态代码视为失败,但它们不允许您控制哪些状态代码是“成功”,哪些是“失败”。

如果您想更好地控制状态代码,您可以使用该ExecAction机制并使用如下脚本:

CODE=`curl -s -o /dev/null -w '%{http_code}' http://www.example.org/`; if [ "$CODE" -ge 200 ] && [ "$CODE" -le 399 ]; then exit 0; else exit 1; fi

在上述情况下,您必须确保已将curl其安装在您的容器中。

于 2020-07-02T15:56:18.503 回答
1

我猜你可以选择以下方式,为了清楚起见,也可以参考这个链接

 livenessProbe:
      httpGet:
        path: /health
        port: 8080
      initialDelaySeconds: as-required-by-you
    
 readinessProbe:
      httpGet:
        path: /start
        port: 8080
于 2020-07-02T15:37:25.423 回答