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).
Надеюсь, эта информация вам поможет.