MLOps Path

3.5.1 · блок 3

Зачем распределённое хранилище в Kubernetes

Зачем распределённое хранилище в Kubernetes

Зачем это нужно

В модуле 3.3 вы уже видели PV/PVC и StorageClass. Но откуда берётся сам диск? В облаке провайдер создаёт EBS или Persistent Disk автоматически. В on-prem или учебном кластере на bare metal такого «магического» API нет — нужен слой, который превращает локальные диски node'ов в надёжное блочное хранилище для Pod'ов.

Для ML это критично:

Распределённое блочное хранилище (Longhorn, Ceph RBD, OpenEBS) даёт Kubernetes динамические тома с репликацией между node'ами — как если бы у каждого Pod был свой «мини-диск в облаке», только внутри вашего кластера.

Основные идеи

Локальный диск node vs распределённый том.

Репликация. Типично 2–3 копии блока на разных node'ах. Отказ одной машины не убивает том. Цена — лишний трафик и место на дисках.

Согласованность и производительность. Блочное хранилище хорошо для БД и random I/O (checkpoint, SQLite, PostgreSQL). Для огромных артефактов моделей (десятки GB) чаще используют object storage (MinIO, модуль 3.5.3) — дешевле и проще шарить между сервисами.

StorageClass как контракт. Админ кластера создаёт класс longhorn с параметрами репликации. Разработчик в PVC пишет только storageClassName: longhorn и 10Gi — не думает, на какой node лежат блоки.

Связь с access modes (повторение 3.3.5).

Когда НЕ нужен Longhorn. Статeless inference без локального кэша — достаточно emptyDir или скачивания модели при старте из MinIO. Не создавайте PVC «на всякий случай»: каждый том — операционная нагрузка (backup, мониторинг, capacity planning).

Как это выглядит на практике

Типичная схема для ML inference с кэшем:


MinIO (модель v42)  →  init container скачивает в PVC  →  main container читает /models
                              ↑
                         Longhorn RWO 10Gi

1. Data scientist публикует model.onnx в bucket ml-models.

2. Deployment с PVC model-cache (StorageClass longhorn).

3. Init container: aws s3 cp s3://ml-models/v42/model.onnx /models/ (или mc/minio client).

4. Основной контейнер с FastAPI/Triton монтирует /models read-only.

При eviction Pod'а Kubernetes поднимает новый экземпляр на другой node — Longhorn reattach'ит том, init container при необходимости догружает diff.

Диагностика на платформе MDP:


kubectl get storageclass
kubectl get pvc -n ml-dev
kubectl get volumes.longhorn.io -n longhorn-system   # если CRD установлен

Если PVC в Pending — нет provisioner'а, исчерпан pool дисков или не совпадает StorageClass.

Что сделать после занятия

Официальные материалы

Открыть интерактивную версию