Middle
Барои кадом барнома бояд истифода бурдани StatefulSet ба ҷои Deployment ва чаро?
sobes.tech AI
Ҷавоб аз AI
StatefulSet треба використовувати для додатків, яким потрібні:
- Стабільна мережева ідентифікація. Pod-и отримують унікальну, постійну hostname у форматі
<statefulset-name>-<pod-index>. - Стабільне, постійне сховище. Кожній репліці Pod-а призначається свій PersistentVolume. Навіть при перезапуску Pod-у його дані залишаються прив’язаними до нього.
- Упорядковане розгортання та масштабування. Pod-и створюються та видаляються у строго визначеному порядку (за зростанням індексу для створення, за спаданням для видалення).
- Упорядковане або паралельне оновлення. Підтримується як поступове (rolling update), так і паралельне (in-place або parallel) оновлення, але з можливістю контролю порядку.
Приклади таких додатків:
- Бази даних (MySQL, PostgreSQL, MongoDB)
- Брокери повідомлень (Kafka, RabbitMQ)
- Кеш-системи (Redis, Memcached)
- Розподілені файлові системи (наприклад, Ceph, якщо запускається у Kubernetes)
- Будь-який додаток, якому потрібно зберігати стан між перезапусками та мати постійну ідентифікацію.
На відміну від Deployment, де Pod-и є взаємозамінними та stateless, StatefulSet гарантує унікальність і збереження стану для кожної репліки, що критично для додатків, залежних від постійного збереження даних і стабільної мережевої ідентифікації.
Приклад найпростіший StatefulSet для бази даних:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
serviceName: "mysql" # Необхідно для стабільної мережевої ідентифікації Pod-ів
replicas: 3
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "password" # У продакшені використовувати Secrets
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql # Шлях, куди монтується постійне сховище
volumeClaimTemplates:
- metadata:
name: mysql-persistent-storage # Ім’я шаблону PVC
spec:
accessModes: [ "ReadWriteOnce" ] # Режим доступу
resources:
requests:
storage: 10Gi # Запитуваний об’єм сховища