我在 .net 核心中有一个控制台应用程序。如何实现 Kubernetes 就绪/活跃度探测?
我的应用程序循环处理rabbitmq 消息,并且不监听任何http 端口。
我在 .net 核心中有一个控制台应用程序。如何实现 Kubernetes 就绪/活跃度探测?
我的应用程序循环处理rabbitmq 消息,并且不监听任何http 端口。
就绪探测对于这种情况来说是零意义的,因为您不会通过服务来引导任何流量。当您的应用程序自行读取 rabbitmq 时,无论 kube 探针如何,它都会这样做。虽然在使用活性探针时存在逻辑,但如果内部进程以某种方式失败,您可能希望重新启动容器。
您可以创建一个状态 api 端点,该端点将在某个端口上侦听 http 请求,如果您的应用程序健康(您需要一些内部逻辑来定义健康的含义),则以 200 OK 响应,或者使用基于命令的探针启动一个命令,该命令将做一些检查并报告容器是否正常。
在这种情况下,最好在同一个 pod 中创建一个 sidecar 容器。该容器将托管一个 ASP.NET Core 站点,专门用于利用 .NET Core 2.2 中最近引入的新运行状况检查 API。有监控rabbitmq连接的扩展。然后,您将公开 ASP.NET Core 网站以进行运行状况检查。
下面是一些不错的解决方案,可以将健康检查添加到非 asp 应用程序(例如控制台应用程序):
我建议实施 TCP 解决方案,因为它是最小的,但仍然给出了预期的结果。