如何为gRPC服务实现活动性和就绪性端点?

时间:2018-07-27 05:38:24

标签: docker go kubernetes grpc

我有一个gRPC服务,该服务使用tcp侦听器在端口上侦听。该服务已被Docker化,最终我想在Kubernetes集群中运行它。

我想知道实现 liveness readiness 探针以检查服务运行状况的最佳方法是什么?

  1. 我应该在另一个goroutine中运行单独的http服务器并响应/health/ready路径吗?
  2. 或者,我是否还应该使用gRPC调用来提高服务的活跃性和就绪性,并使用gRPC客户端查询这些端点?!

1 个答案:

答案 0 :(得分:3)

以前,我在应用程序内部运行了一个单独的http服务器,仅用于运行状况检查(这是因为AWS应用程序负载平衡器仅具有http检查功能,我不知道kube)。

如果将http服务器作为单独的例程运行,而将grpc服务器作为主goroutine运行,则应避免grpc服务器关闭并且http仍然为200的情况-确定(假设您还没有办法为http进行健康检查您的grpc)。

您还可以使用goroutine的热跳模式,该模式由http服务器控制,并接受来自grpc服务器的心跳,以确保一切正常。

如果您运行2台服务器,则它们将需要在不同的端口上运行,这对于某些需要1个服务端口的调度程序(例如ECS)来说可能是个问题。有示例和软件包,可让您将多个协议复用到同一端口上。我猜kube支持多种端口服务,所以这可能不是问题。

链接到多路传输示例:

https://github.com/gdm85/grpc-go-multiplex/blob/master/greeter_multiplex_server/greeter_multiplex_server.go