/karpenter

Kubernetes Node Autoscaling: built for flexibility, performance, and scalability.

Primary LanguageGoApache License 2.0Apache-2.0

Build Status Go Report Card GitHub stars GitHub forks GitHub License contributions welcome

Karpenter is a node lifecycle management solution. It observes incoming pods and launches the right instances for the situation. Instance selection decisions are intent based and driven by the specification of incoming pods, including resource requests and scheduling constraints.

It's responsible for:

  • Launching nodes for unschedulable pods
  • Replacing existing nodes to improve resource utilization
  • Terminating nodes if outdated or no longer needed
  • Draining nodes gracefully before preemption

For most use cases, the entirety of a cluster’s capacity can be managed by a single Karpenter Provisioner. Availability zone, instance type, capacity type, machine image, and scheduling constraints are automatically determined by the controller using a combination of defaults and overrides. Additionally, you can define multiple Provisioners, enabling use cases like isolation, entitlements, and sharding.

Karpenter optimizes for scheduling latency and utilization efficiency using two complementary control loops. First, is the allocator, a fast-acting latency-sensitive controller responsible for ensuring that incoming pods are scheduled as quickly as possible. Second, is the reallocator, a slow-acting cost-sensitive controller that replaces nodes as pods requests and capacity prices shift over time. Together, they maximize the availability and efficiency of your cluster.

Come discuss Karpenter in the #provider-aws channel in the Kubernetes slack!

Note: Reallocation is still in development. Check out the FAQs and Roadmap to learn more.

Installation

Follow the setup recommendations of your cloud provider.

Docs

Talks

License

This project is licensed under the Apache-2.0 License.