如何在基于 Kubernetes 的 Eclipse Microprofile 中配置 livenessProbe

How to configure a livenessProbe in Kubernetes based Eclipse Microprofile

我是运行一个基于Eclipse Microprofile的休息服务。我的服务提供健康检查。这种健康检查的结果(提供了大量信息)看起来像这样:

http://localhost:9990/health
HTTP=OK

{
  "status":"UP",
  "checks":[
    {"name":"imixs-workflow",
     "status":"UP",
     "data":
     {
     "engine.version":"5.1.11-SNAPSHOT",
     "model.groups":30,
     "model.versions":20
     }
    }
  ]
}

如果名为 'imixs-workflow' 的检查显示 'status' 'UP'.

,则服务正常

我已经尝试使用这样的 livenessprobe 来配置它:

livenessProbe:
  exec:
    command: ["sh", "-c", "curl -s http://localhost:9990/health| grep -q imixs-workflow"]
  initialDelaySeconds: 60

但这没有用。

我应该如何配置这样一个 livenessprobe 获取 http 结果中特定 json 字段的状态?

您的 liveness 探测命令应该 return status 不同于 0 以指示不健康的容器状况。请参阅 Configure Liveness, Readiness and Startup Probes

如果可能的话,为了更好的可维护性和可读性,我还建议使用名为 jq 的工具 - 命令行 JSON 处理器。

有了它,您的探测器应该看起来像这样:

livenessProbe:
  exec:
    command: ["sh", "-c", "curl -s http://localhost:9990/health | jq -e '.checks[] | select(.name == "imixs-workflow") | .status == "UP"']
  initialDelaySeconds: 60

此处 -e 如果最后一个输出值为 false,则标志将退出状态设置为 1。