Тома Kubernetes: когда нужен Statefulset? - PullRequest
0 голосов
/ 12 июля 2020

Я подхожу к объемам и передовым методам k8s и заметил, что при чтении документации кажется, что вам всегда нужно использовать ресурс StatefulSet , если вы хотите реализовать постоянство в своем кластере:

«StatefulSet - это объект API рабочей нагрузки, используемый для управления приложениями с отслеживанием состояния».

Я реализовал несколько руководств, некоторые из них используют StatefulSet, а некоторые нет .

На самом деле, допустим, я хочу сохранить некоторые данные, у меня могут быть свои модули без сохранения состояния (даже MySql серверные модули!), В которых я использую PersistentVolumeClaim, который сохраняет состояние. Если я остановлюсь и перезапущу кластер, я могу возобновить состояние из тома без необходимости в StatefulSet.

Я прилагаю здесь пример репозитория Github, в котором есть приложение с отслеживанием состояния с MySql и без StatefulSet вообще: https://github.com/shri-kanth/kuberenetes-demo-manifests

Итак, действительно ли мне нужно использовать ресурс StatefulSet для баз данных в k8s? Или есть какие-то c случаи, когда это может быть необходимой практикой?

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

StatefulSet не то же самое, что PV + PV C.

StatefulSet управляет подами, которые основаны на идентичном контейнере spe c. В отличие от развертывания, StatefulSet поддерживает закрепленную идентичность для каждого из своих модулей. Эти поды созданы из одного и того же spe c, но не являются взаимозаменяемыми: у каждого есть постоянный идентификатор, который он поддерживает при любом изменении расписания.

Другими словами, он управляет развертыванием и масштабированием набора подов, и предоставляет гарантии относительно порядка и уникальности этих модулей.

Так действительно ли мне нужно использовать ресурс StatefulSet для баз данных в k8s?

Это зависит от того, что вы хотели бы достичь.

StatefulSet дает вам:

  • Возможность иметь стабильный сетевой идентификатор (так что ваши поды будут всегда с именем $(statefulset name)-$(ordinal))
  • Возможность иметь стабильное хранилище, поэтому, когда Pod (повторно) запланирован на узел, его volumeMounts монтирует PersistentVolumes, связанные с его утверждениями PersistentVolume.

. .. MySql и без StatefulSet ...

Как видите, если ваша цель - запустить единственный модуль RDBMS (например, Mysql), в котором хранятся все его данные (сама БД ) o n PV + PV C, StatefulSet определенно является излишним.

Однако, если вам нужно запустить кластер Redis (распределенная БД) :-D, это будет практически невозможно сделать без StatefulSet (насколько мне известно и основан на многочисленных обсуждениях примерно того же в StackOverflow).

Надеюсь, эта информация вам поможет.

0 голосов
/ 13 июля 2020

PVC - не единственная причина использовать Statefulsets вместо Deployments. Как указано в руководстве Kubernetes :

StatefulSets полезны для приложений, требующих одного или нескольких из следующих условий:

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

Подробнее о требованиях к базе данных можно узнать, когда развернуто на Kubernetes здесь Запускать или не запускать базу данных на Kubernetes

...