Я прочитал несколько отрывков из некоторых книг, написанных на Кубернете, а также страницу об услугах безглавых в документах. Но я все еще не уверен, что это на самом деле делает, и почему кто-то его использовал. Кто-нибудь имеет хорошее представление об этом, что он совершает и почему кто-то его использует?
Что такое безголовый сервис, что он делает/выполняет, и каковы некоторые законные варианты использования?
Ответ 1
Ну, я думаю, вам нужна теория. Есть много объяснений (включая официальные документы) по всему Интернету, но я думаю, что Марко Лукша сделал это лучше всего:
Каждое соединение с услугой направляется на один случайно выбранный резервный модуль. Но что, если клиенту нужно подключиться ко всем этим стручкам? Что, если сами подставки требуют, чтобы каждый подключался ко всем другим поддерживающим стручкам. Невозможно выполнить соединение через службу. Что такое?
Чтобы клиент мог подключаться ко всем контейнерам, он должен определить IP для каждого отдельного контейнера. Один из вариантов заключается в том, чтобы клиент вызывал сервер API Kubernetes и получал список модулей и их IP-адресов через вызов API, но поскольку вы всегда должны стремиться поддерживать ваши приложения Kubernetes-agnostic, использование сервера API не является идеальным
К счастью, Kubernetes позволяет клиентам обнаруживать IP-адреса pod через поиск DNS. Обычно, когда вы выполняете поиск DNS для службы, DNS-сервер возвращает один IP-адрес IP-адреса служб. Но если вы скажете Kubernetes, вам не нужен IP-адрес кластера для вашей службы (вы делаете это, установив для поля clusterIP значение None в спецификации службы), DNS-сервер вернет IP-адреса pod вместо одного IP-сервиса. Вместо того, чтобы возвращать одну запись DNS A, DNS-сервер будет возвращать несколько записей A для службы, каждый из которых указывает на IP-адрес отдельного модуля, поддерживающего службу в данный момент. Таким образом, клиенты могут выполнять простой поиск записей в DNS и получать IP-адреса всех компонентов, входящих в эту службу. Затем клиент может использовать эту информацию для подключения к одному, многим или ко всем из них.
Установка поля clusterIP в спецификации сервиса None делает службу безглавой, поскольку Kubernetes не будет назначать ей IP-адрес кластера, через который клиенты могут подключаться к поддерживающим его модулям.
"Кубернетес в действии" Марко Лукша
Ответ 2
Я думаю, что наиболее распространенный вариант использования в основном относится к StatefulSets, которым в настоящее время требуется служба безголового доступа. См. why-statefulsets-cant-a-stateless-pod-use-persistent-volume, когда вы можете использовать один из них...