0

我有一个订阅服务队列的工作 pod。我们需要定义 liveness probe 来监控 worker 的健康。worker pod 不公开任何 HTTP 或 TCP 端口。所以我使用命令来检查工人的健康状况。像这样。

  livenessProbe:
  exec:
    command:
    - cat
    - log/healthy-2020-07-16-03.log

每 5 秒,worker pod 会将健康信息输出到日志文件。日志文件名格式为healthy-YYYY-MM-DD-HH.log。每个日志信息如下:

{"message":"Thu Jul 16 2020 03:23:30 GMT+0000 (Coordinated Universal Time) health","level":"notice","Env":"local","Service":"myservice","timestamp":"2020-07-16T03:23:30.008Z"}

所以我需要检查日志时间戳和消息是否健康。

我的问题是:

  1. 我的方法是否遵循 k8s 健康探测的最佳实践?
  2. k8s 是否支持更强大的命令?例如:python 脚本或 jq。我需要解析 JSON 并验证时间戳和消息?
  3. 对于worker pod,我们不需要定义readiness probe,因为它不绑定k8s service或者endpoint,对吧?
4

1 回答 1

4

我的方法是否遵循 k8s 健康探测的最佳实践?

是的

k8s 是否支持更强大的命令?例如:python 脚本或 jq。我需要解析 JSON 并验证时间戳和消息?

实际上, exec 探针将在容器内作为命令行运行。更多细节在这里。因此,运行 python 脚本或 jq 之类的东西取决于您。但是,您必须确保您在探针中运行的命令可以在容器内执行。例如,您想为探测运行 python 脚本,确保您的容器安装了 python,并且该脚本也存在于容器中。

对于worker pod,我们不需要定义readiness probe,因为它不绑定k8s service或者endpoint,对吧?

这取决于您的用例以及您的服务如何工作。

这里有一篇很好的文章,解释了就绪和活跃度探测。

于 2020-07-16T04:38:08.667 回答