This project is a cloud-native, microservices-based web application that utilizes Kubernetes (K8s) for orchestration. The application consists of a backend API and frontend UI, designed to be scalable and modular using microservices architecture. Each service (frontend and backend) is containerized using Docker, and the application is deployed on a Kubernetes cluster.
| Service | Build Status | Coverage Status | Trivy Status |
|---|---|---|---|
| Backend | |||
| Frontend | WIP | WIP |
/backend # Node.js Express API (microservice)
/frontend # React frontend for the Pomodoro Timer (microservice)
/kubernetes # Kubernetes YAML files for deployment, services, and Ingress
/argo # Argo CD application manifests for app-of-apps deployment
- Start, track, and clear Pomodoro timers.
- Live countdown for each active timer.
- Microservices architecture for better scalability and modularity.
- Deployed using Docker containers with Kubernetes orchestration.
- Cloud-native design leveraging K8s for service management and scaling.
- GitOps with Argo CD for automated deployment and synchronization.
- Docker image vulnerability scanning with Trivy
Make sure you have the following installed on your machine:
- Docker
- Node.js
- Kubernetes (local k3s or minikube cluster)
- kubectl
- Argo CD (optional for GitOps deployment)
- Istio (required for Ingress setup)
git clone git@github.com:NineKama/pomodoro-cloud-native.git
cd pomodoro-cloud-nativeTo build and run the backend microservice:
cd backend
docker build -t pomodoro-backend .
docker run -p 4000:4000 pomodoro-backendThe backend server will be running on http://localhost:4000.
To build and run the frontend microservice:
cd frontend
docker build -t pomodoro-frontend .
docker run -p 3000:80 pomodoro-frontendThe frontend UI will be available at http://localhost:3000.
The project includes Kubernetes YAML files for deploying the frontend and backend services in a cloud-native environment.
- Backend Deployment:
kubernetes/backend/deployment.yaml - Frontend Deployment:
kubernetes/frontend/deployment.yaml - Service Configurations:
kubernetes/backend/service.yamlandkubernetes/frontend/service.yaml - Ingress Setup:
kubernetes/istio/ingress.yaml
- Make sure your local Kubernetes cluster is running (e.g., k3s, minikube).
- Install Istio by following the Istio getting started guide.
- Apply the YAML files in the
kubernetes/directory:
kubectl apply -f kubernetes/This will create the necessary deployments, services, and Ingress to run the microservices-based Pomodoro Timer application.
To deploy using Argo CD and the app-of-apps pattern:
- Make sure Argo CD is installed and running in your cluster.
- Apply the parent application manifest:
kubectl apply -f argo/parent-application/parent-application.yamlThis will allow Argo CD to manage and deploy the backend, frontend, and other components as defined in the argo directory.
This project emphasizes a microservices architecture where the frontend and backend are independent services. By utilizing Kubernetes, the application benefits from cloud-native features such as:
- Scalability: Easily scale services based on demand.
- Resilience: Automatic restarts and self-healing for containers.
- Portability: Runs consistently across different cloud providers and environments.
- Service Discovery: Kubernetes services provide internal DNS for service communication.
Feel free to open issues and create pull requests to improve the project.
This project is licensed under the MIT License.