Objective
This is the first in a series of interconnected computer projects spanning a year.
In these projects, I will attempt to develop a complete and realistic eCommerce application “demo-shop”.
At the same time, I also intend to build a software factory in the form of automated CI/CD pipelines.
The resulting application will be deployed in a Kubernetes environment and made publicly accessible.
The application and the infrastructure used will also be equipped with monitoring and a notification system for reporting issues.
Application development and operations will be automated as much as possible and made reusable for other future applications.
In this first delivery, I want to achieve the following:
- Design a real-world eCommerce application,
and create the corresponding application documentation with diagrams - Create schema migration and (test) data migration scripts for the database
- Develop the core of the full-stack web application with external configuration and logging
- Develop web services which use REST and gRPC as API protocol
- Create the first, rapid build part of a CI pipeline,
with compile, unit tests, code coverage checks, static code analysis checks and SBOM generation - This rapid build portion of a CI pipeline should be executed automatically
before a feature branch is merged into the master branch of the source code repository;
even better, these static code analysis checks can also be performed locally before each commit - Manual testing by individual developers
(a separate application runtime environment “local-devapp” is required for each developer) - install and get to know kubernetes
This project therefore ensures the implementation of the following (blue) parts of the pipelines:
Result
1 - Install and study Kubernetes
To increase the portability, scalability and availability of my programs,
I am going to use Kubernetes as the software platform.
Kubernetes has become practically the standard for this in companies and for Cloud providers.
First, I learned the architecture and basic operation of Kubernetes via an online course.
After that, I compared various Kubernetes distributions and chose “K3s/K3d” as a lightweight implementation
(vs standard kubernetes K8s, Openshift, Talos Linux, Minikube, Kind, Microk8s).
To install Kubernetes, I needed to provide hardware and virtual machines.
After that, I had to develop the desired cluster architecture and namespaces on top of this.
I created the following 3 Kubernetes environments:
- Kubernetes cluster local-devapp" for local development and exploration:
on my development PC/laptop, I installed “Rancher Desktop”;
I used a one-node cluster with K3s and a multi-node cluster with K3d,
which are dynamically created and removed when necessary - Kubernetes cluster"home-devdep" for central app development and deployment tools:
For this, I used a one-node cluster with K3s,
and purchased a refurbished business-grade machine for this;
this cluster can be expanded with extra nodes later - Kubernetes cluster “home-prodapp” for applications deployed in production:
For this, I used a one-node cluster with K3s,
and purchased a refurbished business-grade machine for this;
this cluster can be expanded with extra nodes later
The purchase price of these 2 machines had to fall within my annual budget of 500 EUR.
I bought the following 2 refurbished business-grade mini pc’s with low power consumption,
and installed K3s Kubernetes on it:
HP EliteDesk 800 G5 USFF - Intel Core i5-9th Gen (6 cores/6 threads) - 16 GB RAM - 256 GB ssd
2 - Deploy existing applications in Kubernetes
