
This module kicks off your EKS journey with a clear roadmap: control plane vs data plane architecture, VPC networking with add-ons, and real-world adoption patterns from companies like Netflix and Snapchat. You'll also preview the storage, security, autoscaling, and observability topics covered later, plus get guidance on setting up your lab environment so you can follow along hands-on using current EKS best practices.
Ultimate EKS Bootcamp - Introduction Module
Building Your EKS Foundation
Slide 1: Welcome to the Ultimate EKS Bootcamp
Master Amazon EKS from Zero to Production
Today's Mission:
Understand what EKS is and why it matters
Learn EKS architecture and core components
Explore deployment options and networking
Discover real-world use cases and success stories
Slide 2: What is Amazon EKS?
The Managed Kubernetes Solution
Think of EKS as "Kubernetes with Training Wheels":
Native Kubernetes: Like building a car from scratch
Amazon EKS: Like buying a Tesla - fully featured, maintained, and optimized
Key Definition:
Fully managed Kubernetes service that runs on AWS
AWS handles the heavy lifting - control plane, updates, security patches
You focus on applications - not infrastructure management
The Magic Formula:
EKS = Kubernetes + AWS Integration + Operational Excellence
Slide 3: EKS vs Native Kubernetes
Why Choose Managed Over Self-Built?
Aspect Native Kubernetes Amazon EKS Control Plane You install, manage, upgrade AWS manages completely High Availability You design multi-master setup Built-in across 3 AZs Security Patches Your responsibility AWS handles automatically Upgrades Manual, risky process One-click upgrades Backup/Recovery You implement etcd backups AWS handles it Cost Hidden operational costs Transparent pricing Time to Production Weeks to months Hours to days
Analogy: Native K8s is like maintaining your own data center, EKS is like using AWS - same power, less hassle!
Slide 4: EKS Architecture - The Big Picture
Understanding the Two-Tier System
┌─────────────────────────────────────────────────────────────┐ │ AWS MANAGED │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ EKS Control Plane │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ │ │ AZ-1 │ │ AZ-2 │ │ AZ-3 │ │ │ │ │ │ API Server │ │ API Server │ │ API Server │ │ │ │ │ │ Scheduler │ │ Scheduler │ │ Scheduler │ │ │ │ │ │ Controller │ │ Controller │ │ Controller │ │ │ │ │ │ etcd │ │ etcd │ │ etcd │ │ │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ └─────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ ▲ │ kubectl, APIs ▼ ┌─────────────────────────────────────────────────────────────┐ │ YOUR VPC │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ Data Plane │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ │ │ Node │ │ Node │ │ Fargate │ │ │ │ │ │ Group │ │ Group │ │ Pods │ │ │ │ │ │ (EC2) │ │ (EC2) │ │(Serverless) │ │ │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ └─────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘
Key Insight: AWS manages the "brain" (control plane), you control the "muscles" (data plane)
Slide 5: EKS Control Plane Deep Dive
What AWS Manages for You
The Control Plane is like a Restaurant Kitchen:
API Server: The head chef taking orders
Scheduler: The sous chef assigning dishes to stations
Controller Manager: The kitchen manager ensuring everything runs smoothly
etcd: The recipe book storing all information
AWS Magic:
Multi-AZ by default - If one kitchen fails, others continue
Automatic updates - Latest recipes without downtime
Security hardening - Enterprise-grade protection
Backup and recovery - Never lose your recipes
You pay: $0.10/hour per cluster (~$72/month) - that's it!
Slide 6: Data Plane Options - Where Your Apps Live
Three Ways to Run Your Workloads
Option 1: Managed Node Groups
┌─────────────────────────────────────┐ │ Auto Scaling Group │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐│ │ │ EC2 │ │ EC2 │ │ EC2 ││ │ │ Instance│ │ Instance│ │ Instance││ │ │ Pod │ │ Pod │ │ Pod ││ │ │ Pod │ │ Pod │ │ Pod ││ │ └─────────┘ └─────────┘ └─────────┘│ └─────────────────────────────────────┘
Best for: Most workloads, cost-effective, full control
Option 2: Self-Managed Nodes
Complete control over EC2 instances
Custom AMIs and configurations
More responsibility for updates and patching
Option 3: AWS Fargate
┌─────────────────────────────────────┐ │ Serverless │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐│ │ │ Pod │ │ Pod │ │ Pod ││ │ │ (Right │ │ (Right │ │ (Right ││ │ │ Size) │ │ Size) │ │ Size) ││ │ └─────────┘ └─────────┘ └─────────┘│ └─────────────────────────────────────┘
Best for: Variable workloads, no server management
Slide 7: Node Groups vs Fargate - The Decision Matrix
When to Use What?
Use Case Managed Node Groups AWS Fargate Steady workloads ✅ Cost-effective ❌ More expensive Variable workloads ❌ Always running ✅ Pay per use Custom requirements ✅ Full control ❌ Limited options Operational overhead ⚠️ Some management ✅ Zero management Startup time ✅ Fast ⚠️ Slower cold start Debugging ✅ SSH access ❌ No node access
Pro Tip: Start with managed node groups, add Fargate for specific use cases!
Real-world example: Use node groups for web servers, Fargate for batch jobs
Slide 8: EKS Networking - The Connectivity Story
How Everything Talks to Everything
VPC Native Networking
┌─────────────────────────────────────────────────────────────┐ │ VPC │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────┐ │ │ │ Subnet A │ │ Subnet B │ │ Subnet C │ │ │ │ (AZ-1) │ │ (AZ-2) │ │ (AZ-3) │ │ │ │ ┌─────────────┐ │ │ ┌─────────────┐ │ │┌─────────────┐│ │ │ │ │Pod: 10.0.1.5│ │ │ │Pod:10.0.2.10│ │ ││Pod:10.0.3.15││ │ │ │ │Pod: 10.0.1.6│ │ │ │Pod:10.0.2.11│ │ ││Pod:10.0.3.16││ │ │ │ └─────────────┘ │ │ └─────────────┘ │ │└─────────────┘│ │ │ └─────────────────┘ └─────────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────────────────┘
Key Concepts:
Each pod gets a real VPC IP - no NAT needed!
AWS VPC CNI - Native AWS networking
Security Groups apply to pods directly
Network ACLs provide subnet-level security
Coming in Labs: We'll configure ALB ingress and EBS storage networking
Slide 9: EKS Setup Options - Choose Your Adventure
Multiple Paths to Success
1. eksctl - The Easy Button
# One command to rule them all eksctl create cluster --name my-cluster --region us-west-2
Best for: Quick start, learning, development
2. AWS CLI + kubectl - The Manual Way
# Step by step control aws eks create-cluster --name my-cluster... aws eks create-nodegroup --cluster-name my-cluster...
Best for: Understanding internals, custom configurations
3. Terraform - The Infrastructure as Code Way
resource "aws_eks_cluster" "main" { name = "my-cluster" role_arn = aws_iam_role.cluster.arn # ... more configuration }
Best for: Production environments, repeatable deployments
4. AWS CDK - The Developer-Friendly Way
new eks.Cluster(this, 'MyCluster', { version: eks.KubernetesVersion.V1_27, });
In Our Labs: We'll start with eksctl, then explore AWS CLI methods
Slide 10: EKS Add-ons - Supercharging Your Cluster
The Plugin Ecosystem
Core Add-ons (Essential)
┌─────────────────────────────────────────────────────────────┐ │ EKS Cluster │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────┐ │ │ │ AWS Load │ │ Amazon EBS │ │ CoreDNS │ │ │ │ Balancer │ │ CSI Driver │ │ (DNS) │ │ │ │ Controller │ │ (Storage) │ │ │ │ │ └─────────────────┘ └─────────────────┘ └─────────────┘ │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────┐ │ │ │ VPC CNI │ │ kube-proxy │ │ Amazon │ │ │ │ (Networking) │ │ (Networking) │ │ GuardDuty │ │ │ │ │ │ │ │ (Security) │ │ │ └─────────────────┘ └─────────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────────────────┘
Popular Third-Party Add-ons
Monitoring: Prometheus, Grafana, Loki
Security: Falco, Twistlock
Networking: Istio, Linkerd
Storage: EFS CSI, FSx CSI
In Our Labs: We'll install and configure ALB Controller, EBS CSI Driver, and monitoring stack
Slide 11: Real-World EKS Success Stories
Who's Using EKS and Why
? Spotify
Challenge: Scale music streaming for 500M+ users
Solution: EKS for microservices architecture
Result: 40% reduction in infrastructure costs
? Netflix
Challenge: Global content delivery platform
Solution: EKS for data processing and ML pipelines
Result: Faster feature deployment, better reliability
? Snapchat
Challenge: Handle billions of daily messages
Solution: EKS with Fargate for variable workloads
Result: 60% cost savings on compute resources
? Capital One
Challenge: Modernize banking infrastructure
Solution: EKS for cloud-native transformation
Result: Faster innovation, improved security
? Shopify
Challenge: Handle Black Friday traffic spikes
Solution: EKS with cluster autoscaling
Result: Seamless scaling from 1K to 100K+ requests/sec
Slide 12: EKS in Your Architecture
Common Patterns and Use Cases
Pattern 1: Microservices Architecture
┌─────────────────────────────────────────────────────────────┐ │ Application Layer │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ User │ │ Product │ │ Order │ │ │ │ Service │ │ Service │ │ Service │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ User │ │ Product │ │ Order │ │ │ │ Database │ │ Database │ │ Database │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────────────────┘
Pattern 2: Data Processing Pipeline
Data Ingestion → EKS Processing → Analytics → Visualization ↓ ↓ ↓ ↓ Kinesis → Spark Jobs → S3 → QuickSight
Pattern 3: CI/CD Platform
Code Push → Build (EKS) → Test (EKS) → Deploy (EKS) → Monitor
Slide 13: EKS Networking Deep Dive
Understanding the Network Flow
Pod-to-Pod Communication
┌─────────────────────────────────────────────────────────────┐ │ Same Node │ │ ┌─────────────┐ ┌─────────────┐ │ │ │ Pod A │ ────────→ │ Pod B │ │ │ │ 10.0.1.100 │ │ 10.0.1.101 │ │ │ └─────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────┐ │ Different Nodes │ │ ┌─────────────┐ ┌─────────────┐ │ │ │ Pod A │ ────────→ │ Pod C │ │ │ │ 10.0.1.100 │ VPC │ 10.0.2.100 │ │ │ │ Node 1 │ Routing │ Node 2 │ │ │ └─────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────────────────┘
Service Types We'll Use
ClusterIP: Internal communication only
NodePort: Access via node IP and port
LoadBalancer: AWS ELB integration
Ingress: HTTP/HTTPS routing (ALB)
Lab Preview: We'll configure ALB ingress for our microservices app
Slide 14: Storage in EKS - Persistent Data Solutions
Where Your Data Lives
Storage Options
┌─────────────────────────────────────────────────────────────┐ │ EKS Storage │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ EBS │ │ EFS │ │ FSx │ │ │ │ (Block │ │ (Network │ │ (High │ │ │ │ Storage) │ │ File) │ │ Performance)│ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ Databases │ │ Shared │ │ HPC │ │ │ │ StatefulSets│ │ Storage │ │ Workloads │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────────────────┘
Container Storage Interface (CSI)
EBS CSI Driver - Block storage for databases
EFS CSI Driver - Shared file storage
FSx CSI Driver - High-performance workloads
In Our Labs: We'll configure EBS storage for a database and set up persistent volumes
Slide 15: Security in EKS - Defense in Depth
Multiple Layers of Protection
Identity and Access Management
┌─────────────────────────────────────────────────────────────┐ │ Security Layers │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ IAM │ │ RBAC │ │ IRSA │ │ │ │ (AWS │ │ (Kubernetes │ │ (Pod-level │ │ │ │ Level) │ │ Level) │ │ AWS) │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ Cluster │ │ Namespace │ │ Pod │ │ │ │ Access │ │ Access │ │ Access │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────────────────┘
Network Security
Security Groups - Instance-level firewall
Network ACLs - Subnet-level firewall
Network Policies - Pod-to-pod communication rules
Lab Highlight: We'll implement IRSA to give pods secure access to S3 buckets
Slide 16: Autoscaling in EKS - Scale with Demand
Three Dimensions of Scaling
Horizontal Pod Autoscaler (HPA)
Low Traffic: [Pod] [Pod] High Traffic: [Pod] [Pod] [Pod] [Pod] [Pod]
Vertical Pod Autoscaler (VPA)
Low Load: [Pod: 1 CPU, 1GB RAM] High Load: [Pod: 2 CPU, 4GB RAM]
Cluster Autoscaler
Light Usage: [Node] [Node] Heavy Usage: [Node] [Node] [Node] [Node]
Advanced Topics Coming:
KEDA - Event-driven autoscaling
Karpenter - Next-gen node provisioning
In Our Labs: We'll configure all three autoscaling methods with real workloads
Slide 17: Monitoring and Observability
See Everything, Understand Everything
The Three Pillars
┌─────────────────────────────────────────────────────────────┐ │ Observability │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ Metrics │ │ Logs │ │ Traces │ │ │ │ (Prometheus)│ │ (Loki) │ │ (Jaeger) │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ Grafana │ │ CloudWatch │ │ X-Ray │ │ │ │(Dashboards) │ │ (AWS Native)│ │(AWS Tracing)│ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────────────────┘
Monitoring Stack Options
AWS Native: CloudWatch + Container Insights
Open Source: Prometheus + Grafana + Loki
Hybrid: Best of both worlds
Lab Preview: We'll set up comprehensive monitoring with both approaches
Slide 12: EKS in Your Architecture
Common Patterns and Use Cases
Pattern 1: Microservices Architecture
┌─────────────────────────────────────────────────────────────┐ │ Application Layer │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ User │ │ Product │ │ Order │ │ │ │ Service │ │ Service │ │ Service │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ User │ │ Product │ │ Order │ │ │ │ Database │ │ Database │ │ Database │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────────────────┘
Pattern 2: Data Processing Pipeline
Data Ingestion → EKS Processing → Analytics → Visualization ↓ ↓ ↓ ↓ Kinesis → Spark Jobs → S3 → QuickSight
Pattern 3: CI/CD Platform
Code Push → Build (EKS) → Test (EKS) → Deploy (EKS) → Monitor
Slide 13: EKS Networking Deep Dive
Understanding the Network Flow
Pod-to-Pod Communication
┌─────────────────────────────────────────────────────────────┐ │ Same Node │ │ ┌─────────────┐ ┌─────────────┐ │ │ │ Pod A │ ────────→ │ Pod B │ │ │ │ 10.0.1.100 │ │ 10.0.1.101 │ │ │ └─────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────┐ │ Different Nodes │ │ ┌─────────────┐ ┌─────────────┐ │ │ │ Pod A │ ────────→ │ Pod C │ │ │ │ 10.0.1.100 │ VPC │ 10.0.2.100 │ │ │ │ Node 1 │ Routing │ Node 2 │ │ │ └─────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────────────────┘
Service Types We'll Use
ClusterIP: Internal communication only
NodePort: Access via node IP and port
LoadBalancer: AWS ELB integration
Ingress: HTTP/HTTPS routing (ALB)
Lab Preview: We'll configure ALB ingress for our microservices app
Slide 14: Storage in EKS - Persistent Data Solutions
Where Your Data Lives
Storage Options
┌─────────────────────────────────────────────────────────────┐ │ EKS Storage │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ EBS │ │ EFS │ │ FSx │ │ │ │ (Block │ │ (Network │ │ (High │ │ │ │ Storage) │ │ File) │ │ Performance)│ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ Databases │ │ Shared │ │ HPC │ │ │ │ StatefulSets│ │ Storage │ │ Workloads │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────────────────┘
Container Storage Interface (CSI)
EBS CSI Driver - Block storage for databases
EFS CSI Driver - Shared file storage
FSx CSI Driver - High-performance workloads
In Our Labs: We'll configure EBS storage for a database and set up persistent volumes
Slide 15: Security in EKS - Defense in Depth
Multiple Layers of Protection
Identity and Access Management
┌─────────────────────────────────────────────────────────────┐ │ Security Layers │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ IAM │ │ RBAC │ │ IRSA │ │ │ │ (AWS │ │ (Kubernetes │ │ (Pod-level │ │ │ │ Level) │ │ Level) │ │ AWS) │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ Cluster │ │ Namespace │ │ Pod │ │ │ │ Access │ │ Access │ │ Access │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────────────────┘
Network Security
Security Groups - Instance-level firewall
Network ACLs - Subnet-level firewall
Network Policies - Pod-to-pod communication rules
Lab Highlight: We'll implement IRSA to give pods secure access to S3 buckets
Slide 16: Autoscaling in EKS - Scale with Demand
Three Dimensions of Scaling
Horizontal Pod Autoscaler (HPA)
Low Traffic: [Pod] [Pod] High Traffic: [Pod] [Pod] [Pod] [Pod] [Pod]
Vertical Pod Autoscaler (VPA)
Low Load: [Pod: 1 CPU, 1GB RAM] High Load: [Pod: 2 CPU, 4GB RAM]
Cluster Autoscaler
Light Usage: [Node] [Node] Heavy Usage: [Node] [Node] [Node] [Node]
Advanced Topics Coming:
KEDA - Event-driven autoscaling
Karpenter - Next-gen node provisioning
In Our Labs: We'll configure all three autoscaling methods with real workloads
Slide 17: Monitoring and Observability
See Everything, Understand Everything
The Three Pillars
┌─────────────────────────────────────────────────────────────┐ │ Observability │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ Metrics │ │ Logs │ │ Traces │ │ │ │ (Prometheus)│ │ (Loki) │ │ (Jaeger) │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ Grafana │ │ CloudWatch │ │ X-Ray │ │ │ │(Dashboards) │ │ (AWS Native)│ │(AWS Tracing)│ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────────────────┘
Monitoring Stack Options
AWS Native: CloudWatch + Container Insights
Open Source: Prometheus + Grafana + Loki
Hybrid: Best of both worlds
Lab Preview: We'll set up comprehensive monitoring with both approaches
Slide 22: Additional Resources
Continue Your Learning
Official Documentation
AWS EKS User Guide: https://docs.aws.amazon.com/eks/
Kubernetes Documentation: https://kubernetes.io/docs/
eksctl Documentation: https://eksctl.io/
Recommended Reading
"Kubernetes in Action" by Marko Lukša
"AWS Certified Solutions Architect" by Neil Davis
AWS Well-Architected Framework: Container workloads
Community Resources
AWS EKS GitHub: https://github.com/aws/amazon-eks-pod-identity-webhook
Kubernetes Slack: #eks-users channel
AWS re:Invent Sessions: EKS-focused talks
Practice Environments
AWS Free Tier: Limited EKS usage
Kubernetes Playground: https://labs.play-with-k8s.com/
Local Development: minikube, kind, k3s
Get your hands dirty with EKS by building your very first cluster. This module walks you through the whole setup in the right order, step by step, with lab guides you can follow along on your own AWS account. By the end you will know exactly what pieces go into an EKS environment and be ready to spin one up yourself.
Compare the four ways to build an EKS cluster (eksctl, AWS CLI with kubectl, Terraform, and AWS CDK) and see why we pick eksctl for this course. You will also map out every prerequisite: an AWS account, the right region, the tools to install, an IAM user with proper permissions, and an SSH key pair. After this you will have a clear plan and know each prep step before you launch anything.
Install and verify eksctl, kubectl, and the AWS CLI, then wire up the access your cluster needs. You will create a dedicated EKS admin IAM user, attach the right policy, generate access and secret keys, run aws configure for the Singapore region, and create an SSH key pair with correct file permissions. After this your machine and AWS account are fully ready to build the cluster.
Set up the network your EKS cluster will live in: a VPC with three public subnets spread across availability zones in the Singapore region. You will launch it using an AWS CloudFormation template, watch the subnets, internet gateway, and route associations come up, and read the resource map to confirm the subnets are truly public. This is the first building block every worker node depends on.
Create the IAM service role that lets the EKS control plane act inside your account. You will understand the trust relationship behind it, attach the AmazonEKSClusterPolicy and the EKS VPC resource controller policy, and save the role ARN for the next step. Gourav also shows how to use ChatGPT to dig deeper into any AWS concept on your own, so you are never stuck waiting for a mentor.
Write the cluster.yaml config file that eksctl uses to build your cluster. You will set the cluster name, region, VPC ID and subnet IDs, a managed node group of t2.micro instances, the SSH key pair, and the service role ARN, pulling most of these values straight from the CloudFormation outputs. Then you launch it with eksctl create cluster -f and understand every field you filled in.
Once the cluster is up, learn to read what eksctl actually built. You will trace the CloudFormation stacks for the control plane, CNI, and node group, check the managed node group and its auto scaling group in EC2, and validate everything with eksctl get cluster, kubectl get nodes, and kubectl config get-contexts. You will also open a NodePort visualizer by adding a security group rule for ports 30000 to 32767, and see why t2.micro nodes leave CoreDNS and metrics-server degraded.
Wrap up the cluster setup module and set yourself up for what comes next. Gourav's advice: move through these modules quickly to keep your AWS bill low while you learn. With a working EKS cluster in hand, you are ready to start deploying real applications on it.
Now that your EKS cluster is running, it is time to deploy an application to it. This module treats EKS like any other Kubernetes environment: you bring your existing deployment knowledge and only adjust a few things, such as upgrading the node group or working with NodePorts. Think of it as a hands-on refresher before we move into EKS-specific topics like storage and load balancers.
Meet the Instavote app, Docker's classic polyglot voting microservices stack, and plan how to deploy it on EKS. You will see how vote, result, worker, Redis, and the database connect, and work out which of the five tiers need a Deployment plus a Service and which (the worker) needs only a Deployment. You will also learn when to use NodePort versus ClusterIP services, so you can map any microservices app onto Kubernetes with confidence.
Start deploying the microservices app to your EKS cluster and hit a real-world wall: pods stuck in ContainerCreating because the VPC CNI cannot assign an IP. You will create a namespace, switch context with kubectl config, apply the manifests, then read the network sandbox error to see why a t2.micro caps out at four pods per node. By the end you will know how ENI limits and IP-per-node math decide pod capacity, and how to use ChatGPT to size the right instance type.
Fix the pod capacity limit by moving from t2.micro to t3.medium, which supports 17 pods per node. You will add a second managed node group in cluster.yaml, create it with eksctl create nodegroup, watch CloudFormation spin up the instances, then drain and delete the old node group safely. You will also reopen the NodePort range on the new node group's security group. After this you can grow node pod capacity on a live EKS cluster without downtime and understand the max-pods calculation behind it.
Generate Kubernetes manifests fast instead of writing YAML by hand. You will use kubectl create deployment and kubectl create service nodeport with --dry-run=client -o yaml to produce clean deployment and service specs, then save them to files. You will deploy the vote app and NodePort service, and see why the pods come up but the service returns nothing. By the end you can scaffold any deployment or service imperatively and turn it into reusable declarative manifests.
Debug the classic problem where a service has no endpoints because its selector does not match the pod labels. You will compare the service selector against the pod labels using kubectl get pods --show-labels, spot the role=vote versus app=vote mismatch, then fix the manifest and re-apply. Once the labels line up the endpoints appear and the app loads in the browser. After this you can diagnose and fix any broken service-to-pod connection in Kubernetes.
Finish the deployment by writing the worker deployment plus the result deployment and NodePort service on your own. You will generate the manifests with kubectl create, apply them with multiple -f flags, then verify the full flow by tailing the worker logs to confirm it connects to Redis and the database. You will test the running app end to end by casting votes across normal, incognito, and Safari sessions. By the end you can deploy a complete microservices stack on EKS and validate the vote-to-result data flow.
Look back at what it takes to run a microservices app on EKS. This recap ties together the pieces from the module: deploying the stack, hitting VPC CNI and ENI limits, migrating to a bigger node group, and fixing service selector issues. You will see which problems were plain Kubernetes and which were specific to EKS and AWS, and what comes next: load balancing, storage, and IAM roles for service accounts.
See how AWS components plug into your EKS cluster, starting with the Application Load Balancer. You will learn why an ALB acts as a single entry point that routes traffic to different microservices, and how the AWS Load Balancer Controller lets you drive it from the Kubernetes side using ingress rules. This intro sets up the concepts before you build ingress on EKS in the lessons that follow.
Understand how ingress works before you build it. You will walk through host-based and path-based routing, how an ingress controller watches ingress resources and updates the real load balancer, and how the AWS Load Balancer Controller maps ALB target groups to pod IPs. You will also see why ingress hands routing control to developers through RBAC instead of ops tickets. After this you will have a clear mental model of ingress, ALB, and the LBC before touching a single command.
Install the AWS Load Balancer Controller on your EKS cluster step by step. You will create the IAM policy from the JSON with the AWS CLI, attach it through an IAM service account created by eksctl using IRSA, then install the controller with Helm and point it at your cluster and service account. You will confirm the controller pod is running in kube-system and tail its logs. By the end you have a working LBC ready to manage ALBs whenever you create ingress rules.
Create the ingress rules that make the AWS Load Balancer Controller provision a real ALB for you. You will write an ingress manifest with the ALB annotations for internet-facing scheme and IP target type, set the ingressClassName to alb, and add host-based rules for the vote and result services. After you apply it, watch the controller create the load balancer, target groups, and listener rules automatically. By the end you can expose EKS microservices through an ALB using ingress and route traffic straight to pod IPs.
Validate the Kubernetes alb ingress by confirming host-based routes for vote.example.com and result.example.com, routing to pods across availability zones, and testing with local hosts file overrides.
A quick recap of how you connected Kubernetes to an AWS Application Load Balancer. You will remember the full path you built: the IAM roles and authorizations, the service accounts wired to RBAC, and the ingress rules that route traffic to your services. After this you will know when to reach for an ingress controller in real microservices and LLM workloads, and how the pieces fit together.
Get ready to add persistent storage to your EKS cluster for stateful workloads like databases. This intro explains why pods need storage that survives restarts and can be shared, and why EBS volumes are the most common choice on AWS. By the end you will understand what this module sets out to do: bring AWS EBS into Kubernetes and provision it dynamically for your pods.
Understand how storage reaches a container, from the pod spec and volume mounts down to the actual disk. Using a simple insurance-claim analogy, you will learn what a PersistentVolumeClaim does, why storage classes automate provisioning, and how a PVC lets you share and keep a volume even as pods come and go. You will also see why Kubernetes moved storage code out into the CSI driver interface, the same idea as CRI and CNI, so AWS storage like EBS, EFS, and FSx plugs in as an add-on.
Install the Amazon EBS CSI driver so your cluster can create and attach EBS volumes on its own. You will create an IAM service account with the EBS CSI driver policy using eksctl, add the EBS CSI driver as an EKS add-on, and attach the right IAM role. Then you will verify the CSI controller and per-node pods in the kube-system namespace and confirm the EBS storage class is ready with kubectl get sc.
Watch dynamic provisioning happen end to end as you recreate a database pod backed by an EBS volume. You will delete the old deployment, apply one that references a PersistentVolumeClaim, and see the pod sit in Pending until the claim is filled. After you apply a PVC asking for a GP2 volume with ReadWriteOnce access, the storage class and provisioner create the disk, bind it to the claim, and attach it to your node automatically.
Learn to troubleshoot a Postgres pod stuck in CrashLoopBackOff on a fresh EBS volume. You will read the pod events and logs, tell CrashLoopBackOff apart from Pending and ImagePullBackOff, and trace the failure to the lost+found directory that EBS creates. You will use ChatGPT to reason through the fix and then add an initContainer that cleans the mount before Postgres starts, so the database comes up healthy.
A short recap of provisioning persistent storage for pods in EKS with the EBS storage class. You will see how the same pattern carries over to EFS, FSx, and other cloud providers, since the CSI driver, storage class, and provisioner concepts stay the same and only the IAM setup is EKS-specific. Gourav also invites you to connect on LinkedIn and leave a review with feedback on where the course should go next.
Meet IRSA, IAM Roles for Service Accounts, the clean way to give a single pod AWS permissions instead of granting them to the whole EC2 instance. This intro sets up why pod-level authorization matters and how Kubernetes service accounts pair with AWS IAM roles for fine-grained access, say letting one pod reach an S3 bucket. Next you will build up the RBAC and service account concepts before putting IRSA to work on a real use case.
Build a solid mental model of Kubernetes RBAC before you tackle IRSA. Using a travel analogy of passport, visa, and customs, you will learn the three stages every request passes through: authentication, authorization, and admission control. You will understand how service accounts identify pods, how roles and rules define what actions are allowed on which resources, and how role bindings, cluster roles, and cluster role bindings tie it all together.
See why attaching an IAM role to the whole EC2 node is too broad when only one pod needs S3 access. This lecture explains how IRSA maps a Kubernetes service account to an IAM role, so you can grant AWS permissions at the pod level instead of the instance level. You will walk through a real use case: a Flask app that connects to an S3 bucket, and understand the trust setup that makes it work.
Create an S3 bucket in your region and deploy the S3 checker application as a Kubernetes deployment and NodePort service. You will access the app through a node's external IP and watch it fail while trying to list and write to the bucket. By the end you will understand exactly why the pod is denied and where IAM authorization needs to come in, setting up the IRSA fix in the next lectures.
Wire up IRSA end to end so your pod can write to S3. You will create an IAM policy scoped to one bucket with the AWS CLI, associate an OIDC provider with your EKS cluster, and use eksctl to create an IAM service account backed by CloudFormation. After attaching that service account to the deployment, you will confirm the pod writes a file to the bucket, then clean up the role, service account, and bucket properly.
Pull the whole module together, from Kubernetes RBAC to cross-account access. You will revisit subjects, roles, verbs, and role bindings, then see how a service account carries authorization to a single pod. The key takeaway is how IRSA builds trust between AWS and Kubernetes through the OIDC connector and an IAM role, so you can confidently grant AWS permissions to workloads running on EKS.
Get a clear map of scaling on EKS before you build any of it. This intro lays out the three layers you will work on: cluster autoscaler for scaling nodes, HPA for horizontal pod scaling, and VPA for vertical scaling. You will also see why monitoring comes first, so you have real metrics and visibility to watch scaling happen as you move through the module.
Install the kube-prometheus-stack with Helm to bring Prometheus, Grafana, Alertmanager, node exporter, and kube-state-metrics into a monitoring namespace. You will expose Grafana on a NodePort by overriding Helm values, log in, and import an EKS dashboard by ID. By the end you can read cluster CPU, memory, and pod capacity in Grafana, which gives you the visibility you need to watch autoscaling work.
Set up the Kubernetes Cluster Autoscaler so your EKS node group grows and shrinks on its own. You will create an IAM policy, attach it to the node group role, confirm the autoscaler discovery tags on your EC2 instances, and deploy the autoscaler into kube-system. Then you will scale an app until pods go pending and watch the desired capacity trigger a new node, and later see an unused node terminate when load drops.
Use the Horizontal Pod Autoscaler to scale your application pods on CPU load. You will confirm the metrics server is available with kubectl top, define an HPA with min, max, and a target CPU percentage plus scale-up and scale-down behavior, and set proper resource requests so scaling decisions make sense. Running a siege load test, you will watch pods scale from two toward the max and see cluster autoscaler add a node when capacity runs out.
Add the Vertical Pod Autoscaler so Kubernetes tunes CPU and memory requests for you instead of guessing. You will install the VPA, define a resource policy with min and max limits, and run it in auto mode alongside HPA. Under a fresh load test you will see the VPA raise pod resources, which keeps utilization well below the threshold with fewer replicas, and understand how VPA, HPA, and cluster autoscaler work together for efficient scaling.
Review the full scaling system you built: monitoring with Prometheus and Grafana, node scaling with cluster autoscaler, and pod scaling with HPA and VPA working together rather than in competition. You will leave knowing how these pieces stabilize your workloads over time, and where to go next with event-driven scaling using KEDA and smarter, cost-saving node provisioning using Karpenter on EKS.
Learn Amazon EKS the right way — from fundamentals to advanced autoscaling and monitoring.
This course is designed for DevOps Engineers, Cloud Architects, and Kubernetes practitioners who want to confidently run production workloads on Amazon Elastic Kubernetes Service (EKS).
We’ll start with a practical, lab-driven approach — no endless theory. You’ll begin by setting up your AWS and Kubernetes environment, then progress through deploying workloads, managing networking with ALB ingress, enabling persistent storage, and securing access with IAM Roles for Service Accounts (IRSA).
From there, we’ll tackle scaling strategies — EKS Cluster Autoscaler, Horizontal Pod Autoscaler, Vertical Pod Autoscaler, and advanced solutions like Karpenter for just-in-time node provisioning, and KEDA for event-driven scaling.
Finally, we’ll cover EKS observability with logging, metrics, and dashboards so you can keep your clusters healthy and cost-efficient.
By the end of this bootcamp, you’ll have a production-ready EKS skillset — ready to build, scale, and monitor Kubernetes workloads on AWS.
What You’ll Learn
Set up and configure Amazon EKS clusters from scratch
Deploy applications to EKS using kubectl and manifests
Configure Ingress with AWS ALB Ingress Controller
Attach persistent EBS volumes for stateful workloads
Secure workloads using IAM Roles for Service Accounts (IRSA)
Implement EKS Cluster Autoscaler for node scaling
Apply Horizontal Pod Autoscaler (HPA) and Vertical Pod Autoscaler (VPA) for workload scaling
Use Karpenter for next-generation cluster scaling
Implement KEDA for event-driven autoscaling scenarios
Monitor and troubleshoot EKS clusters using Prometheus, Grafana, and CloudWatch
Optimize cost and performance for Kubernetes workloads on AWS