GRPC正在成爲雲原生微服務之間通訊的通用語言。若是您今天要將gRPC應用程序部署到Kubernetes,您可能想知道配置運行情況檢查的最佳方法。在本文中,咱們將討論grpc-health-probe,一種Kubernetes本地健康檢查gRPC應用程序的方法。linux
果您不熟悉,Kubernetes健康檢查(liveness and readiness probes)就是讓您的應用程序在您睡覺時保持可用的緣由。他們檢測到沒有響應的pod,將它們標記爲不健康,並致使這些pod從新啓動或從新調度。git
kubernetes自己不支持gRPC健康檢查。這使得gRPC開發人員在部署到Kubernetes時有如下三種方法:github
爲了標準化上面提到的「exec探針」方法,咱們須要:服務器
得慶幸的是,gRPC有一個標準的健康檢查協議。它能夠從任何語言輕鬆使用。生成的代碼和用於設置運行情況的實用程序幾乎都在gRPC的全部語言實現中提供。tcp
若是在gRPC應用程序中實現此運行情況檢查協議,則可使用標準/通用工具調用此Check()方法來肯定服務器狀態。微服務
下來你須要的是「標準工具」,它是grpc-health-probe。工具
使用此工具,您能夠在全部gRPC應用程序中使用相同的運行情況檢查配置。這種方法須要你:spa
您能夠將靜態編譯的grpc_health_probe打在容器映像中。選擇二進制版本並將其下載到Dockerfile中:code
RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \ wget -qO/bin/grpc_health_probe https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/${GRPC_HEALTH_PROBE_VERSION}/grpc_health_probe-linux-amd64 && \ chmod +x /bin/grpc_health_probe
在你的 Kubernetes Pod manifest中,指定容器的 livenessProbe and/or readinessProbe 。server
spec: containers: - name: server image: "[YOUR-DOCKER-IMAGE]" ports: - containerPort: 5000 readinessProbe: exec: command: ["/bin/grpc_health_probe", "-addr=:5000"] initialDelaySeconds: 5 livenessProbe: exec: command: ["/bin/grpc_health_probe", "-addr=:5000"] initialDelaySeconds: 10
服務器健康檢查的代碼實現,主要部分以下:
hsrv := health.NewServer() hsrv.SetServingStatus("", healthpb.HealthCheckResponse_SERVING) healthpb.RegisterHealthServer(s, hsrv)
完整代碼,請查看git倉庫。