
September 09, 2026
13 min read
By Kokil Thapa | Last reviewed: September 2026
Most teams reach for Kubernetes when one monolith no longer fits, but self-managing the control plane is a full-time job. Amazon EKS: A Practical Guide exists because managed Kubernetes on AWS trades that operational burden for a predictable monthly bill and AWS-native integrations. If you already run Laravel, APIs, or microservices on EC2 or Amazon ECS with Fargate, EKS is the path when you need portable workloads, Helm charts, and a standard kubectl workflow. This page walks through architecture, first-cluster setup, networking, IAM, and the production decisions that actually matter.
What is Amazon EKS and how does the architecture work?
Amazon Elastic Kubernetes Service (EKS) is AWS's managed Kubernetes offering. AWS hosts and patches the Kubernetes control plane across three Availability Zones. You own the data plane: EC2 node groups, self-managed nodes, or Fargate profiles that run your pods.
The split matters for day-two operations. AWS handles etcd backups, API server upgrades, and control-plane availability. You handle node AMI updates, pod scheduling, storage classes, ingress, and application deployments. That division is why EKS fits teams that want Kubernetes semantics without building a control plane.
Each EKS cluster runs inside your VPC. Worker nodes need subnets in multiple AZs. The API server endpoint can be public, private, or both. Private-only endpoints are common in production because they reduce exposure while still allowing access through a VPN or bastion.
For background on the broader AWS Kubernetes path, see the companion post on running Kubernetes on AWS with Amazon EKS. If you are comparing cloud providers, the Google GKE practical guide covers the same decisions on GCP.
How do you create your first Amazon EKS cluster?
The fastest path for a learning cluster is eksctl. For anything that survives past a week, use Terraform or CloudFormation so the cluster is reproducible. A common mistake is clicking through the console once and never codifying the result.
Prerequisites
Install the AWS CLI, kubectl, and eksctl on your workstation. Configure an IAM principal with permissions to create EKS clusters, VPC resources, and IAM roles. Pick a supported Kubernetes version; check the AWS EKS Kubernetes versions documentation before you pin one.
Cluster creation with eksctl
Save this as cluster.yaml and adjust region, instance type, and node count for your budget.
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: prod-eks
region: ap-south-1
version: "1.32"
vpc:
cidr: 10.20.0.0/16
nat:
gateway: HighlyAvailable
managedNodeGroups:
- name: ng-general
instanceType: t3.large
desiredCapacity: 3
minSize: 2
maxSize: 6
volumeSize: 80
privateNetworking: true
labels:
role: general
tags:
Environment: production
addons:
- name: vpc-cni
- name: coredns
- name: kube-proxy
- name: aws-ebs-csi-driver
Apply it:
eksctl create cluster -f cluster.yaml
aws eks update-kubeconfig --name prod-eks --region ap-south-1
kubectl get nodes
When nodes show Ready, the data plane is live. Deploy a smoke-test app before you wire CI/CD.
- Create or select a VPC with subnets tagged for EKS (
kubernetes.io/cluster/<name>). - Define the cluster IAM role and node group role with the standard AWS-managed policies.
- Enable the OIDC provider — required for IRSA.
- Install core add-ons: VPC CNI, CoreDNS, kube-proxy, and the EBS CSI driver for persistent volumes.
- Configure
kubectlaccess viaaws eks update-kubeconfigor your CI runner role. - Deploy a sample workload and confirm DNS, storage, and ingress end to end.
How does networking work on Amazon EKS?
EKS networking is where most first clusters stumble. The Amazon VPC CNI plugin assigns real VPC IP addresses to pods. Each ENI on a node has an IP limit. Large node types support more pods, but the ceiling is lower than you expect on smaller instances.
Plan subnet CIDR sizes before launch. A /24 per AZ fills quickly when each pod consumes a VPC IP. Many teams adopt custom networking, prefix delegation, or alternate CNIs when pod density outgrows the default setup.
Service types and ingress
Inside the cluster, Services expose pods with ClusterIP, NodePort, or LoadBalancer types. For HTTP traffic from the internet, install the AWS Load Balancer Controller. It watches Ingress or Gateway API resources and provisions Application Load Balancers automatically.
Pair ingress with Amazon API Gateway when you need edge auth, throttling, or WAF in front of internal services. For user authentication at the app layer, AWS Cognito integrates cleanly with JWT-aware services.
Private clusters and security groups
Production clusters often use private subnets for nodes and a private API endpoint. Security groups control traffic between the control plane and nodes. The cluster security group is created automatically; node security groups need explicit rules for kubelet, CoreDNS, and your app ports.
On teams where I handle Linux server work alongside application delivery, VPC design and security group hygiene are treated as part of the deploy pipeline, not a networking afterthought. That mindset transfers directly to EKS.
Which compute option should you choose: managed nodes, Karpenter, or Fargate?
EKS supports several compute models. Pick based on operational tolerance, cost, and how bursty your workload is.
| Option | Best for | Trade-offs | Approx. control-plane cost |
|---|---|---|---|
| Managed node groups | Steady-state apps, predictable load, simplest ops | You patch AMIs; capacity is manual or autoscaled | ~USD 73/month per cluster (~Rs 9,800) |
| Karpenter | Spiky workloads, mixed instance types, fast scale-out | Extra controller to run; requires clear node policies | Same EKS fee plus EC2 spend |
| Fargate profiles | Small teams, no node patching, per-pod isolation | Higher per-vCPU cost; not every pod fits Fargate constraints | EKS fee plus Fargate vCPU/memory pricing |
| Self-managed nodes | Custom AMIs, GPU tuning, legacy compliance needs | You own patching, scaling, and failure recovery | EKS fee plus your EC2 ops time |
If you only need AWS-native containers without Kubernetes APIs, ECS on Fargate is simpler and often cheaper at small scale. EKS earns its keep when you need Helm, operators, multi-cloud portability, or a large ecosystem of third-party tools.
For a multi-cloud lens on the same decision, read the guide on multi-cloud architecture and active-active vs active-passive patterns.
How do you secure Amazon EKS for production workloads?
Security on EKS is IAM all the way down. Three layers matter most: cluster access, node permissions, and pod-level AWS access.
IRSA: IAM Roles for Service Accounts
Never mount long-lived AWS access keys inside pods. Enable the OIDC identity provider on your cluster, then annotate Kubernetes service accounts with an IAM role ARN. The AWS SDK inside your app picks up temporary credentials automatically.
apiVersion: v1
kind: ServiceAccount
metadata:
name: app-sa
namespace: production
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::123456789012:role/eks-app-s3-read
This pattern is how Laravel or Node services read from S3, publish to SQS, or call Secrets Manager without secrets in environment variables.
RBAC and audit logging
Map IAM users or SSO roles to Kubernetes RBAC groups through the aws-auth ConfigMap or EKS access entries (the newer API). Turn on control-plane logging to CloudWatch for api, audit, authenticator, controllerManager, and scheduler log types. Audit logs are essential when something changes in production and nobody admits to running kubectl apply.
Pod security and network policies
Enable a Pod Security Standard at the namespace level — restricted for app namespaces, baseline for system tools. Add NetworkPolicies once CNI supports them. Default-deny egress from app namespaces except to DNS and your database security group.
Admission controllers and webhooks extend this further. The article on mutating and validating webhooks explains how teams enforce labels, resource limits, and image registries at deploy time.
How do you deploy applications and operate an EKS cluster day to day?
A production EKS cluster is only as good as the pipeline that feeds it. The pattern I use on Git-based projects — build artefact, push to registry, deploy with zero downtime — maps cleanly to Kubernetes rolling updates.
Container registry and CI/CD
Push images to Amazon ECR. Tag with the Git SHA, not latest. Your pipeline builds the Docker image, scans it, pushes to ECR, then runs kubectl set image or applies a Kustomize/Helm manifest. For Jenkins-based setups, see the tutorial on building a CI/CD pipeline with Jenkins.
aws ecr get-login-password --region ap-south-1 | \
docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-south-1.amazonaws.com
docker build -t myapp:${GIT_SHA} .
docker tag myapp:${GIT_SHA} 123456789012.dkr.ecr.ap-south-1.amazonaws.com/myapp:${GIT_SHA}
docker push 123456789012.dkr.ecr.ap-south-1.amazonaws.com/myapp:${GIT_SHA}
kubectl set image deployment/myapp myapp=123456789012.dkr.ecr.ap-south-1.amazonaws.com/myapp:${GIT_SHA} -n production
kubectl rollout status deployment/myapp -n production
Validate deployment manifests with the JSON formatter or regex tester when debugging templated YAML in CI logs.
Observability stack
Install metrics-server for basic CPU/memory metrics. For dashboards, Prometheus plus Grafana is the default open-source stack. The Grafana dashboards practical guide covers panel design once your metrics pipeline is live.
Ship container logs to CloudWatch Container Insights or a centralised stack. The post on log aggregation for small teams applies when you do not want a dedicated observability team.
Upgrades and rollbacks
EKS supports upgrading one minor Kubernetes version at a time. Upgrade the control plane first, then node groups. Drain nodes before AMI or kubelet upgrades. Keep previous Deployment revisions so kubectl rollout undo is one command away.
Managed add-ons should track the cluster version. After upgrades, run conformance checks and your smoke-test suite. Document the rollback path before you start.
What does Amazon EKS cost and how do you keep the bill predictable?
EKS pricing has two layers: the cluster management fee and the compute underneath. As of 2026, expect roughly USD 0.10 per hour per cluster (~Rs 16/hour, ~USD 73/month) for the control plane alone. That fee applies even if every node is stopped.
- EC2 node groups: Instance hours, EBS volumes, and data transfer dominate. Use Savings Plans or Reserved Instances for baseline capacity.
- Fargate: Per-vCPU and per-GB-hour. Convenient, but expensive at steady high utilisation.
- Data transfer: Cross-AZ pod traffic and NAT gateway egress add up silently. Keep chatty services in the same AZ when possible.
- Load balancers: Each Ingress can spawn an ALB. Consolidate hostnames or use NLB where appropriate.
- Observability: CloudWatch log ingestion and long Prometheus retention are recurring costs. Set retention policies on day one.
For Redis-backed session or cache layers outside the cluster, compare against Amazon ElastiCache for Redis. Managed cache often beats running Redis inside the cluster for stateful data.
Nepal-based teams billing in NPR should model USD costs with current forex rates. The Nepal forex rates tool helps when you present infrastructure budgets to stakeholders.
Key Takeaways
- Amazon EKS splits control-plane management (AWS) from data-plane operations (your nodes, add-ons, and apps).
- Codify clusters with Terraform or eksctl YAML — console-only setups do not survive the first rebuild.
- Plan VPC CNI IP capacity early; subnet size and instance type directly limit how many pods you can run.
- Use IRSA for AWS API access from pods and RBAC plus access entries for human kubectl access.
- Wire CI/CD to push SHA-tagged images to ECR and roll out with
kubectl rollout statuschecks. - Budget for the flat ~USD 73/month control-plane fee plus EC2, NAT, and load-balancer costs before you commit.
People Also Ask
Is Amazon EKS worth it compared to ECS or self-managed Kubernetes?
EKS is worth it when you need standard Kubernetes APIs, Helm charts, operators, or multi-cloud portability. ECS on Fargate is simpler and often cheaper for small, AWS-only workloads. Self-managed Kubernetes saves the EKS fee but costs far more in engineer time. Most production teams pick EKS for the managed control plane.
How long does it take to create an EKS cluster?
A basic cluster with eksctl and one managed node group typically takes 15–20 minutes. Terraform runs take similar wall-clock time because EKS control-plane creation is the bottleneck. Add another hour for add-ons, ingress controller, and CI/CD wiring before you call it production-ready.
What Kubernetes version should I run on EKS in 2026?
Run a version within the standard support window listed in AWS documentation. Upgrade one minor version at a time. Avoid extended-support versions unless you have a compliance reason; they carry an additional per-cluster hourly fee.
Can I run Laravel or PHP apps on Amazon EKS?
Yes. Package Laravel as a container with PHP-FPM and Nginx or Apache, push to ECR, and deploy as a Deployment with a Service and Ingress. Use IRSA for S3 access, ElastiCache or a Redis sidecar for sessions, and external RDS or Aurora for MySQL. The app does not care that it runs on EKS as long as health checks and env config are correct.
Put Amazon EKS to work on your next platform decision
Amazon EKS: A Practical Guide is not a licence to Kubernetes everything. It is a structured path when your team outgrows single-server Laravel deploys and needs portable, autoscaled container orchestration on AWS. Start with one non-production cluster, codify it, harden IAM and networking, then promote the same pattern to production.
If you are planning a custom platform — booking systems, API backends, or multi-service eCommerce — and want help choosing between EKS, ECS, and traditional Linux hosting, reach out through contact us. For reference, see the Adventure Third Pole Trek booking platform and other enterprise application work in the portfolio, or explore custom software development and ongoing support and maintenance options.
Frequently Asked Questions
0 Comments
Leave a comment
Your email is not published. Comments appear once they have been read. Sign in to have your details filled in.

