This is a fun project that I made to learn some stuff that I always wanted to get to know better. The application does not have a specific purpose other than that. I especially wanted to see how the scaling and load balancing behaves with K8s, which is why the ui displays the pods where the request went through.
Specifically, I used the following technologies:
- Kubernetes (using minikube for local development): Container Orchestration / Deployment
- Go: Programming Language
- gRPC: Service Communication
- Protocol Buffers: Communication Format
- Earthly: CI / CD
- React: User Interface
- Prometheus: Metrics Collection
- Grafana: Metrics Visualization
This is a very simplified overview of the architecture.
Using minikube:
# Setup minikube docker environment
minikube start
eval $(minikube docker-env)
# Build all services
earthly +all-docker
# Allows the access to NodePort and Ingress (Execute this in a seperate terminal)
minikube tunnel
# Deploy the application
kubectl apply -f deploy/
Now you should be able to access http://localhost:80 (for UI and API), http://localhost:9090/ (for Prometheus) and http://localhost:4000 (for Grafana).
cluster-admin
assigned, which is not recommended for production!