Если нет различий между различными экземплярами служб (репликами модуля, обслуживающего приложение без состояния), вы можете предоставить их в рамках службы ClusterIP, так как подключение к любой реплике для обслуживания текущего запроса в порядке. Это не относится к сервисам с отслеживанием состояния (например, Kafka, базы данных и т. Д. c). Каждый экземпляр отвечает за свои данные. У каждого экземпляра может быть свой раздел / topi c et c. Экземпляры службы не являются точными «репликами». Решения для запуска таких сервисов с состоянием в Kubernetes обычно используют безголовые сервисы и / или наборы состояний, чтобы каждый экземпляр сервиса имел уникальную идентификацию. Такие приложения с состоянием обычно имеют свою собственную технологию кластеризации, которая опирается на каждый экземпляр в кластере, имеющий уникальную идентификацию.
Теперь, когда вы знаете, почему стабильные идентификаторы требуются для приложений с сохранением состояния и как наборы состояний с автономными службами обеспечивают стабильные идентификаторы, вы можете проверить, как ваши дистрибутивы Kafka могут использовать их для запуска Kafka в kubernetes.
В этой записи блога объясняется, как это делает стримзи:
Для StatefulSets - который Strimzi использует для запуска брокеров Kafka - вы можете использовать службу без головы Kubernetes дать каждому из модулей стабильное имя DNS. Strimzi использует эти DNS-имена в качестве рекламных адресов для брокеров Kafka. Так и со Strimzi:
Первоначальное соединение выполняется с использованием обычного сервиса Kubernetes для получения метаданных.
Последующие соединения открываются с использованием DNS-имен, присвоенных модулям другой безголовой службой Kubernetes.