Prerequisites


1. ECR Setup & Docker Image Push

export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
export REGION=ap-south-1

# Create ECR repository
aws ecr create-repository --repository-name myapp --region $REGION

# Authenticate Docker to ECR
aws ecr get-login-password --region $REGION | \\
  docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com

# Tag & push image
docker tag myapp:latest $AWS_ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/myapp:latest
docker push $AWS_ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/myapp:latest

2. Create EKS Cluster

eksctl create cluster \\
  --name my-cluster \\
  --region $REGION \\
  --nodegroup-name workers \\
  --node-type t3.medium \\
  --nodes 2 \\
  --managed

AWS manages: Control plane, API server, etcd

You manage: Worker nodes, pods, deployments, services


3. Deploy Application

deployment.yaml

(Note: Added resources block. HPA requires CPU/Memory requests to function.)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: myapp
          image: $AWS_ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/myapp:latest
          ports:
            - containerPort: 8080
          resources:
            requests:
              cpu: "100m"
              memory: "128Mi"
            limits:
              cpu: "500m"
              memory: "256Mi"
kubectl apply -f deployment.yaml
kubectl get pods