Migrating large-scale self-managed Kubernetes clusters to Amazon EKS
Pradip Kumar Pandey and Pratap Kumar Nanda, Amazon Web Services
June 2026 (document history)
Overview
Moving from a self-managed Kubernetes setup to Amazon Elastic Kubernetes Service
This guide helps you migrate self-managed Kubernetes to Amazon EKS by reducing risks, saving time and cost, and providing clear planning frameworks. It builds team confidence, supports informed decision-making, and enables effective stakeholder communication. The guide serves as a practical reference throughout the migration journey, helping organizations avoid costly mistakes while transitioning from infrastructure maintenance to focusing on application development and business value delivery.
Intended audience
This guide is intended for the following roles:
-
Cloud architects planning the target Amazon EKS environment
-
Platform engineers responsible for Kubernetes cluster operations
-
DevOps engineers managing CI/CD pipelines and deployment workflows
-
Migration leads coordinating the transition from self-managed clusters
Readers should have foundational knowledge of Kubernetes concepts (pods, deployments, services, namespaces), experience with kubectl, and familiarity with AWS core services.
Objectives of this guide
After reading this guide, you will be able to:
-
Assess your current self-managed Kubernetes environment for migration readiness
-
Select the appropriate migration approach (blue-green, phased, or lift-and-shift) based on your requirements
-
Plan infrastructure, networking, storage, and security for the target Amazon EKS environment
-
Define a testing and validation strategy that minimizes risk during cutover
-
Identify post-migration optimization opportunities using AWS-native services
-
Communicate migration plans and progress effectively to stakeholders
Service availability
Some AWS services aren't available in all AWS Regions. For Region availability,
see AWS services by
Region
Prerequisites and limitations
Prerequisites
Requirement |
Details |
|---|---|
Python |
3.9 or higher installed on the local machine |
kubectl |
Installed and configured with access to both the source cluster (for extraction) and the target Amazon EKS cluster (for migration) |
AWS Command Line Interface |
Version 2.x, configured with AWS Identity and Access Management (IAM) permissions for Amazon EKS, IAM, and Amazon EC2. |
Helm (optional) |
Version 3.x, required only if migrating Helm releases |
Target Amazon EKS cluster |
Must already exist. The migration script does not provision the cluster. For more information, see Creating an Amazon EKS cluster in the Amazon EKS documentation. |
Amazon EBS CSI driver |
Installed on the target Amazon EKS cluster for StorageClass provisioner
remapping ( |
AWS Load Balancer Controller |
Installed on the target Amazon EKS cluster for Service type LoadBalancer and ALB Ingress support |
CRD operators |
Any controllers for custom resources used in the source cluster (for example, cert-manager, Prometheus Operator) must be installed on the target cluster before migration |
IAM roles for service accounts (IRSA) |
Configured on the target Amazon EKS cluster if workloads require AWS API access |
Network connectivity |
The local machine must have network access to both the source and target Kubernetes API servers |
Cluster admin access |
Admin-level access to both source and target clusters through kubectl. The extraction script requires read access to all resources; the migration script requires create/update permissions. |
Limitations
-
Persistent volume data is not migrated. Use AWS DataSync or Velero for persistent volume data migration.
-
Helm releases require the original chart source to reinstall. The script outputs the commands but cannot run them without chart references.
-
Secret values are created as opaque placeholders. You must populate actual values post-migration through AWS Secrets Manager, AWS Systems Manager Parameter Store, or External Secrets Operator.
-
CRD operators and controllers must be pre-installed on the target Amazon EKS cluster before you migrate custom resource instances. For more information, see AWS Controllers for Kubernetes
. -
If the source cluster uses a private container registry, ensure that Amazon EKS nodes have pull access, such as Amazon Elastic Container Registry and image pull secrets.