StatefulSet стоит использовать для приложений, которым необходимы:
- Стабильная сетевая идентификация. Pod'ы получают уникальное, постоянное hostname в формате
<statefulset-name>-<pod-index>
.
- Стабильное, постоянное хранилище. Каждой реплике Pod'а назначается свой PersistentVolume. Даже при перезапуске Pod'а его данные остаются привязанными к нему.
- Упорядоченное развертывание и масштабирование. Pod'ы создаются и удаляются в строго определенном порядке (по возрастанию индекса для создания, по убыванию для удаления).
- Упорядоченное или параллельное обновление. Поддерживается как постепенное (rolling update), так и параллельное (in-place or parallel) обновление, но с возможностью контроля порядка.
Примеры таких приложений:
- Базы данных (MySQL, PostgreSQL, MongoDB)
- Брокеры сообщений (Kafka, RabbitMQMQ)
- Cache-системы (Redis, Memcached)
- Распределенные файловые системы (например, Ceph, если запускается в Kubernetes)
- Любое приложение, которому требуется сохранять состояние между перезапусками и иметь постоянную идентификацию.
В отличие от Deployment, где Pod'ы являются взаимозаменяемыми и