Deployment обеспечивает декларативное обновление Pod'ов и ReplicaSet'ов. Основное назначение — управление stateless-приложениями. Pod'ы, создаваемые Deployment'ом, идентичны и взаимозаменяемы. При масштабировании или обновлении Pod'ы могут быть полностью заменены новыми. Не гарантируется сохранение identity Pod'ов (имя, сетевая идентичность) или порядок их создания/удаления. Используются для веб-серверов, микросервисов без персистентного состояния.
StatefulSet предназначен для управления stateful-приложениями. Он обеспечивает стабильную сетевую идентичность, стабильное персистентное хранилище и строго упорядоченное развертывание/масштабирование/удаление Pod'ов. Каждый Pod в StatefulSet имеет уникальный, стабильный hostname (например, <statefulset-name>-<ordinal-index>) и связывается с PersistentVolumeClaim, который гарантирует сохранение данных. Подходит для баз данных (PostgreSQL, MySQL), распределенных систем (Kafka, ZooKeeper).
Основные отличия в таблице:
| Характеристика | Deployment | StatefulSet |
|---|---|---|
| Тип приложений | Stateless (без состояния) | Stateful (с состоянием) |
| Идентичность Pod'ов | Неуникальная, взаимозаменяемая | Уникальная, стабильная (hostname, ID) |
| Порядок создания/удаления | Произвольный | Строго упорядоченный по порядковому индексу |
| Хранилище данных | Временное, не гарантируется персистентность | Стабильное, персистентное (через PVC) |
| Сетевая идентичность | Произвольная, меняется при замене Pod'а | Стабильная, сохраняется (через Headless Service) |
| Масштабирование | Параллельное | Последовательное, по порядку |
Пример Manifest'а для StatefulSet:
yaml
Пример Manifest'а для Deployment:
yaml