MLOps Path

3.3.6 · блок 3

Безопасность и эксплуатация: RBAC, HPA, диагностика

Безопасность и эксплуатация: RBAC, HPA, диагностика

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

Кластер — общая платформа: десятки команд, prod и dev в одном контуре. RBAC ограничивает, кто может kubectl delete deployment в prod. HPA автоматически добавляет реплики inference при росте RPS. Эксплуатация — умение за минуты понять, почему сервис «красный», а не перезапускать наугад.

Это финальный урок модуля Kubernetes перед Helm: вы собираете полный минимальный prod-like контур.

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

RBAC (Role-Based Access Control). Субъект (User, ServiceAccount) + Role (набор permissions) + RoleBinding:

ServiceAccount Pod'а — identity для доступа к Kubernetes API (sidecar, operator) и для cloud IAM через workload identity (облако).

Принцип least privilege: разработчику — get/list Pod и logs, не delete namespace.

Pod Security Standards / Security Context. Запуск не от root, readOnlyRootFilesystem, drop capabilities — снижает риск escape. Для ML-образов иногда конфликт с legacy библиотеками — обсуждайте с platform team.

Horizontal Pod Autoscaler (HPA). Масштабирует Deployment по метрикам (CPU, memory, custom — QPS inference):


apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: scorer
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: scorer
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70

Нужен metrics-server (или custom metrics adapter). GPU autoscaling — отдельная тема (queue depth, latency).

Vertical Pod Autoscaler (VPA) — рекомендует/меняет requests; осторожно с stateful workloads.

Диагностика — шпаргалка

| Статус | Действие |

|--------|----------|

| Pending | `describe pod` → scheduling, PVC |

| CrashLoopBackOff | `logs --previous`, проверить command, модель |

| OOMKilled | увеличить memory limit или утечка |

| ImagePullBackOff | тег, imagePullSecrets |

| Running not ready | readinessProbe, загрузка модели |

kubectl rollout. kubectl rollout status deployment/scorer, kubectl rollout undo — быстрый rollback образа. Но при Argo CD с включённым self-heal ручной undo временный: контроллер вернёт состояние из Git. Корректный GitOps rollback — git revert манифеста/values или возврат к одобренной revision через Git.

Events и observability. kubectl get events --sort-by=.lastTimestamp — блок 5 добавит метрики и алерты; пока — logs и events.

Quota и LimitRange. Namespace quota не дать одной команде съесть весь кластер GPU.

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

Практикум: Deployment + Service + PVC + HPA.

1. Нагрузочный тест (hey, locust) на /predict.

2. HPA поднимает replicas с 2 до 5.

3. Снятие нагрузки — scale down (с учётом stabilization window).

RBAC: ServiceAccount scorer только для чтения ConfigMap; человек в группе ml-dev — edit в ml-dev namespace, read-only в ml-prod.

Инцидент: latency вырос после deploy.

1. kubectl rollout history

2. Compare logs версий

3. При GitOps — revert Git revision (локальный rollout undo допустим только как временная mitigation)

4. Postmortem — связь с Jenkins tag и Helm release (модуль 3.4)

Эксплуатация ML ≠ только CPU: следите за inference latency, GPU util, ошибками predict — но HPA на CPU уже полезный первый шаг.

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

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

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