Как дождаться запуска сервиса kubernetes? - PullRequest
0 голосов
/ 01 июля 2019

В Куберне я создаю сервис:

V1ServicePort servicePort = new V1ServicePort().port(2000);
servicePort.setName("clientPort");

V1ServiceSpec spec = new V1ServiceSpec();
spec.addPortsItem(servicePort);
spec.setType("NodePort");
spec.putSelectorItem("app", "myAppName");

V1Service service = new V1Service();
service.setMetadata(new V1ObjectMeta().name("my_service"));
service.setSpec(spec);

api.createNamespacedService(namespace, myService, null);

но он не запускается сразу. Я могу подключиться к услуге через определенный порт только через 10 секунд.

Как выдать запрос на ожидание в Java, пока служба не запустится ?

1 Ответ

1 голос
/ 01 июля 2019

Обычно в Кубернетесе просто сбой. Обязательно запишите исключение или сообщение об ошибке.

Звучит плохо, но в реальности произойдет то, что Kubernetes по умолчанию перезапустит разбитые капсулы. Учитывая время запуска JVM, скорее всего, второй запуск займет 10 секунд. Если ваш процесс запускается очень быстро, вы кратко войдете в состояние CrashLoopBackOff, что означает, что Kubernetes делает паузу между перезапусками модуля.

Одним из важных следствий этого подхода является то, что если бэкэнд-сервис фактически не запускается, сервисы, которые зависят от него, также будут отображаться как сбойные (они застрянут в CrashLoopBackOff). Затем вы можете диагностировать это с помощью kubectl logs и посмотреть, что на самом деле происходит.

Другие приемы, такие как сценарий wait-for-it.sh , который часто встречается в настройках Docker Compose или просто помещает ваш вызов connect в цикл for, тоже будет работать, но для сбоя потребуется больше времени, если система в целом вредно для здоровья.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...