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

Docker 如何为gRPC服务实现活动性和就绪性端点?,docker,go,kubernetes,grpc,Docker,Go,Kubernetes,Grpc,我有一个gRPC服务,它使用tcp侦听器侦听端口。这个服务是固定的,最终我想在Kubernetes集群中运行它 我想知道实施活跃性和准备就绪性探测以检查我的服务健康状况的最佳方法是什么 我是否应该在另一个goroutine中运行单独的http服务器,并响应/health和/ready路径 或者,我是否也应该让gRPC调用我的服务的活跃性和就绪性,并使用gRPC客户端查询这些端点 以前,我在应用程序中运行了一个单独的http服务器,只是为了进行健康检查(这是因为AWS应用程序负载平衡器只有http

我有一个gRPC服务,它使用tcp侦听器侦听端口。这个服务是固定的,最终我想在Kubernetes集群中运行它

我想知道实施活跃性准备就绪性探测以检查我的服务健康状况的最佳方法是什么

  • 我是否应该在另一个goroutine中运行单独的http服务器,并响应
    /health
    /ready
    路径
  • 或者,我是否也应该让gRPC调用我的服务的活跃性和就绪性,并使用gRPC客户端查询这些端点
    以前,我在应用程序中运行了一个单独的http服务器,只是为了进行健康检查(这是因为AWS应用程序负载平衡器只有http检查,我不知道kube)

    如果您将http服务器作为一个单独的例程运行,并在主goroutine上运行grpc服务器,那么您应该避免grpc服务器宕机,http仍然是200-OK(假设您还没有http健康检查grpc的方法)

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

    如果您运行两台服务器,它们将需要在不同的端口上运行,这可能是某些计划程序(如ECS)的一个问题,这些计划程序要求一个服务有一个端口。有一些示例和软件包允许您在同一端口上多路传输多个协议。我想kube支持多端口服务,所以这可能不是问题

    链接到多路复用示例: