控制台应用程序中的 Kubernetes readiness/liveness 探测

Kubernetes readiness/liveness probe in console app

我在 .net 核心中有一个 控制台 应用程序。 如何实现 Kubernetes readiness/liveness 探针?

我的应用程序循环处理 rabbitmq 消息,并且不监听任何 http 端口。

Readiness 探测对于这种情况毫无意义,因为您不会通过服务引导任何流量。当您的应用程序自己读取 rabbitmq 时,无论 kube 探测器如何,它都会这样做。虽然在使用 liveness probe 时存在逻辑,如果内部进程以某种方式失败,您可能希望重新启动容器。

您可以创建一个状态 api 端点,该端点将在某些端口上侦听 http 请求并在您的应用程序健康时以 200 OK 响应(您需要一些内部逻辑来定义健康的含义)或使用基于命令的探测来启动一个命令,该命令将进行一些检查并报告容器是否正常。

在这种情况下,在同一个 pod 中创建一个 sidecar 容器可能会更好。该容器将托管一个 ASP.NET Core 站点,专门用于利用最近在 .NET Core 2.2 中引入的新健康检查 api。有用于监视 rabbitmq 连接的扩展。然后,您将公开 ASP.NET 核心网站以进行健康检查。

ASP.NET Core Health Montioring

AspNetCore.HealthChecks.Rabbitmq

这里有一些很好的解决方案,可以将健康检查添加到非asp 应用程序(例如控制台应用程序):

Performing a health check in .NET Core Worker Service

我建议实施 TCP 解决方案,因为它是最小的但仍能给出预期的结果。