This project demonstrates a complete CI/CD pipeline for deploying a containerized Node.js application to Amazon Elastic Kubernetes Service (EKS).
The application generates random names, stores them in a MongoDB database, and displays all saved names through a web interface.
The infrastructure includes Amazon EKS Auto Mode, Amazon ECR, GitHub Actions, a Network Load Balancer (NLB), MongoDB StatefulSet with persistent storage, and Kubernetes manifests.
- Amazon Web Services (AWS)
- Amazon EKS (Auto Mode)
- Amazon ECR
- Amazon EBS
- Network Load Balancer (NLB)
- Kubernetes
- Docker
- GitHub Actions
- Node.js
- MongoDB 3.6
- eksctl
.
├── .github/
│ └── workflows/
│ └── deploy.yml
│
├── diagram/
│ ├── architecture.drawio
│ └── architecture.png
│
├── eksctl/
│ └── cluster.yaml
│
├── k8s/
│ ├── namespace.yaml
│ ├── storageclass.yaml
│ ├── mongodb-secret.yaml
│ ├── mongodb-service.yaml
│ ├── mongodb-init-configmap.yaml
│ ├── mongodb-statefulset.yaml
│ ├── app-deployment.yaml
│ └── app-service.yaml
│
├── screenshots/
│
├── Dockerfile
├── package.json
├── README.md
└── ...
The Kubernetes cluster was provisioned using eksctl with Amazon EKS Auto Mode.
Resources deployed:
- Amazon EKS Cluster
- Amazon ECR Repository
- Amazon EBS Persistent Volume
- Kubernetes Namespace
- MongoDB StatefulSet
- Node.js Deployment
- Kubernetes Services
- Network Load Balancer
- Deployment
- 2 Replicas
- LoadBalancer Service
- MongoDB 3.6
- StatefulSet
- Persistent Volume Claim
- Amazon EBS Storage
The project uses GitHub Actions for Continuous Integration and Continuous Deployment.
Pipeline workflow:
- Developer pushes code to GitHub.
- GitHub Actions starts automatically.
- Docker image is built.
- Image is pushed to Amazon ECR.
- kubectl connects to Amazon EKS.
- Deployment image is updated.
- Kubernetes performs a rolling update.
The workflow authenticates to AWS using GitHub OIDC without storing long-term AWS credentials.
Provision the cluster:
eksctl create cluster -f eksctl/cluster.yamlDeploy Kubernetes resources:
kubectl apply -f k8s/Verify resources:
kubectl get pods -n namegen
kubectl get svc -n namegen
kubectl get pvc -n namegen- Fully containerized application
- Automated CI/CD pipeline
- Kubernetes rolling updates
- Persistent MongoDB storage
- Network Load Balancer exposure
- GitHub OIDC authentication
- Infrastructure deployed on Amazon EKS Auto Mode
The application is automatically built and deployed after every push to the main branch.
The deployment includes:
- Amazon EKS
- Amazon ECR
- Amazon EBS
- MongoDB StatefulSet
- Kubernetes LoadBalancer Service
- GitHub Actions CI/CD
The application is accessible through an AWS Network Load Balancer and stores data persistently using Amazon EBS.











