[k8s] HPA и автоскейлинг для bot и web #74

Open
opened 2026-05-13 22:08:06 +03:00 by Toutsu · 0 comments
Owner

Контекст

После перехода на webhook (#71) и развёртывания в k8s (#72) нужно научиться горизонтально масштабировать бот-поды при нагрузке.

Что нужно

  1. HPA (HorizontalPodAutoscaler) для bot Deployment:
    • Метрика: CPU > 70% или память
    • Мин: 2, макс: 10 реплик
  2. HPA для web Deployment:
    • Метрика: CPU или custom metric (RPS)
    • Мин: 2, макс: 5 реплик
  3. metrics-server в кластере (если ещё нет — Minikube ставит по умолчанию)
  4. Session affinity (sticky sessions) — если Blazor Server требует WebSocket affinity, настраиваем service.spec.sessionAffinity: ClientIP

Блокеры

  • #71 (webhook) — без него HPA на боте невозможна
  • #58, #63 (health checks) — нужны для readiness/liveness

Критерии приёмки

  • kubectl get hpa показывает текущую и целевую реплики
  • При нагрузке реплики увеличиваются автоматически
  • При снижении нагрузки — уменьшаются (downscale stabilization)
  • WebSocket-сессии (Blazor) не рвутся при скейлинге (или работают через sticky sessions / Server-Side Blazor переподключается)
## Контекст После перехода на webhook (#71) и развёртывания в k8s (#72) нужно научиться горизонтально масштабировать бот-поды при нагрузке. ## Что нужно 1. **HPA** (HorizontalPodAutoscaler) для `bot` Deployment: - Метрика: CPU > 70% или память - Мин: 2, макс: 10 реплик 2. **HPA** для `web` Deployment: - Метрика: CPU или custom metric (RPS) - Мин: 2, макс: 5 реплик 3. **metrics-server** в кластере (если ещё нет — Minikube ставит по умолчанию) 4. **Session affinity** (sticky sessions) — если Blazor Server требует WebSocket affinity, настраиваем `service.spec.sessionAffinity: ClientIP` ## Блокеры - #71 (webhook) — без него HPA на боте невозможна - #58, #63 (health checks) — нужны для readiness/liveness ## Критерии приёмки - [ ] `kubectl get hpa` показывает текущую и целевую реплики - [ ] При нагрузке реплики увеличиваются автоматически - [ ] При снижении нагрузки — уменьшаются (downscale stabilization) - [ ] WebSocket-сессии (Blazor) не рвутся при скейлинге (или работают через sticky sessions / Server-Side Blazor переподключается)
Toutsu added this to the Этап — Kubernetes / k8s Production milestone 2026-05-13 22:08:06 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Toutsu/GmRelayBot#74