In this project, you will deploy a microservices architecture on Kubernetes, You will gain experience with key technologies and concepts such as Kubernetes architecture, deployments, services, ingresses, and API gateways. Additionally, this project will provide you with an opportunity to practice DevOps skills such as containerization, continuous integration, and deployment (CI/CD), and infrastructure as code (IaC) using Kubernetes manifests. By completing this project, you will have a solid understanding of microservices architecture and the tools and techniques used to deploy and manage such systems using Kubernetes.
You have to deploy this microservices architecture in a k3s cluster consisting of the following components:
-`inventory-database container` is a PostgreSQL database server that contains your inventory database, it must be accessible via port `5432`.
-`billing-database container` is a PostgreSQL database server that contains your billing database, it must be accessible via port `5432`.
-`inventory-app container` is a Node.Js server that contains your inventory-app code running and connected to the inventory database and accessible via port `8080`.
-`billing-app container` is a Node.Js server that contains your billing-app code running and connected to the billing database and consuming the messages from the RabbitMQ queue, and it can be accessed via port `8080`.
-`RabbitMQ container` is a RabbitMQ server that contains the queue.
-`api-gateway-app container` is a Node.Js server that contains your api-gateway-app code running and forwarding the requests to the other services and it's accessible via port `3000`.
> You can use the Dockerfiles you created in the play-with-containers project!
### The cluster
By using k3s in Vagrant you must create 2 virtual machines:
1. Master: the master in the k3s cluster.
2. Agent: an agent in the k3s cluster.
You must install `kubectl` on your machine to manage your cluster.
Your databases must be deployed as Statefulset in your k3s cluster, and you must create volumes that enable containers to move across infrastructure without losing the data.
If you complete the mandatory part successfully and you still have free time, you can implement anything that you feel deserves to be a bonus, Examples: