Karpenter: provision the node a pending Pod actually needs
Karpenter is a node autoscaler that watches for Pods the scheduler could not place. For each batch of unschedulable Pods it examines their combined requirements (CPU, memory, GPU, architecture, zone constraints, tolerations, topology spread) and selects the cheapest suitable instance types from the pool allowed by your NodePools. It then calls the EC2 Fleet API directly to launch instances, and the nodes join the cluster in well under a minute. Press the right arrow to follow the five steps.
The contrast with the Cluster Autoscaler is architectural. The Cluster Autoscaler scales existing node groups, so you must pre-define groups for every instance type or shape you may need. Karpenter has no node groups: it can pick from hundreds of instance types, mix Spot and On-Demand, bin-pack several Pods onto one node and choose a size that matches the actual demand. That typically improves both startup time and cost.
Karpenter also works in reverse. It continuously evaluates whether nodes can be removed or replaced with cheaper ones (consolidation), which the next slides cover. It is an open-source project that started at AWS and is now a Kubernetes SIG project, and it runs as a Deployment in your cluster, so you operate it, unlike Auto Mode where AWS does.
Gotcha: because Karpenter acts on unschedulable Pods, Pods without resource requests give it nothing to size against. Set requests everywhere, as emphasised in Deck 1.