Amazon EKS Explained From Zero
A complete, plain-English walkthrough of Amazon Elastic Kubernetes Service — what it is, how it works under the hood, and how companies like Netflix, Snap, and HSBC run production workloads on it.
Imagine you run a restaurant. You don’t personally build the stoves, wire the electricity, or install the fire-suppression system — a kitchen-equipment company handles that heavy infrastructure, and you focus on cooking and serving customers. Amazon EKS does something similar for a technology called Kubernetes. It hands you a fully managed “kitchen” so your engineering team can focus on running applications instead of babysitting servers. In this guide, you’ll learn exactly what that means, piece by piece, with no assumed background in containers, Kubernetes, or AWS.
1What Is Amazon EKS?
Amazon Elastic Kubernetes Service, or EKS, is a managed service that runs Kubernetes for you on AWS. Kubernetes itself is an open-source system for running applications inside containers — lightweight, self-contained packages that bundle an application with everything it needs to run (code, libraries, settings) so it behaves the same way on any machine. Kubernetes’ job is to decide where those containers run, restart them if they crash, scale them up when traffic increases, and network them together. EKS takes the hardest part of Kubernetes — running and maintaining its “brain,” called the control plane — and manages it for you, patched, backed up, and highly available, so your team never has to install or upgrade that brain by hand.
Why Kubernetes Exists in the First Place
Before containers, companies ran applications directly on physical or virtual servers. If an application needed more computing power, an engineer had to manually provision a new server, install dependencies, and configure networking — a process that could take hours or days. Containers solved the “it works on my machine” problem by packaging an app with its dependencies. But once a company has hundreds or thousands of containers, someone has to decide which physical machine each container runs on, restart failed containers, and route traffic to healthy ones. Kubernetes, originally built at Google and open-sourced in 2014, was designed to automate exactly that job at massive scale.
Think of Kubernetes as an air-traffic control tower for containers. Individual planes (containers) don’t need to know which runway is free or how to avoid collisions — the tower (Kubernetes) tracks every plane, assigns runways, and reroutes flights when one is delayed or grounded. EKS is like hiring an already-trained, government-certified air-traffic control team instead of building and training your own tower staff from scratch.
EKS does not replace Kubernetes — it is Kubernetes, upstream and standards-compliant. AWS simply operates the control plane for you and integrates it tightly with AWS networking, identity, and storage services.
A production example: Snap Inc. (the company behind Snapchat) moved much of its backend infrastructure onto EKS to avoid the operational burden of running Kubernetes control planes themselves across multiple environments, letting their platform team focus on developer tooling instead of patching Kubernetes internals.
2Architecture & Core Components
Every EKS cluster is split into two halves: a control plane that AWS manages, and a data plane where your actual application containers run. Understanding this split is the single most important mental model for EKS.
API Server
The front door of the cluster. Every command — from you, from kubectl, or from other components — passes through here first.
etcd
A distributed key-value database that stores the entire desired state of the cluster: what should be running, and where.
Scheduler
Decides which worker node a new container should run on, based on available CPU, memory, and placement rules.
Controller Manager
Continuously watches the cluster and corrects drift — for example, restarting a container that unexpectedly stopped.
Worker Nodes
EC2 instances (or Fargate capacity) that actually run your containers, grouped into “pods.”
Kubelet
An agent on every node that talks to the control plane and starts/stops containers as instructed.
flowchart TB
subgraph CP["AWS-Managed Control Plane"]
API["API Server"]
ETCD["etcd (Cluster State)"]
SCHED["Scheduler"]
CTRL["Controller Manager"]
end
subgraph VPC["Your VPC"]
subgraph DP["Data Plane"]
N1["Worker Node 1
(EC2 / Fargate)"]
N2["Worker Node 2
(EC2 / Fargate)"]
end
ALB["Application Load Balancer"]
end
DEV["Developer (kubectl)"] --> API
API --> ETCD
API --> SCHED
SCHED --> N1
SCHED --> N2
CTRL --> API
USER["End User"] --> ALB
ALB --> N1
ALB --> N2
N1 -.reports status.-> API
N2 -.reports status.-> API
Notice that the control plane components (API Server, etcd, Scheduler, Controller Manager) live in an AWS-owned account, invisible to you and automatically spread across multiple Availability Zones. Your worker nodes, by contrast, live inside your VPC, so you retain full control over networking, security groups, and IAM permissions for the actual compute running your code.
Real Component in Action: The AWS Load Balancer Controller
When a Kubernetes “Service” of type LoadBalancer is created, an add-on called the AWS Load Balancer Controller automatically provisions a real Application Load Balancer or Network Load Balancer and wires it to the correct pods — bridging Kubernetes concepts with native AWS infrastructure.
3How EKS Works Internally
Kubernetes operates on a declarative model: instead of telling it “start this container now,” you tell it “I want 3 copies of this application running at all times,” and the system continuously works to make reality match that desired state. This loop is called the reconciliation loop, and it is the beating heart of how EKS — and Kubernetes generally — stays self-healing.
Desired State Submitted
You apply a YAML manifest describing “run 3 replicas of my web app” via kubectl, which sends the request to the API Server.
State Persisted
The API Server validates the request and writes the desired state into etcd, the cluster’s source of truth.
Scheduling Decision
The Scheduler notices new, unplaced pods and picks the best-fit worker node based on available CPU, memory, and any placement rules.
Node Executes
The kubelet on the chosen node pulls the container image and starts the container using the node’s container runtime.
Continuous Reconciliation
The Controller Manager keeps comparing actual state to desired state forever — if a pod crashes, it schedules a replacement automatically.
It’s like telling a thermostat “keep this room at 70°F” rather than manually turning a heater on and off. You state the goal once; the system continuously senses and corrects to maintain it, without you intervening every time the temperature drifts.
EKS does not automatically manage your worker nodes’ operating system patches or scale them unless you explicitly configure a node group, Managed Node Group, or Karpenter/Cluster Autoscaler. The control plane is managed; the data plane’s automation is something you configure.
4Data Flow & Request Lifecycle
Understanding architecture is one thing; watching a real request travel through the system makes it click. Consider a customer opening a shopping app whose backend runs on EKS.
sequenceDiagram
participant U as End User
participant R53 as Route 53 (DNS)
participant ALB as Application Load Balancer
participant SVC as Kubernetes Service
participant POD as Pod (Container)
U->>R53: Resolve shop.example.com
R53-->>U: ALB IP address
U->>ALB: HTTPS request
ALB->>SVC: Forward to healthy target
SVC->>POD: Route to matching pod
POD-->>SVC: Response
SVC-->>ALB: Response
ALB-->>U: Final response
Behind the scenes, the Kubernetes Service object acts as a stable internal address, because pods are ephemeral — they can be destroyed and recreated with new internal IP addresses at any time (during a deployment, a crash, or a scale-down event). The Service continuously tracks which pods are currently healthy using health checks and updates its routing table (technically implemented via kube-proxy and Linux networking rules) so traffic never gets sent to a dead container.
This lifecycle also applies in reverse for scaling events: if CPU usage across pods crosses a threshold, the Horizontal Pod Autoscaler requests more replicas, which flows back through the same reconciliation loop described in Chapter 3 — new pods are scheduled, started, and registered with the Service, typically within seconds.
5Advantages, Disadvantages & Trade-offs
Advantages
- AWS manages control plane availability, patching, and upgrades across multiple Availability Zones
- Deep native integration with IAM, VPC, ALB/NLB, EBS, EFS, and CloudWatch
- Fully standards-compliant Kubernetes — portable skills and manifests across clouds
- Supports both EC2 worker nodes and serverless Fargate pods
- Huge open-source ecosystem: Helm charts, operators, service meshes all work unmodified
Disadvantages / Trade-offs
- Hourly control-plane charge exists even for a completely idle cluster
- Kubernetes’ own conceptual surface area (pods, services, ingress, RBAC) is genuinely large for newcomers
- You are still responsible for patching worker node operating systems (unless using Fargate)
- Networking (VPC CNI, security groups per pod) requires deliberate design at scale
- Misconfigured IAM or RBAC can create serious security gaps if not carefully reviewed
The trade-off in one sentence: EKS removes the operational burden of running Kubernetes’ control plane, but it does not remove the conceptual burden of learning Kubernetes itself, nor the responsibility of securing and scaling your own worker nodes.
6Performance & Scalability
EKS scales along two independent dimensions. Pod-level scaling happens via the Horizontal Pod Autoscaler, which adds or removes container replicas based on CPU, memory, or custom metrics (like queue depth). Node-level scaling happens via the Cluster Autoscaler or the newer, faster Karpenter tool, which adds or removes entire EC2 instances so there’s enough physical capacity to place those new pods.
A well-known example: Netflix uses container orchestration across its edge and internal services to absorb massive, unpredictable viewing spikes — such as a new season release — by scaling compute out horizontally in minutes rather than hours. The pattern EKS enables is the same: define scaling rules once, and let the reconciliation loop from Chapter 3 continuously add capacity as demand rises, then shrink it back down to save cost when demand falls.
Scaling pods without scaling nodes just creates pods stuck in “Pending” state with nowhere to run. Always pair the Horizontal Pod Autoscaler with a node-level autoscaler.
7High Availability & Reliability
AWS runs the EKS control plane across a minimum of three Availability Zones automatically, with the API Server load-balanced and etcd replicated behind the scenes — you never provision this redundancy yourself. Reliability of your own applications, however, is something you must design for: spreading worker nodes across multiple Availability Zones, and configuring Kubernetes to spread pod replicas across those nodes using topology spread constraints or pod anti-affinity rules, so a single zone outage doesn’t take your whole application down.
If a worker node fails entirely — hardware failure, for instance — the Controller Manager detects the node’s kubelet has stopped reporting, marks its pods as unhealthy, and reschedules them onto healthy nodes automatically, typically within a few minutes, assuming spare capacity exists in the cluster.
8Security
Security in EKS spans several independent layers, and beginners often assume one setting covers everything. It doesn’t. The main layers are:
IAM & IRSA
IAM Roles for Service Accounts lets individual pods assume narrowly scoped AWS permissions, instead of sharing one broad node-wide role.
Kubernetes RBAC
Controls which users or service accounts can create, read, or delete which Kubernetes resources — independent from AWS IAM.
Security Groups & Network Policies
Security groups control traffic at the AWS network layer; Kubernetes Network Policies control which pods may talk to which other pods.
Pod Security Standards
Restrict what containers are allowed to do — for example, preventing a container from running as the root user.
Securing an EKS cluster is like securing an office building: you need a badge system to enter the building (IAM), a key to a specific floor (RBAC), locked doors between departments (Network Policies), and rules about what employees can touch once inside a room (Pod Security Standards). Locking only the front door leaves every internal door wide open.
HSBC and other regulated financial institutions running workloads on EKS commonly layer all four of these controls together, plus AWS-native services like GuardDuty for threat detection, precisely because compliance requirements demand defense-in-depth rather than a single security boundary.
9Monitoring, Logging & Metrics
EKS integrates with Amazon CloudWatch Container Insights to collect CPU, memory, disk, and network metrics from every node and pod without manual instrumentation. Control-plane logs — API Server audit logs, authenticator logs, scheduler logs — can be selectively enabled and streamed to CloudWatch Logs, which is critical for security audits and debugging authentication failures.
Beyond AWS-native tooling, most production teams layer in the open-source ecosystem: Prometheus for metrics scraping, Grafana for dashboards, and Fluent Bit for shipping application logs. This combination lets engineers answer three different questions: is the cluster healthy (metrics), what exactly happened (logs), and why did this one slow request take so long (distributed tracing, often via AWS X-Ray or OpenTelemetry).
Control-plane logging is opt-in and off by default. Teams that skip enabling audit logs often discover this gap only after a security incident, when the exact API calls made during the incident are no longer recoverable.
10Deployment & Cloud Integration
Clusters are typically provisioned using Infrastructure as Code — most commonly Terraform or the AWS-native eksctl CLI — rather than clicked together manually, since production clusters need to be reproducible across environments (dev, staging, production).
Two Ways to Run Compute on EKS
EC2 worker nodes give you full control over instance type, OS, and cost optimization (including Spot Instances for non-critical workloads), but you patch and manage those instances. AWS Fargate runs each pod in its own isolated micro-VM with no node to manage at all — you pay per-pod resource usage instead, trading some cost efficiency at scale for zero operational overhead.
EKS also integrates natively with CI/CD pipelines: a common production pattern is GitHub Actions or AWS CodePipeline building a container image, pushing it to Amazon ECR (Elastic Container Registry), and then a GitOps tool like ArgoCD or Flux automatically syncing the new version into the cluster the moment the manifest changes in Git — removing manual deployment steps entirely.
11Design Patterns & Anti-Patterns
Sidecar
A helper container (like a log shipper or proxy) runs alongside the main application container in the same pod, sharing its network and storage.
Namespace Isolation
Separate teams or environments (dev/staging/prod) into distinct Kubernetes namespaces, each with its own RBAC and resource quotas.
Blue-Green / Canary Rollouts
New versions are deployed alongside the old, receiving a small slice of traffic first, so failures affect only a fraction of users.
Service Mesh
Tools like Istio or App Mesh add automatic retries, encryption, and traffic control between services without changing application code.
Pattern
Running every workload directly on the same shared, wide-open IAM role attached to every worker node (“god-mode node role”).
Why It Happens
It’s the fastest way to get a cluster working during early prototyping, so teams skip configuring per-pod IAM roles and never circle back.
Consequence
Any compromised container on that node inherits every permission the node has — turning one vulnerable application into a path to the entire AWS account.
Correct Approach
Use IAM Roles for Service Accounts (IRSA) or EKS Pod Identity so each workload only receives the specific AWS permissions it actually needs.
12Best Practices & Common Mistakes
| Best Practice | Common Mistake It Prevents |
|---|---|
| Set CPU/memory requests and limits on every pod | One misbehaving pod consuming all node resources and starving others |
| Enable control-plane audit logging from day one | No forensic trail available after a security incident |
| Use managed node groups or Karpenter, not manual EC2 | Nodes silently drifting out of sync with cluster requirements |
| Apply IRSA per workload | Overly broad node-wide IAM permissions |
| Run readiness and liveness probes on every deployment | Traffic routed to pods that are alive but not actually ready |
| Version-control all manifests (GitOps) | Configuration drift between what’s running and what’s documented |
The single most common beginner mistake is treating a Kubernetes cluster like a set of long-lived pet servers rather than disposable, replaceable units. Pods should be expected to restart, move, and be recreated constantly — applications must be written to tolerate that, storing no critical state directly inside a container’s local filesystem.
13Real-World & Industry Examples
Snap Inc.
Runs core backend services on EKS to remove the operational burden of managing Kubernetes control planes across environments.
HSBC
Uses EKS with layered IAM, RBAC, and network security controls to meet strict financial-sector compliance requirements.
Riot Games
Uses container orchestration patterns like those in EKS to deploy and scale backend services supporting global live-service games.
Netflix
Applies the same horizontal-scaling philosophy EKS is built around to absorb massive, unpredictable viewership spikes.
Across industries, the common thread is the same: teams adopt EKS not because Kubernetes itself is new to them, but because they want AWS to own the operational weight of running its control plane reliably, so their own engineers can focus on the applications running on top of it.
14Frequently Asked Questions
15Summary and Key Takeaways
What to Remember About Amazon EKS
- EKS is managed Kubernetes: AWS runs and secures the control plane (API Server, etcd, Scheduler) across multiple Availability Zones automatically.
- You still own the data plane: worker nodes, their patching, scaling, and security are your responsibility unless you use Fargate.
- Everything follows a reconciliation loop: you declare desired state, and Kubernetes continuously works to match reality to it — the basis for self-healing.
- Security is layered, not singular: IAM, Kubernetes RBAC, network policies, and pod security standards each protect a different boundary.
- Scaling is two-dimensional: pods scale via the Horizontal Pod Autoscaler; nodes scale via Cluster Autoscaler or Karpenter — both are needed together.
- Observability requires deliberate setup: control-plane audit logging and metrics collection are opt-in, not automatic.
- Real companies — Snap, HSBC, Riot Games, Netflix — use EKS precisely to offload control-plane operations while keeping full Kubernetes portability.