Ответ
Kubernetes предлагает несколько абстракций для работы с данными, от временных до постоянных.
1. Тома (Volumes), привязанные к жизненному циклу пода
emptyDir: Создается при создании пода на ноде и удаляется при удалении пода. Используется для обмена данными между контейнерами в одном поде или как кэш.volumes: - name: shared-data emptyDir: {}hostPath: Монтирует файл или директорию с файловой системы хостовой ноды в под. Опасно для продакшена (зависит от ноды, нарушает безопасность), но полезно для системных демонов (например, мониторинга), которым нужен доступ к/procили/var/lib/docker.
2. Постоянное хранилище (Persistent Storage)
Это основное решение для stateful-приложений. Основано на двух ресурсах:
- PersistentVolume (PV): Абстракция физического ресурса хранения в кластере (например, облачный диск, NFS-шара). Администратор создает PV.
- PersistentVolumeClaim (PVC): Запрос пользователя (пода) на определенное количество ресурсов хранилища. Kubernetes привязывает подходящий PV к PVC.
# PVC (в манифесте пода или StatefulSet) kind: PersistentVolumeClaim apiVersion: v1 metadata: name: postgres-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: fast-ssd
3. Динамическое выделение хранилища (StorageClass)
Позволяет автоматически создавать PV по запросу PVC. Определяет "класс" хранилища (например, fast-ssd, slow-hdd).
# PVC с указанием StorageClass триггерит создание PV в облаке
kind: PersistentVolumeClaim
metadata:
name: dynamic-pvc
spec:
storageClassName: gp2 # AWS EBS класс
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
4. Конфигурация и секреты (ConfigMap, Secret)
- ConfigMap: Хранит конфигурационные данные в виде пар ключ-значение или файлов. Монтируется в под как переменные окружения или файлы.
- Secret: Аналогичен ConfigMap, но предназначен для хранения чувствительных данных (пароли, токены). Данные хранятся в base64-кодировке.
Практическая рекомендация: Для баз данных (PostgreSQL, Redis) всегда используйте StatefulSet в связке с PersistentVolumeClaim и StorageClass. Это обеспечивает стабильные сетевые идентификаторы (postgres-0, postgres-1) и то, что каждый под получит свой уникальный том, который будет следовать за ним при пересоздании на другой ноде.