Estoy usando una plantilla HPA k8s para CPU y memoria como se muestra a continuación:
--- apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: {{.Chart.Name}}-cpu labels: app: {{.Chart.Name}} chart: {{.Chart.Name}} spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: {{.Chart.Name}} minReplicas: {{.Values.hpa.min}} maxReplicas: {{.Values.hpa.max}} targetCPUUtilizationPercentage: {{.Values.hpa.cpu}} --- apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: {{.Chart.Name}}-mem labels: app: {{.Chart.Name}} chart: {{.Chart.Name}} spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: {{.Chart.Name}} minReplicas: {{.Values.hpa.min}} maxReplicas: {{.Values.hpa.max}} metrics: - type: Resource resource: name: memory target: type: Utilization averageValue: {{.Values.hpa.mem}}Tener dos HPA diferentes hace que los nuevos pods se activen para activar el límite de HPA de memoria para que la CPU HPA finalice inmediatamente, ya que el uso de CPU de los pods está por debajo del desencadenante de reducción de escala para CPU. Siempre finaliza el pod más nuevo, lo que mantiene los pods más antiguos y activa la memoria HPA nuevamente, lo que provoca un bucle infinito. ¿Hay alguna manera de indicarle a la CPU HPA que termine los pods con un mayor uso en lugar de los pods incipientes cada vez?
Según la sugerencia en los comentarios, usar un solo HPA resolvió mi problema. Solo tuve que mover la CPU HPA a la misma apiVersion que la memoria HPA.