--- # HorizontalPodAutoscalers for neuron-prod # Single Legion node today — minReplicas=1 prevents unnecessary idle waste. # When GCP GKE is live these minimums should go to 2 for HA. apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: neuron-mcp-hpa namespace: neuron-prod spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: neuron-mcp-blue minReplicas: 1 maxReplicas: 6 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 65 - type: Resource resource: name: memory target: type: Utilization averageUtilization: 80 behavior: scaleDown: stabilizationWindowSeconds: 300 # Don't thrash — wait 5m before scaling down policies: - type: Pods value: 1 periodSeconds: 120 scaleUp: stabilizationWindowSeconds: 30 policies: - type: Pods value: 2 periodSeconds: 60 --- apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: neuron-rest-hpa namespace: neuron-prod spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: neuron-rest minReplicas: 1 maxReplicas: 4 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 65 - type: Resource resource: name: memory target: type: Utilization averageUtilization: 80 behavior: scaleDown: stabilizationWindowSeconds: 300 scaleUp: stabilizationWindowSeconds: 30 --- apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: neuron-marketing-hpa namespace: neuron-prod spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: neuron-marketing # minReplicas=1 to match the file's own convention (see header comment). # Kubernetes only allows minReplicas=0 when at least one Object or External # metric is configured (queue depth, custom signal, etc.); with only a # Resource (CPU) metric, scale-to-zero is rejected and the whole HPA is # invalid — which was blocking neuron-prod's Argo CD sync. minReplicas: 1 maxReplicas: 8 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 70 behavior: scaleDown: stabilizationWindowSeconds: 120 scaleUp: stabilizationWindowSeconds: 15