Amazon EKS — Managed Node Groups

2 minute read

Managed Node Groups

Managed node groups are the recommended way to run worker nodes on EKS. AWS handles AMI updates, node draining, and health monitoring — you just specify the instance type and scaling parameters.


How Managed Node Groups Work

Managed Node Group Lifecycle
┌──────────────────────────────────────────────────────────┐
│                                                          │
│  You define:                   AWS manages:              │
│  • Instance type               • AMI selection           │
│  • Desired/min/max count       • Node health checks      │
│  • Labels and taints           • Graceful draining       │
│  • Volume size                 • Rolling updates         │
│  • Subnets                     • Integration with ASG    │
│                                                          │
│  ┌────────┐  ┌────────┐  ┌────────┐                    │
│  │ Node 1 │  │ Node 2 │  │ Node 3 │                    │
│  │ m5.lg  │  │ m5.lg  │  │ m5.lg  │                    │
│  │ ┌────┐ │  │ ┌────┐ │  │ ┌────┐ │                    │
│  │ │Pods│ │  │ │Pods│ │  │ │Pods│ │                    │
│  │ └────┘ │  │ └────┘ │  │ └────┘ │                    │
│  └────────┘  └────────┘  └────────┘                    │
│  └──── Auto Scaling Group (managed) ────┘               │
└──────────────────────────────────────────────────────────┘

Create a Managed Node Group

CLI

$ eksctl create nodegroup \
    --cluster demo \
    --name general \
    --node-type m5.large \
    --nodes 3 \
    --nodes-min 2 \
    --nodes-max 10

Config File

managedNodeGroups:
  - name: general
    instanceType: m5.large
    desiredCapacity: 3
    minSize: 2
    maxSize: 10
    volumeSize: 50
    volumeType: gp3
    privateNetworking: true
    labels:
      role: general
      environment: production
    tags:
      Team: platform
    iam:
      withAddonPolicies:
        imageBuilder: true      # ECR access
        autoScaler: true        # Cluster Autoscaler
        ebs: true               # EBS CSI driver
        efs: true               # EFS CSI driver
        cloudWatch: true        # CloudWatch agent

Max Pods Per Instance Type

EKS limits pods per node based on the number of ENIs and IPs per ENI:

Instance Type ENIs IPs per ENI Max Pods
t3.medium 3 6 17
t3.large 3 12 35
m5.large 3 10 29
m5.xlarge 4 15 58
m5.2xlarge 4 15 58

Formula: Max Pods = (Number of ENIs × IPs per ENI) - 1


Node Group Updates

Managed node groups support rolling updates that respect PodDisruptionBudgets:

# Update AMI (triggers rolling replacement)
$ eksctl upgrade nodegroup \
    --name general \
    --cluster demo \
    --kubernetes-version 1.29

# Scale
$ eksctl scale nodegroup --cluster demo --name general --nodes 5

Common Mistakes

Mistake Fix
Too few max nodes Set maxSize high enough for scaling
No privateNetworking: true Nodes get public IPs
Missing IAM addon policies Pods can’t access AWS services
Only one instance type Use mixed types for availability

Quick Reference

# List node groups
$ eksctl get nodegroup --cluster demo

# Scale
$ eksctl scale nodegroup --cluster demo --name general --nodes 5

# Delete
$ eksctl delete nodegroup --cluster demo --name general

What’s Next?

For full control, see Self-Managed Nodes.