Зачем это нужно
Кластер — общая платформа: десятки команд, prod и dev в одном контуре. RBAC ограничивает, кто может kubectl delete deployment в prod. HPA автоматически добавляет реплики inference при росте RPS. Эксплуатация — умение за минуты понять, почему сервис «красный», а не перезапускать наугад.
Это финальный урок модуля Kubernetes перед Helm: вы собираете полный минимальный prod-like контур.
Основные идеи
RBAC (Role-Based Access Control). Субъект (User, ServiceAccount) + Role (набор permissions) + RoleBinding:
Role / RoleBinding — в пределах namespace (команда ML в
ml-prod).ClusterRole / ClusterRoleBinding — cluster-wide (админы платформы).
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.
Нагрузочный тест (hey, locust) на
/predict.HPA поднимает replicas с 2 до 5.
Снятие нагрузки — scale down (с учётом stabilization window).
RBAC: ServiceAccount scorer только для чтения ConfigMap; человек в группе ml-dev — edit в ml-dev namespace, read-only в ml-prod.
Инцидент: latency вырос после deploy.
kubectl rollout historyCompare logs версий
При GitOps — revert Git revision (локальный
rollout undoдопустим только как временная mitigation)Postmortem — связь с Jenkins tag и Helm release (модуль 3.4)
Эксплуатация ML ≠ только CPU: следите за inference latency, GPU util, ошибками predict — но HPA на CPU уже полезный первый шаг.
Что сделать после занятия
Настройте HPA на учебный Deployment и покажите scale up под нагрузкой (скрин или описание).
Создайте RoleBinding: пользователь/SA может только
get,list,watchpods в своём namespace.Проведите учебный fire-drill: сломайте readinessProbe и восстановите по
kubectl describe.