MLOps Path

3.3.3 · блок 3

Конфигурация и планирование: ConfigMap, Secret, scheduling

Конфигурация и планирование: ConfigMap, Secret, scheduling

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

Образ inference один; окружения разные: dev/staging/prod, разные URL S3, пороги модели, лимиты batch size. Зашивать это в Dockerfile — антипаттерн. Kubernetes отделяет образ от конфигурации (ConfigMap, Secret) и решает куда посадить Pod (scheduler, taints, affinity).

Для ML-платформы это же механизм: GPU-ноды только для тяжёлых Pod'ов, prod namespace без debug env.

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

ConfigMap — некритичная конфигурация. Key-value или целые файлы. Монтируют как env или volume:


env:
  - name: MODEL_NAME
    valueFrom:
      configMapKeyRef:
        name: scorer-config
        key: model_name

Пример: batch_size, log_level, путь к конфигу препроцессинга.

Secret — чувствительные данные. Base64 в etcd (не шифрование по умолчанию — в prod нужен encryption at rest). API keys, пароли БД, imagePullSecrets для private registry. Не коммитьте Secret YAML с реальными значениями в Git — используйте Sealed Secrets / external secret operator в enterprise; на курсе — kubectl create secret.

Разделение config и secrets. В Helm (3.4) values для ConfigMap; Secret — отдельный chart overlay или CI-generated.

Scheduler basics. kube-scheduler фильтрует nodes (достаточно ресурсов? tolerations?) и ранжирует (affinity, spread).

Taints и tolerations. Node «загрязнена» taint gpu=true:NoSchedule — обычные Pod'ы не сядут. Pod с matching tolerations — может. Так выделяют GPU-пул для inference на Triton.

Node affinity / anti-affinity. «Запускать только на nodes с label zone=east» или «не класть все реплики на одну node» — для отказоустойчивости.

Pod topology spread. Равномерное распределение реплик по зонам — меньше риск, что падение одной AZ убьёт весь сервис.

Priority and preemption. В перегруженном кластере важные Pod'ы (prod inference) могут вытеснять менее приоритетные — тема эксплуатации.

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

Inference Deployment:

Изменили ConfigMap — Pod не перезапустится автоматически (если только env не через downward API с reload sidecar). После kubectl apply ConfigMap нужен rollout restart: kubectl rollout restart deployment/scorer.

Scheduling debug:


kubectl describe pod scorer-xxx | grep -A5 Events

FailedScheduling + 0/5 nodes available: 5 Insufficient nvidia.com/gpu — ясный сигнал.

Практикум: связать Deployment с PVC (следующий урок), ConfigMap для пути модели на томе, limits CPU/RAM.

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

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

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