aula-05: KEDA + Victoria Metrics para auto-scaling
- Auto-scaling baseado em pods indisponíveis e restarts - Victoria Metrics para coleta de métricas - NGINX Ingress com retry automático (5 tentativas) - Configuração ultra-agressiva: +5 pods/segundo - Script setup.sh para instalação completa - Mínimo 5 pods, máximo 30 pods
This commit is contained in:
135
aula-05/scaledobject.yaml
Normal file
135
aula-05/scaledobject.yaml
Normal file
@@ -0,0 +1,135 @@
|
||||
# =============================================================================
|
||||
# KEDA ScaledObject - Auto-scaling baseado em métricas do Victoria Metrics
|
||||
# =============================================================================
|
||||
#
|
||||
# O que é KEDA?
|
||||
# KEDA (Kubernetes Event-driven Autoscaling) permite escalar deployments
|
||||
# baseado em métricas externas, como Prometheus, Victoria Metrics, RabbitMQ, etc.
|
||||
#
|
||||
# Como funciona?
|
||||
# 1. KEDA consulta o Victoria Metrics a cada 'pollingInterval' segundos
|
||||
# 2. Se a métrica ultrapassar o 'threshold', ele escala UP
|
||||
# 3. Se a métrica ficar abaixo do 'threshold', ele escala DOWN
|
||||
# 4. O KEDA cria um HPA (Horizontal Pod Autoscaler) automaticamente
|
||||
#
|
||||
# =============================================================================
|
||||
|
||||
apiVersion: keda.sh/v1alpha1
|
||||
kind: ScaledObject
|
||||
metadata:
|
||||
name: node-bugado-scaledobject
|
||||
spec:
|
||||
# ---------------------------------------------------------------------------
|
||||
# CONFIGURAÇÃO BÁSICA
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# Deployment que será escalado
|
||||
scaleTargetRef:
|
||||
name: node-bugado
|
||||
|
||||
# Limites de réplicas
|
||||
minReplicaCount: 5 # Nunca menos que 5 pods (alta disponibilidade)
|
||||
maxReplicaCount: 30 # Nunca mais que 30 pods (limite de recursos)
|
||||
|
||||
# Frequência de verificação das métricas
|
||||
pollingInterval: 1 # Verifica a cada 1 segundo (mínimo possível)
|
||||
# Valores menores = reação mais rápida
|
||||
# Valores maiores = menos carga no Victoria Metrics
|
||||
|
||||
# Tempo de espera antes de iniciar scale down
|
||||
cooldownPeriod: 5 # Aguarda 5s após métricas normalizarem
|
||||
# Evita scale down prematuro
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# COMPORTAMENTO DO HPA (Horizontal Pod Autoscaler)
|
||||
# ---------------------------------------------------------------------------
|
||||
advanced:
|
||||
horizontalPodAutoscalerConfig:
|
||||
behavior:
|
||||
# SCALE UP - Quando precisa de mais pods
|
||||
scaleUp:
|
||||
stabilizationWindowSeconds: 0 # Sem espera - escala imediatamente
|
||||
policies:
|
||||
- type: Pods
|
||||
value: 5 # Adiciona 5 pods de cada vez
|
||||
periodSeconds: 1 # A cada 1 segundo pode adicionar mais
|
||||
# Exemplo: 5 -> 10 -> 15 -> 20 -> 25 -> 30 (em 5 segundos)
|
||||
|
||||
# SCALE DOWN - Quando pode reduzir pods
|
||||
scaleDown:
|
||||
stabilizationWindowSeconds: 10 # Aguarda 10s de métricas estáveis
|
||||
policies:
|
||||
- type: Percent
|
||||
value: 50 # Remove 50% dos pods por vez
|
||||
periodSeconds: 5 # A cada 5 segundos
|
||||
# Exemplo: 30 -> 15 -> 8 -> 5 (em 10 segundos)
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# TRIGGERS - Métricas que disparam o scaling
|
||||
# ---------------------------------------------------------------------------
|
||||
triggers:
|
||||
# -------------------------------------------------------------------------
|
||||
# TRIGGER 1: Pods Indisponíveis
|
||||
# -------------------------------------------------------------------------
|
||||
# Métrica: kube_deployment_status_replicas_unavailable
|
||||
# Origem: kube-state-metrics (coletado pelo Victoria Metrics)
|
||||
# Comportamento: Escala quando há pods que não estão prontos para receber tráfego
|
||||
#
|
||||
- type: prometheus
|
||||
metadata:
|
||||
# Endereço do Victoria Metrics (compatível com API do Prometheus)
|
||||
serverAddress: http://vmsingle-vm-victoria-metrics-k8s-stack.monitoring:8428
|
||||
|
||||
# Query PromQL - conta pods indisponíveis do deployment node-bugado
|
||||
query: |
|
||||
kube_deployment_status_replicas_unavailable{deployment="node-bugado", namespace="default"}
|
||||
|
||||
# threshold: valor da métrica que dispara o scaling
|
||||
# Se unavailable >= 1, adiciona pods
|
||||
threshold: '1'
|
||||
|
||||
# activationThreshold: valor mínimo para ativar o scaler
|
||||
# Só começa a escalar se unavailable >= 1
|
||||
activationThreshold: '1'
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# TRIGGER 2: Restarts Frequentes
|
||||
# -------------------------------------------------------------------------
|
||||
# Métrica: kube_pod_container_status_restarts_total
|
||||
# Origem: kube-state-metrics (coletado pelo Victoria Metrics)
|
||||
# Comportamento: Escala quando pods estão reiniciando muito (indica problemas)
|
||||
#
|
||||
- type: prometheus
|
||||
metadata:
|
||||
serverAddress: http://vmsingle-vm-victoria-metrics-k8s-stack.monitoring:8428
|
||||
|
||||
# Query PromQL - soma de restarts nos últimos 2 minutos
|
||||
# increase() calcula o incremento no período
|
||||
# sum() agrega todos os pods do deployment
|
||||
query: |
|
||||
sum(increase(kube_pod_container_status_restarts_total{namespace="default", pod=~"node-bugado.*"}[2m]))
|
||||
|
||||
# Se houve 1 ou mais restarts nos últimos 2 min, escala
|
||||
threshold: '1'
|
||||
activationThreshold: '1'
|
||||
|
||||
# =============================================================================
|
||||
# COMANDOS ÚTEIS PARA DEBUG
|
||||
# =============================================================================
|
||||
#
|
||||
# Ver status do ScaledObject:
|
||||
# kubectl get scaledobject
|
||||
# kubectl describe scaledobject node-bugado-scaledobject
|
||||
#
|
||||
# Ver HPA criado pelo KEDA:
|
||||
# kubectl get hpa
|
||||
# kubectl describe hpa keda-hpa-node-bugado-scaledobject
|
||||
#
|
||||
# Testar queries no Victoria Metrics:
|
||||
# kubectl run curl --rm -it --restart=Never --image=curlimages/curl -- \
|
||||
# -s "http://vmsingle-vm-victoria-metrics-k8s-stack.monitoring:8428/api/v1/query?query=kube_deployment_status_replicas_unavailable"
|
||||
#
|
||||
# Ver logs do KEDA operator:
|
||||
# kubectl logs -n keda -l app=keda-operator
|
||||
#
|
||||
# =============================================================================
|
||||
Reference in New Issue
Block a user