03 · Платформа: DevOps, k8s, сеть, хранилище3.3 · Kubernetes углублённо3.3.6сложный

Безопасность и эксплуатация: 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:

  • 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.

  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 уже полезный первый шаг.

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

  • Настройте HPA на учебный Deployment и покажите scale up под нагрузкой (скрин или описание).

  • Создайте RoleBinding: пользователь/SA может только get, list, watch pods в своём namespace.

  • Проведите учебный fire-drill: сломайте readinessProbe и восстановите по kubectl describe.

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