Airbnb moved nearly all online services from hand-scaled EC2 machines onto thousands of Kubernetes nodes across a hundred-plus clusters, then had to teach the autoscaler Airbnb-specific business logic to keep it efficient.
Thousands of nodes, a hundred-plus clusters, and a custom gRPC expander built to give the Kubernetes Cluster Autoscaler Airbnb's own judgment.
Before Kubernetes, each instance of a service at Airbnb ran on its own EC2 machine, manually scaled to handle traffic increases. Capacity management varied team by team, and capacity would rarely be un-provisioned once load dropped — nobody was in a hurry to give resources back.
AFTER
Thousands of nodes, a shared control plane
Over the following years, Airbnb shifted almost all online services from manually orchestrated EC2 instances to Kubernetes. Today it runs thousands of nodes across nearly a hundred clusters. Adding the Kubernetes Cluster Autoscaler — which adds nodes when pending pods can’t be scheduled and removes nodes that sit underutilized — saved roughly 5% of Airbnb’s total cloud spend on top of the operational overhead it eliminated. Airbnb’s own custom scaling component, a pluggable gRPC “Expander,” was accepted upstream into Cluster Autoscaler and became available in the v1.24.0 release.
THE BRIDGE
Three stages, from homogeneous to heterogeneous
The migration happened in three stages. Stage one was basic: a handful of homogeneous clusters, one node type each, scaled manually — still an improvement, because it consolidated capacity management to a single control point. Stage two introduced the “cluster type” abstraction as workloads diversified, and Cluster Autoscaler took over sizing each cluster automatically. But more cluster types meant more clusters — types grew past 30 and clusters past 100 — and every cluster upgrade now had to be individually tested against each type, which made management tedious.
Stage three consolidated cluster types into heterogeneous clusters that could host varied workloads under a single control plane, improving bin packing and utilization. That flexibility exposed a gap: Cluster Autoscaler’s built-in Expanders — random or fixed-priority — couldn’t express Airbnb’s actual scaling priorities around cost and instance type. Forking Cluster Autoscaler wasn’t attractive either, since Airbnb’s business logic wasn’t useful to anyone else and the project’s own release review was too slow for logic that changes continuously.
WHAT IT COST
Consolidation before speed
None of this was free. Heterogeneous clusters and a custom scaling path are more moving parts than the simple homogeneous setup Airbnb started with, and the team had to build and operate its own gRPC server rather than lean entirely on upstream defaults. But with the largest share of Airbnb’s compute now on one platform, that consolidation became the lever for the next round of efficiency work — reducing cluster-type sprawl instead of managing around it.
A fork of someone else’s infrastructure is a debt you pay every release forever; a pluggable interface you upstream is a debt you pay once.
Three Airbnb infra posts tracking the same Kubernetes platform maturing under stateless, stateful, and sidecar workloads.
A plain-language, AI-drafted and human-edited retelling of the article published on medium.com, reorganized and explained in our own structure and words, with original analysis in the editor's note above. The facts, numbers, and decisions belong to the original author and are not altered. For the full depth, read the source.