我有一个gRPC服务,该服务使用tcp侦听器在端口上侦听。该服务已被Docker化,最终我想在Kubernetes集群中运行它。
我想知道实现 liveness 和 readiness 探针以检查服务运行状况的最佳方法是什么?
/health
和/ready
路径吗?答案 0 :(得分:3)
以前,我在应用程序内部运行了一个单独的http服务器,仅用于运行状况检查(这是因为AWS应用程序负载平衡器仅具有http检查功能,我不知道kube)。
如果将http服务器作为单独的例程运行,而将grpc服务器作为主goroutine运行,则应避免grpc服务器关闭并且http仍然为200的情况-确定(假设您还没有办法为http进行健康检查您的grpc)。
您还可以使用goroutine的热跳模式,该模式由http服务器控制,并接受来自grpc服务器的心跳,以确保一切正常。
如果您运行2台服务器,则它们将需要在不同的端口上运行,这对于某些需要1个服务端口的调度程序(例如ECS)来说可能是个问题。有示例和软件包,可让您将多个协议复用到同一端口上。我猜kube支持多种端口服务,所以这可能不是问题。
链接到多路传输示例: