Overview
On-Prem to AWS EKS Migration
Full enterprise migration from self-managed hosting to AWS EKS with Dockerization, Jenkins CI/CD, ECR, ArgoCD GitOps, ALB ingress, Kubernetes health probes, CloudWatch visibility, rollback planning, and production handover.
Public-safe portfolio project. Real client names, internal project names, credentials, private URLs, IP addresses, account IDs, and organization-owned source code are intentionally excluded.
Business Problem
The platform had multiple Scala, Node.js, Java, and Angular services running outside a consistent cloud-native deployment model. Releases required stronger repeatability, health validation, observability, and support documentation before the workload could be treated as production-ready on Kubernetes.
Architecture
flowchart LR
Users[Users] --> R53[Route 53]
R53 --> ALB[Application Load Balancer]
ALB --> Ingress[AWS Load Balancer Controller]
Ingress --> EKS[AWS EKS Cluster]
subgraph VPC[AWS VPC]
subgraph Public[Public Subnets]
ALB
NAT[NAT Gateway]
IGW[Internet Gateway]
end
subgraph Private[Private Subnets]
EKS
Pods[Scala Node Java Angular Pods]
RDS[(Private Data Layer)]
end
end
Dev[Git Commit] --> Jenkins[Jenkins CI Pipeline]
Jenkins --> ECR[Amazon ECR]
ECR --> Argo[ArgoCD GitOps Sync]
Argo --> EKS
EKS --> CW[CloudWatch Logs and Metrics]
EKS --> Probes[Liveness and Readiness Probes]
IAM[IAM Roles and Policies] --> Jenkins
IAM --> EKS
SG[Security Groups] --> ALB
SG --> EKS
SG --> RDSMy Responsibilities
- Owned the DevOps migration path from self-managed deployment patterns to AWS EKS delivery workflows.
- Created and documented Dockerfile patterns for Scala, Node.js, Java, and Angular workloads.
- Built Jenkins pipeline stages for checkout, build, image tagging, Amazon ECR publishing, and deployment handoff.
- Defined Kubernetes deployment, service, ingress, ConfigMap/Secret reference, liveness probe, and readiness probe patterns.
- Documented ArgoCD GitOps sync, ALB ingress routing, CloudWatch validation, rollback steps, and support handover.
Implementation
- Separated application build concerns from runtime configuration so images could move across environments predictably.
- Standardized readiness behavior so traffic is routed only to pods that can serve requests.
- Introduced liveness checks to recover stuck application processes without manual intervention.
- Aligned image promotion through ECR with a GitOps deployment flow for controlled Kubernetes changes.
- Captured operational runbooks for deployment verification, logs, rollback, and KT.
Challenges
- Different application stacks had different health endpoint behavior.
- Service startup timing had to be respected before routing production traffic.
- Deployment ownership needed to move from manual knowledge to documented, repeatable workflows.
Solution
The solution combined automation, clear infrastructure boundaries, operational validation, and documentation-first handover. The design focuses on traceable releases, least-privilege access, predictable runtime behavior, and observable production systems.
Code Snippet
Representative public-safe snippet showing the type of implementation pattern used.
apiVersion: apps/v1
kind: Deployment
metadata:
name: application-service
spec:
template:
spec:
containers:
- name: app
image: account-id.dkr.ecr.region.amazonaws.com/app:release-tag
readinessProbe:
httpGet:
path: /health/ready
port: 8080
initialDelaySeconds: 20
periodSeconds: 10
livenessProbe:
httpGet:
path: /health/live
port: 8080
initialDelaySeconds: 45
periodSeconds: 20Deployment Flow
- 1
Discovery and target architecture
- 2
Dockerization
- 3
CI/CD and ECR flow
- 4
Kubernetes manifests and ALB ingress
- 5
Health checks, monitoring, rollback, handover
Validation
- Verified deployment health before routing user traffic.
- Reviewed logs, metrics, events, and runtime configuration.
- Documented rollback and post-deployment checks for support teams.
Monitoring and Security
- Monitoring focused on logs, runtime status, health checks, alarms, and deployment evidence.
- Security guidance covered IAM roles, security groups, secrets handling, and private network boundaries where applicable.
- Operational notes included backup, restore, rollback, and incident response expectations.
Outcome and Impact
- Improved release repeatability through containerized builds and GitOps deployment control.
- Improved Kubernetes stability through liveness and readiness probes.
- Improved support readiness through CloudWatch checks, rollback documentation, and handover notes.
Lessons Learned
- Reliable DevOps delivery depends on validation, not only deployment automation.
- Runbooks and handover notes reduce operational risk during production support.
- Health checks, logs, access boundaries, and rollback steps should be designed before go-live.
Related Incident Experience
- Kubernetes deployment issue
- Storage lifecycle recovery
- Service startup failure
- Pipeline rollback