Сервис А готов, если он может обслуживать бизнес-запросы.Таким образом, если возможность достичь B является частью того, что ему нужно для выполнения (что, по-видимому, так и есть), он должен проверить B.
Преимущество наличия проверки A для B заключается в том, что выможет быстро потерпеть неудачу при плохом непрерывном обновлении .Скажем, ваш A неправильно настроен, так что в обновлении указана неверная информация о соединении для B - возможно, имя службы B введено как переменная среды, а новая версия содержит опечатку.Если ваши экземпляры A проверяются на Bs при запуске, вы можете легче гарантировать, что обновление завершится неудачно и что трафик не поступит на новые неправильно сконфигурированные блоки.Подробнее об этом см. https://medium.com/spire-labs/utilizing-kubernetes-liveness-and-readiness-probes-to-automatically-recover-from-failure-2fe0314f2b2e
. Обычно A достаточно для проверки конечной точки живучести B или любой конечной точки минимальной доступности, а не конечной точки готовности B.Это потому, что kubernetes будет проверять проверку готовности B для вас в любом случае , поэтому любой экземпляр B, к которому может обратиться A, будет готов.Вызов конечной точки жизнеспособности B, а не готовности, может иметь значение, если конечная точка готовности B выполняет больше проверок, чем контрольная точка .Имейте в виду, что kubernetes будет регулярно вызывать эти зонды - готовность, а также жизнеспособность - у них обоих есть период .Разница заключается в том, был ли модуль снят с обслуживающего трафика (если не удается подготовиться) или перезапущен (если не удалось обеспечить работоспособность).Вы не пытаетесь выполнить сквозные проверки транзакций , вы хотите, чтобы эти проверки содержали минимальную логику и не использовали слишком большую нагрузку.
Предпочтительно, если код внутриРеализация готовности A выполняет проверку, а не проверку на уровне k8s (в самой спецификации Pod).На втором месте лучше всего делать это на уровне k8s, так как в идеале вы хотите знать, что код, работающий в контейнере, действительно соединяется.
Другой способ проверить, доступны ли зависимые сервисы - это проверкав initContainer .Использование initContainers позволяет избежать многократного перезапуска во время запуска (путем обеспечения правильного упорядочения), но выполнение проверок зависимостей с помощью проб может пойти глубже (если это реализовано в коде приложения), и пробники будут продолжать периодически запускаться после запуска.Так что может быть выгодно использовать оба.
Будьте внимательны при проверке готовности других служб к чрезмерной готовности, поскольку это может привести к каскадной недоступности.Например, если бэкэнд ненадолго отключается, а внешний интерфейс проверяет его, то внешний интерфейс также станет недоступным и не сможет отображать хорошее сообщение об ошибке.Возможно, вы захотите начать с простых проб и осторожно добавлять сложность по ходу работы.