Skip to content

Allow External Management of startupTaints #2925

@samuel-esp

Description

@samuel-esp

Description

What problem are you trying to solve?

Using startupTaints at the NodePool level is overall a good experience. However, in 2026 there are scenarios where it would be preferable to allow external components to set startup taints instead of having them directly set by Karpenter. For example, I think components like the Node Readiness Controller should be the only responsible of adding startupTaints instead of Karpenter itself. In such cases, delegating this responsibility externally would provide better separation of concerns.

There may be scenarios where applying startupTaints to every node in the NodePool isn’t practical, some nodes might never require a startupTaint based on custom readiness checks, while others should have it.

startupTaints may be modfied like this

startupTaints:
- key: example.com/another-taint
  effect: NoSchedule
  onlyEnforceIfPresent: true

With the field onlyEnforceIfPresent: true the behavior would be the same that is actually enforced by ClusterAutoscaler here, taints are not set by Karpenter but if they are present on the node, the node itself would be considered as Ready.

An even better experience would be to define startupTaints and this behavior clusterwide. Actually if startupTaints changes, it would be needed to update every single NodePool of the cluster

How important is this feature to you?

  • Please vote on this issue by adding a 👍 reaction to the original issue to help the community and maintainers prioritize this request
  • Please do not leave "+1" or "me too" comments, they generate extra noise for issue followers and do not help prioritize the request
  • If you are interested in working on this issue or have submitted a pull request, please leave a comment

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