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:
- 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,watchpods в своём namespace. - [ ] Проведите учебный fire-drill: сломайте readinessProbe и восстановите по
kubectl describe.