karpenter-operations

Install, operate, and troubleshoot Karpenter node autoscaling on Amazon EKS and Azure AKS.

Updated Apr 11, 2026
One-click install
npx skills add https://github.com/lurodrisilva/personal-skills --skill karpenter-operations-lurodrisilva
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: karpenter-operations
Source: https://github.com/lurodrisilva/personal-skills/tree/main/operations/karpenter-operations
Command: npx skills add https://github.com/lurodrisilva/personal-skills --skill karpenter-operations-lurodrisilva

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes scripts (resource) components.

What problem does it solve? Operating Karpenter across two clouds means juggling a shared core API (NodePool/NodeClaim) with provider-specific NodeClasses, identity models, and disruption behaviors — and misconfigurations silently stall pod scheduling or delete nodes. This Skill provides the operating doctrine, CRD reference, and troubleshooting trees for Karpenter on both Amazon EKS and Azure AKS so you can provision nodes from pod intent without trial-and-error. ## Core Features & Use Cases - Dual-cloud coverage: Shared core API guidance plus AWS specifics (EC2NodeClass, Pod Identity/IRSA, SQS interruption queue, IMDSv2) and Azure specifics (AKSNodeClass, Node Auto Provisioning, Workload Identity, NAP enable/disable procedures). - Disruption engine mastery: Consolidation policies, drift, expiration, interruption handling, and disruption budgets, with the critical caveats (budgets don't gate Expiration/Interruption; never delete karpenter.azure.com CRDs during migration). - Read-only triage scripts: Three kubectl-based scripts (karpenter-health.sh, disruption-blockers.sh, nodepool-capacity.sh) that diagnose provisioning failures, disruption blockers, and capacity saturation without mutating the cluster. - Use Case: Your pods are stuck Pending with "no instance type met the scheduling requirements" on an AKS cluster with NAP enabled — use the triage map and Phase F trees to identify whether the cause is SKU sizing, zone mismatch, NodePool limits, or a missing CNI Overlay + Cilium configuration. ## Quick Start Ask the AI to diagnose why Karpenter is not provisioning nodes for your pending pods on your EKS or AKS cluster.

Frequently Asked Questions about karpenter-operations

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I install Karpenter on Amazon EKS?▼

Install Karpenter on EKS by deploying the CloudFormation stack for IAM roles and the SQS interruption queue, then installing the karpenter-crd and karpenter Helm charts from oci://public.ecr.aws/karpenter. Use Pod Identity or IRSA for the controller identity, and run Karpenter on a managed node group since it cannot provision its own nodes.

How do I enable Node Auto Provisioning on AKS?▼

Enable NAP with az aks create or update using --node-provisioning-mode Auto, which requires Azure CNI Overlay with Cilium and a managed identity. NAP is mutually exclusive with the cluster autoscaler and does not support Windows, IPv6, Kubenet, or service principals.

Why are my pods pending with no instance type met the scheduling requirements?▼

This error means pod requests exceed the sizes allowed by your NodePool requirements, there is a zone mismatch, or the NodePool hit its limits. Widen instance family or SKU requirements, raise limits, and verify DaemonSet requests fit the allowed types.

What is the difference between EC2NodeClass and AKSNodeClass?▼

EC2NodeClass (karpenter.k8s.aws/v1) configures AWS-specific settings like AMI selectors, subnets, security groups, IAM role, and IMDSv2. AKSNodeClass (karpenter.azure.com/v1beta1) only sets imageFamily, osDiskSizeGB, maxPods, kubelet config, and tags since networking and identity come from the AKS cluster.

Why won't Karpenter consolidate or deprovision my nodes?▼

Consolidation is blocked by pods or nodes with the karpenter.sh/do-not-disrupt annotation, PodDisruptionBudgets allowing zero disruptions, nodes not yet initialized, or an active disruption budget with nodes set to 0. Run the disruption-blockers.sh script to surface which blocker applies.

Can I migrate from self-hosted Azure Karpenter to NAP safely?▼

Yes, but never delete the karpenter.azure.com CRDs during migration because that removes the underlying NodeClaims and deletes nodes. Detach the CRDs from Helm management, uninstall the self-hosted controller, then enable NAP with --node-provisioning-default-pools None to keep existing NodePools.