Skip to content

Instantly share code, notes, and snippets.

@pwright
Last active June 10, 2026 09:27
Show Gist options
  • Select an option

  • Save pwright/0821362d03be6ccb5321618919844588 to your computer and use it in GitHub Desktop.

Select an option

Save pwright/0821362d03be6ccb5321618919844588 to your computer and use it in GitHub Desktop.
{
"id": "karpenter-autoscaling-landscape",
"title": "Karpenter Autoscaling Landscape",
"abstract": "Karpenter provisions Kubernetes worker nodes on AWS just in time for unschedulable pods. This map follows the value chain from application capacity and cost control down through pod scheduling signals, Karpenter policy objects, concrete node claims, AWS infrastructure integration, and operational controls.\n\nLegend: blue = user-visible platform outcomes; green = Kubernetes scheduling inputs; amber = Karpenter control objects; purple = cloud-provider integration; red = disruption and risk controls.",
"categories": [
{
"id": "platform-outcomes",
"title": "Platform Outcomes",
"items": [
{
"id": "application-capacity",
"name": "Application Capacity",
"color": "#7db7ff",
"external": "[https://karpenter.sh/docs/getting-started/getting-started-with-karpenter/](https://karpenter.sh/docs/getting-started/getting-started-with-karpenter/)",
"deps": [
"unschedulable-pods",
"node-provisioning"
]
},
{
"id": "cost-efficiency",
"name": "Cost Efficiency",
"color": "#7db7ff",
"external": "[https://karpenter.sh/docs/concepts/disruption/](https://karpenter.sh/docs/concepts/disruption/)",
"deps": [
"consolidation",
"capacity-type-selection"
]
},
{
"id": "workload-isolation",
"name": "Workload Isolation",
"color": "#7db7ff",
"external": "[https://karpenter.sh/docs/concepts/nodepools/](https://karpenter.sh/docs/concepts/nodepools/)",
"deps": [
"nodepool-taints",
"nodepool-requirements"
]
},
{
"id": "faster-scale-out",
"name": "Faster Scale-Out",
"color": "#7db7ff",
"external": "[https://karpenter.sh/docs/concepts/](https://karpenter.sh/docs/concepts/)",
"deps": [
"pending-pod-watching",
"nodeclaim-lifecycle"
]
}
]
},
{
"id": "workload-signals",
"title": "Workload Scheduling Signals",
"items": [
{
"id": "unschedulable-pods",
"name": "Unschedulable Pods",
"color": "#8fd18f",
"external": "[https://karpenter.sh/docs/concepts/](https://karpenter.sh/docs/concepts/)",
"deps": [
"pending-pod-watching"
]
},
{
"id": "pod-resource-requests",
"name": "CPU and Memory Requests",
"color": "#8fd18f",
"external": "[https://karpenter.sh/docs/concepts/scheduling/](https://karpenter.sh/docs/concepts/scheduling/)",
"deps": [
"scheduling-constraints"
]
},
{
"id": "node-selectors-affinity",
"name": "Node Selectors and Affinity",
"color": "#8fd18f",
"external": "[https://karpenter.sh/docs/concepts/scheduling/](https://karpenter.sh/docs/concepts/scheduling/)",
"deps": [
"scheduling-constraints"
]
},
{
"id": "topology-requirements",
"name": "Topology Requirements",
"color": "#8fd18f",
"external": "[https://karpenter.sh/docs/concepts/scheduling/](https://karpenter.sh/docs/concepts/scheduling/)",
"deps": [
"zone-selection"
]
},
{
"id": "taints-tolerations",
"name": "Taints and Tolerations",
"color": "#8fd18f",
"external": "[https://karpenter.sh/docs/concepts/scheduling/](https://karpenter.sh/docs/concepts/scheduling/)",
"deps": [
"nodepool-taints"
]
}
]
},
{
"id": "karpenter-policy",
"title": "Karpenter Policy Model",
"items": [
{
"id": "nodepools",
"name": "NodePools",
"color": "#f2c66d",
"external": "[https://karpenter.sh/docs/concepts/nodepools/](https://karpenter.sh/docs/concepts/nodepools/)",
"deps": [
"nodepool-requirements",
"nodepool-limits",
"ec2-nodeclass-ref",
"disruption-policy"
]
},
{
"id": "nodepool-requirements",
"name": "NodePool Requirements",
"color": "#f2c66d",
"external": "[https://karpenter.sh/docs/concepts/nodepools/](https://karpenter.sh/docs/concepts/nodepools/)",
"deps": [
"instance-type-selection",
"zone-selection",
"capacity-type-selection"
]
},
{
"id": "nodepool-taints",
"name": "NodePool Taints",
"color": "#f2c66d",
"external": "[https://karpenter.sh/docs/concepts/nodepools/](https://karpenter.sh/docs/concepts/nodepools/)",
"deps": [
"nodepools"
]
},
{
"id": "nodepool-limits",
"name": "NodePool Limits and Weights",
"color": "#f2c66d",
"external": "[https://karpenter.sh/docs/concepts/nodepools/](https://karpenter.sh/docs/concepts/nodepools/)",
"deps": [
"nodepools"
]
},
{
"id": "disruption-policy",
"name": "Disruption Policy",
"color": "#f2c66d",
"external": "[https://karpenter.sh/docs/concepts/disruption/](https://karpenter.sh/docs/concepts/disruption/)",
"deps": [
"consolidation",
"drift",
"expiration"
]
}
]
},
{
"id": "provisioning-engine",
"title": "Provisioning Engine",
"items": [
{
"id": "pending-pod-watching",
"name": "Pending Pod Watching",
"color": "#f2c66d",
"external": "[https://karpenter.sh/docs/concepts/](https://karpenter.sh/docs/concepts/)",
"deps": [
"scheduling-constraints"
]
},
{
"id": "scheduling-constraints",
"name": "Layered Scheduling Constraints",
"color": "#f2c66d",
"external": "[https://karpenter.sh/docs/concepts/scheduling/](https://karpenter.sh/docs/concepts/scheduling/)",
"deps": [
"nodepools"
]
},
{
"id": "node-provisioning",
"name": "Node Provisioning Decision",
"color": "#f2c66d",
"external": "[https://karpenter.sh/docs/concepts/nodeclaims/](https://karpenter.sh/docs/concepts/nodeclaims/)",
"deps": [
"nodeclaim-lifecycle",
"instance-type-selection"
]
},
{
"id": "nodeclaims",
"name": "NodeClaims",
"color": "#f2c66d",
"external": "[https://karpenter.sh/docs/concepts/nodeclaims/](https://karpenter.sh/docs/concepts/nodeclaims/)",
"deps": [
"nodeclaim-lifecycle",
"ec2-instance-launch"
]
},
{
"id": "nodeclaim-lifecycle",
"name": "Launch, Register, Initialize",
"color": "#f2c66d",
"external": "[https://karpenter.sh/docs/concepts/nodeclaims/](https://karpenter.sh/docs/concepts/nodeclaims/)",
"deps": [
"ec2-instance-launch",
"node-registration"
]
}
]
},
{
"id": "cloud-provider-integration",
"title": "Cloud Provider Integration",
"items": [
{
"id": "ec2-nodeclasses",
"name": "EC2NodeClasses",
"color": "#b79cff",
"external": "[https://karpenter.sh/docs/concepts/nodeclasses/](https://karpenter.sh/docs/concepts/nodeclasses/)",
"deps": [
"subnet-discovery",
"security-group-discovery",
"ami-selection",
"node-iam-role"
]
},
{
"id": "ec2-nodeclass-ref",
"name": "NodeClass Reference",
"color": "#b79cff",
"external": "[https://karpenter.sh/docs/concepts/nodeclasses/](https://karpenter.sh/docs/concepts/nodeclasses/)",
"deps": [
"ec2-nodeclasses"
]
},
{
"id": "instance-type-selection",
"name": "Instance Type Selection",
"color": "#b79cff",
"external": "[https://karpenter.sh/docs/reference/instance-types/](https://karpenter.sh/docs/reference/instance-types/)",
"deps": [
"ec2-instance-launch"
]
},
{
"id": "capacity-type-selection",
"name": "On-Demand or Spot Capacity",
"color": "#b79cff",
"external": "[https://karpenter.sh/docs/concepts/scheduling/](https://karpenter.sh/docs/concepts/scheduling/)",
"deps": [
"ec2-instance-launch"
]
},
{
"id": "zone-selection",
"name": "Zone Selection",
"color": "#b79cff",
"external": "[https://karpenter.sh/docs/concepts/scheduling/](https://karpenter.sh/docs/concepts/scheduling/)",
"deps": [
"subnet-discovery"
]
},
{
"id": "ec2-instance-launch",
"name": "EC2 Instance Launch",
"color": "#b79cff",
"external": "[https://karpenter.sh/docs/getting-started/getting-started-with-karpenter/](https://karpenter.sh/docs/getting-started/getting-started-with-karpenter/)",
"deps": [
"aws-permissions",
"subnet-discovery",
"security-group-discovery",
"ami-selection",
"node-iam-role"
]
}
]
},
{
"id": "operations-and-risk",
"title": "Operations and Risk Controls",
"items": [
{
"id": "aws-permissions",
"name": "Controller AWS Permissions",
"color": "#ff8f8f",
"external": "[https://karpenter.sh/docs/getting-started/getting-started-with-karpenter/](https://karpenter.sh/docs/getting-started/getting-started-with-karpenter/)",
"deps": []
},
{
"id": "subnet-discovery",
"name": "Subnet Discovery",
"color": "#ff8f8f",
"external": "[https://karpenter.sh/docs/concepts/nodeclasses/](https://karpenter.sh/docs/concepts/nodeclasses/)",
"deps": []
},
{
"id": "security-group-discovery",
"name": "Security Group Discovery",
"color": "#ff8f8f",
"external": "[https://karpenter.sh/docs/concepts/nodeclasses/](https://karpenter.sh/docs/concepts/nodeclasses/)",
"deps": []
},
{
"id": "ami-selection",
"name": "AMI Selection",
"color": "#ff8f8f",
"external": "[https://karpenter.sh/docs/concepts/nodeclasses/](https://karpenter.sh/docs/concepts/nodeclasses/)",
"deps": []
},
{
"id": "node-iam-role",
"name": "Node IAM Role",
"color": "#ff8f8f",
"external": "[https://karpenter.sh/docs/getting-started/getting-started-with-karpenter/](https://karpenter.sh/docs/getting-started/getting-started-with-karpenter/)",
"deps": []
},
{
"id": "node-registration",
"name": "Node Registration",
"color": "#ff8f8f",
"external": "[https://karpenter.sh/docs/concepts/nodeclaims/](https://karpenter.sh/docs/concepts/nodeclaims/)",
"deps": []
},
{
"id": "consolidation",
"name": "Consolidation",
"color": "#ff8f8f",
"external": "[https://karpenter.sh/docs/concepts/disruption/](https://karpenter.sh/docs/concepts/disruption/)",
"deps": []
},
{
"id": "drift",
"name": "Drift",
"color": "#ff8f8f",
"external": "[https://karpenter.sh/docs/concepts/disruption/](https://karpenter.sh/docs/concepts/disruption/)",
"deps": []
},
{
"id": "expiration",
"name": "Expiration",
"color": "#ff8f8f",
"external": "[https://karpenter.sh/docs/concepts/disruption/](https://karpenter.sh/docs/concepts/disruption/)",
"deps": []
}
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment