Real-world EKS
Migration
58 / 69

Run both in parallel, move capacity gradually, and delete the old setup last.

1 InstallKarpenter beside existing groups.
2 DefineNodePool and EC2NodeClass matching today's policy.
3 ShiftReduce old group max; new Pods land on Karpenter nodes.
4 DrainCordon and drain old nodes; verify.
5 RemoveDelete the group, the autoscaler and its IAM.

Every step is reversible

Until you delete the old node group, you can raise its size and move back.

Pitfalls

Leftover Cluster Autoscaler pods and IAM permissions create noisy errors. System Pods (CoreDNS, Karpenter itself) should run on a small managed group.

runbook excerpt
$ helm install karpenter \
    oci://public.ecr.aws/karpenter/karpenter \
    -n kube-system \
    --set settings.clusterName=shop-eu \
    --set settings.interruptionQueue=shop-eu
$ kubectl apply -f nodepool.yaml -f ec2nodeclass.yaml
$ kubectl get nodeclaims
$ aws eks update-nodegroup-config \
    --cluster-name shop-eu --nodegroup-name std \
    --scaling-config minSize=0,maxSize=0,desiredSize=0
$ kubectl -n kube-system delete deploy \
    cluster-autoscaler