Skip to content

Add support for Karpenter as a node provisioning backend in cluster-api-provider-aws #5712

@moko-poi

Description

@moko-poi

/kind feature

Describe the solution you'd like
Currently, cluster-api-provider-aws supports EKS Managed Node Groups (via AWSManagedMachinePool) as a node provisioning option.
However, it does not provide a way to integrate with Karpenter, which is increasingly recommended by AWS and the Kubernetes community for dynamic, workload-driven node provisioning.

I propose adding support for Karpenter as a node provisioning backend, similar to how Managed Node Groups are supported.
For example, a new template type (e.g. AWSKarpenterMachinePool or KarpenterProvisionerTemplate) could allow CAPI-managed clusters to declaratively define Karpenter resources such as Provisioner and AWSNodeTemplate.

This would allow CAPI users to:

  • Use declarative infrastructure (via clusterctl, ClusterClass, etc.) with Karpenter-enabled clusters.
  • Mix and match static node pools (MGN) and dynamic, reactive node provisioning (Karpenter) under a unified management plane.
  • Retain consistency with CAPI’s MachineProvider abstractions for reconciliation, status, upgrades, etc.

Because AWS itself, in its EKS Best Practices documentation, recommends Karpenter as a preferred method for node lifecycle automation and cost optimization, adding first-class support for Karpenter in CAPA would help align CAPI users with AWS’s recommended patterns. :contentReference[oaicite:0]{index=0}

Anything else you would like to add:

  • There is an existing experimental project, karpenter-provider-cluster-api, exploring similar ideas, but it is still in PoC stage.
  • I am happy to contribute or help with a design proposal or prototype implementation if maintainers are interested.
  • Including this support could lower the barrier for CAPI users to adopt more modern, autoscaling node strategies on EKS.

Environment:

  • Cluster-api-provider-aws version: (e.g. v2.x.x)
  • Kubernetes version: (use kubectl version)
  • OS (e.g. from /etc/os-release): (e.g. Amazon Linux 2, Ubuntu 22.04, etc.)

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind/featureCategorizes issue or PR as related to a new feature.needs-priorityneeds-triageIndicates an issue or PR lacks a `triage/foo` label and requires one.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions