Подтвердить что ты не робот

Почему StatefulSets? Не может ли постоянный том использовать константу?

Я новичок Kubernetes, как можно предположить, так что простите меня, если мое использование терминологии не совсем правильно. Я надеюсь, что цель моего вопроса, тем не менее, ясна.

Я пытаюсь обернуть голову вокруг Stateful Sets. Как их использование отличается от использования "безгосударственных" подсетей с постоянными томами? То есть, если предположить, что "нормальный" Pod может претендовать на постоянное хранение, то что я вижу без видимой вещи, которая требует этой новой конструкции (с упорядоченным запуском/остановкой и т.д.)?

4b9b3361

Ответ 1

Да, обычный блок может использовать постоянный том. Однако иногда у вас есть несколько контейнеров, которые логически образуют "группу". Примерами этого могут быть реплики базы данных, узлы ZooKeeper, узлы Kafka и т.д. Во всех этих случаях есть множество серверов, и они работают вместе и разговаривают друг с другом. Что особенно важно в них, так это то, что каждый человек в группе имеет личность. Например, для кластера базы данных один является мастером, а два являются последователями, и каждый из последователей связывается с мастером, позволяя ему знать, что он имеет и не синхронизировал. Таким образом, последователи знают, что "db-x-0" является мастером, и мастер знает, что "db-x-2" является последователем и имеет все данные до определенной точки, но все еще нуждается в данных, выходящих за рамки этого.

В таких ситуациях вам нужно несколько вещей, которые вы не можете легко получить из обычного контейнера:

  • Предсказуемое имя: вы хотите запустить свои стручки, рассказывая им, где найти друг друга, чтобы они могли создать кластер, выбрать лидера и т.д., но вам нужно заранее знать их имена, чтобы сделать это. Обычные имена групп случайны, поэтому вы не можете их заранее знать.
  • Устойчивый адрес/DNS-имя: вы хотите, чтобы все имена были доступны на шаге (1), чтобы оставаться неизменным. Если перезагрузится нормальный модуль (вы повторно развернете, хост, на котором он запускался, и т.д.) На другом хосте, он получит новое имя и новый IP-адрес.
  • Постоянная ссылка между человеком в группе и их постоянным томом: если хост, на котором работает один из ваших основных мастеров базы данных, он будет перемещен на новый хост, но должен подключиться к тот же постоянный том, как там один и только один том, который содержит правильные данные для этого "индивидуального". Так, например, если вы перегруппируете свою группу из 3 узлов базы данных, вы хотите, чтобы один и тот же человек (по имени DNS и IP-адресу) получил тот же постоянный том, что мастер все еще является ведущим и все еще имеет одни и те же данные, replica1 получает его данные и т.д.

StatefulSets решают эти проблемы, потому что они предоставляют (цитирование из https://kubernetes.io/docs/concepts/abstractions/controllers/statefulsets/):

  • Стабильные, уникальные сетевые идентификаторы.
  • Стабильное, постоянное хранилище.
  • Упорядоченное, изящное развертывание и масштабирование.
  • Упорядоченное, изящное удаление и завершение.

Я действительно не говорил о (3) и (4), но это также может помочь с кластерами, так как вы можете сказать, что первый из них будет использоваться, чтобы стать мастером, а следующий - первым, и считать его хозяином, и др.

Как уже отмечалось, вы действительно можете некоторые использовать одни и те же преимущества, используя обычные контейнеры и сервисы, но гораздо больше работают. Например, если вам нужны 3 экземпляра базы данных, вы можете вручную создать 3 развертывания и 3 службы. Обратите внимание, что вы должны вручную создать 3 развертывания, поскольку у вас не может быть точка обслуживания для одного модуля в развертывании. Затем, чтобы увеличить масштаб, вы вручную создадите другое развертывание и другую службу. Это действительно работает, и это была довольно распространенная практика до того, как появился PetSet/PersistentSet. Обратите внимание, что в нем отсутствуют некоторые из перечисленных выше преимуществ (например, постоянное сопоставление томов и фиксированный порядок начала).