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!
Check out the FAQs and Roadmap to learn more.
Follow the setup recommendations of your cloud provider.
❗ Note: There may be backwards incompatible changes between versions when upgrading before v0.3.0. Karpenter follows Kubernetes versioning guidelines. Before upgrading, we recommend:
- Check the release notes
- Uninstall Karpenter
- Remove all nodes launched by karpenter
- Reinstall Karpenter
This project is licensed under the Apache-2.0 License.