У меня есть консольное приложение в ядре .net. Как внедрить проверку готовности/живучести Kubernetes?
Мое приложение обрабатывает сообщения rabbitmq в цикле и не слушает никаких http-портов.
У меня есть консольное приложение в ядре .net. Как внедрить проверку готовности/живучести Kubernetes?
Мое приложение обрабатывает сообщения rabbitmq в цикле и не слушает никаких http-портов.
В этом случае может быть лучше создать sidecar-контейнер в том же модуле. В этом контейнере будет размещаться сайт ASP.NET Core, специально предназначенный для использования нового API проверки работоспособности, недавно представленного в .NET Core 2.2. Существуют расширения для мониторинга подключения rabbitmq. Затем вы должны открыть веб-сайт ASP.NET Core для проверки работоспособности.
ASP.NET Core Мониторинг состояния
AspNetCore.HealthChecks.Rabbitmq
Проверка готовности не имеет смысла для этого сценария, поскольку вы не будете направлять трафик через Сервис. Поскольку ваше приложение самостоятельно считывает rabbitmq, оно будет делать это независимо от зондов kube. Однако есть логика в использовании проверки живучести, когда вы можете перезапустить контейнер, если процесс внутри каким-то образом потерпел неудачу.
Вы можете либо создать конечную точку API состояния, которая будет прослушивать HTTP-запросы на каком-либо порту и отвечать 200 OK, если ваше приложение работоспособно (вам нужна некоторая логика внутри, чтобы определить, что означает работоспособность), либо использовать зонд на основе команд для запуска команды, которая будет сделайте некоторую проверку и сообщите, в порядке ли контейнер или нет.
Вот несколько хороших решений для добавления проверки работоспособности в приложение, отличное от asp (например, в консольное приложение):
Выполнение проверки работоспособности в .NET Core Worker Service
Я бы предложил реализовать решение TCP, так как оно минимально, но все же дает ожидаемый результат.