Я пишу один сервис grpc и использую проверку работоспособности gRPC в Kubernetes (https://github.com/grpc-ecosystem/grpc-health-probe).). На моем сервере я добавил другую реализацию (одну для живучести, а другую для готовности) конечных точек. Мне интересно, как работает эта утилита зондадвоичные различия между проверкой живучести и проверкой готовности? Должен быть какой-то другой способ определить его в yaml, а не только ["bin / grpc_health_probe", "-addr =: 8801"]
server = ServerBuilder.forPort(port)
.addService(new GrpcModuleHealthCheck())
.addService(new GrpcModuleReadinessCheck())
.addService(ProtoReflectionService.newInstance())
.build.start
В развертывании в Kubernetesyaml, я использую следующие конфигурации
livenessProbe:
failureThreshold: 3
exec:
command: ["bin/grpc_health_probe", "-addr=:8801"]
initialDelaySeconds: 240
periodSeconds: 20
successThreshold: 1
timeoutSeconds: 15
readinessProbe:
failureThreshold: 3
exec:
command: ["bin/grpc_health_probe", "-addr=:8801"]
initialDelaySeconds: 20
periodSeconds: 20
successThreshold: 1
timeoutSeconds: 15
Я только что проверил и обнаружил, что реализация "GrpcModuleReadinessCheck" (класс здоровья, который я добавил последним) вступает в силу, когда я просто выполняю свой модуль kubernetes
kubectl exec -it <MY_POD_NAME> -- /bin/bash
bash-4.4$ ./grpc_health_probe -addr=localhost:8801
status: SERVING