Ask an SRE a deceptively simple question: What is the right size for checkout-api, and how many replicas should it run right now?
Their Helm values specify replicas: 3, cpu: 1000m, and memory: 2Gi. But the live cluster tells a different story: HPA has scaled the app to 11 replicas on CPU load; VPA insists it is over-provisioned, recommending cpu: 350m and memory: 3.1Gi; KEDA demands 24 replicas due to an upstream Kafka lag spike; and Karpenter has provisioned two new nodes, sizing physical capacity strictly against declared requests rather than actual usage.
“Five sources yield five contradictory answers. Each controller acts logically in isolation, but none sees the complete picture.”
Five sources yield five contradictory answers. Each controller acts logically in isolation, but none sees the complete picture. This gap between isolated observations and actual workload needs represents a core architectural failure in modern Kubernetes operations.
Kubernetes and its components were built on the Unix philosophy: build small, modular tools that do one thing well. For container orchestration, this principle seemed intuitive:
In standard Unix environments, tools like grep and awk compose cleanly because they process immutable streams of text sequentially. One tool finishes and hands its output to the next.
Autoscaling controllers do not operate sequentially. requests , and the underlying node pool. Each runs in an independent reconciliation loop , assuming exclusive control over workload sizing without visibility into adjacent tools.
Source link







