k8s 命令健康探测的最佳实践

Best practice for k8s command health probe

我有一个订阅服务队列的 worker pod。我们需要定义 liveness 探针来监控 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 服务或端点,对吗?

Is my approach follow the best practice of k8s health probe?

Does k8s support more powerful command? eg: python script or jq. I need to parse JSON and validate timestamp and message?

实际上,exec 探测将 运行ning 作为容器内的命令行。更多详细信息 here。所以由你决定 运行 任何东西,比如 python 脚本或 jq。但是,您必须确保您在探测中 运行ning 的命令可以在容器内执行。例如,您想要 运行 一个 python 探测脚本,确保您的容器已安装 python 并且该脚本也存在于容器中。

For worker pod, we don't need to define readiness probe, because it doesn't bind with k8s service or endpoint, right?

这取决于您的用例和服务的工作方式。

一篇很好的文章 here 解释了就绪和活跃度探测。