Проверяет понимание механизма работы StatefulSet с хранилищами в Kubernetes, включая PVC и стабильные идентификаторы.
StatefulSet в Kubernetes предназначен для управления приложениями с сохранением состояния, такими как базы данных или очереди. В отличие от Deployment, каждый под в StatefulSet имеет уникальный стабильный идентификатор (например, имя pod-0, pod-1), который сохраняется при перезапусках. Для работы с хранилищами StatefulSet использует специальный механизм — volumeClaimTemplates.
volumeClaimTemplates — это шаблон, который определяет спецификацию PersistentVolumeClaim (PVC). При создании StatefulSet Kubernetes автоматически создает отдельный PVC для каждого пода. Например, если в StatefulSet указано 3 реплики, то будут созданы PVC с именами, содержащими индекс пода: data-pod-0, data-pod-1, data-pod-2. Это гарантирует, что каждый под имеет собственное изолированное хранилище, которое не разделяется между подами.
Когда под пересоздается (например, после сбоя или обновления), он монтирует тот же PVC, что и раньше, благодаря стабильному имени. Это обеспечивает сохранность данных даже при перезапусках. Если под удаляется, PVC по умолчанию не удаляется, что позволяет восстановить данные при повторном создании пода с тем же индексом.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "nginx"
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1GiВ этом примере для каждого пода будет создан PVC с именем www-web-0, www-web-1 и т.д. Каждый PVC запрашивает 1Gi хранилища и монтируется в каталог /usr/share/nginx/html.
StatefulSet с volumeClaimTemplates идеально подходит для приложений, которым требуется уникальное хранилище на каждый экземпляр, например, для баз данных (PostgreSQL, MongoDB), кластеров Kafka или Elasticsearch. Это позволяет легко масштабировать приложение, сохраняя данные каждого экземпляра отдельно.
Важно помнить, что при удалении StatefulSet PVC не удаляются автоматически. Это сделано для защиты данных, но требует ручного управления, если нужно полностью очистить ресурсы.
Используйте StatefulSet с volumeClaimTemplates, когда ваше приложение требует стабильного хранилища для каждого экземпляра и сохранения данных при перезапусках. Это стандартный подход для stateful-приложений в Kubernetes, обеспечивающий надежность и предсказуемость.