- Overview
- Prerequisites
- Project Structure
- Installation
- Part 1 - K3s and Vagrant
- Part 2 - K3s and Ingress
- Part 3 - K3d and ArgoCD
- Bonus Part - GitLab CI/CD
- Contributing
The Inception of Things (IoT) project is an in-depth learning project covering Kubernetes, containerization technologies, and GitOps practices. It consists of four progressive parts that cover:
- K3s Infrastructure: Kubernetes cluster deployment with Vagrant
- Traffic Management: Ingress Controller configuration with multiple applications
- GitOps with ArgoCD: Automated continuous deployment
- CI/CD Pipeline: Complete GitLab + ArgoCD + K3d integration
- VirtualBox 7.0+
- Vagrant 2.0+
- Docker 20.0+
- kubectl 1.28+
- k3d 5.0+
- ArgoCD CLI 2.0+
- Helm 3.0+
- Git 2.0+
Run the installation script to set up all necessary tools:
chmod +x install.sh
./install.sh- RAM: 8GB minimum (12GB recommended)
- Disk Space: 20GB available
- OS: Linux (Debian/Ubuntu recommended)
- Network: Stable Internet connection
inception-of-things/
βββ install.sh # Tools installation script
βββ README.md # This file
βββ p1/ # Part 1: K3s + Vagrant
β βββ Makefile
β βββ Vagrantfile
β βββ scripts/
β βββ server.sh
β βββ worker.sh
βββ p2/ # Part 2: Ingress Controller
β βββ Makefile
β βββ Vagrantfile
β βββ confs/
β β βββ httpd.yaml
β β βββ nginx.yaml
β β βββ helloworld.yaml
β β βββ ingress.yaml
β βββ scripts/
β βββ server.sh
βββ p3/ # Part 3: ArgoCD
β βββ makefile
β βββ confs/
β β βββ k3d.yaml
β β βββ configmap.yaml
β β βββ ingress.yaml
β βββ scripts/
β βββ script.sh
βββ bonus/ # Bonus Part: CI/CD Pipeline
βββ makefile
βββ confs/
β βββ k3d.yaml
β βββ gitlab.yaml
β βββ gitlab-ingress.yaml
β βββ argo-ingress.yaml
β βββ configmap.yaml
βββ scripts/
βββ setup.sh
βββ generatetoken.rb
-
Clone the project
git clone https://github.com/Axiaaa/IoT/ cd inception-of-things -
Install dependencies
chmod +x install.sh ./install.sh
-
Add your user to Docker group
sudo usermod -aG docker $USER newgrp docker
Create a K3s cluster with one server and one worker using Vagrant.
- lcamerlyS (Server): 192.168.56.110 - 2GB RAM, 2 CPU
- lcamerlySW (Worker): 192.168.56.111 - 2GB RAM, 2 CPU
cd p1
make all # Create VMs and cluster
make clean # Destroy VMs
make fclean # Complete cleanup# On the server VM
vagrant ssh lcamerlyS
sudo kubectl get nodes -o wideExpected output:
NAME STATUS ROLES AGE VERSION
lcamerlyS Ready control-plane,master 1m v1.28.7+k3s1
lcamerlyS Ready <none> 1m v1.28.7+k3s1
Configure a Traefik Ingress Controller to route traffic to different applications.
- App1 (httpd): Accessible via
app1.com - App2 (nginx): Accessible via
app2.com- 3 replicas - App3 (hello-kubernetes): Accessible via
app3.com+ default route
cd p2
make all # Create VM and deploy apps# Test each application
make app1 # curl -H "Host:app1.com" 192.168.56.110
make app2 # curl -H "Host:app2.com" 192.168.56.110
make app3 # curl -H "Host:app3.com" 192.168.56.110
make default # curl 192.168.56.110 (default route)Applications are also accessible via:
- http://localhost:8080 (forwarded port)
- http://localhost:8443 (HTTPS forwarded port)
Deploy ArgoCD in a K3d cluster and configure automatic application deployment.
- K3d Cluster: 1 server + 2 agents
- ArgoCD: Continuous deployment web interface
- Application: Auto-deployed from GitHub repository
cd p3
make all # Create cluster and deploy ArgoCD
make clean # Delete cluster-
ArgoCD UI: http://argocd.awesome.local
- Username:
admin - Password: Displayed in script logs
- Username:
-
Application: http://playground.local
- β Automatic synchronization from GitHub
- β Accessible ArgoCD web interface
- β
Deployment to
devnamespace - β Ingress configuration with Traefik
Complete CI/CD pipeline with GitLab, ArgoCD and K3d for advanced GitOps workflow.
βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ
β GitLab ββββββΆβ K3d βββββΆβ ArgoCD βββββΆβ Application β
β (SCM) β β (Runtime) β β (GitOps) β β (App) β
βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ
- GitLab: http://gitlab.concombre.toboggan
- ArgoCD: http://argocd.awesome.local
- Application: http://playground.local
cd bonus
make all # Complete deployment (~15-20 minutes)
make clean # Cleanup- Code Push β GitLab detects changes
- GitLab β Provides source repository
- ArgoCD β Automatically syncs manifests
- K3d Cluster β Deploys updated application
- β Integrated GitLab with automatic authentication
- β Automatic token generation
- β Bidirectional GitOps synchronization
- β Multi-service Ingress with Traefik
- β Visual monitoring via ArgoCD UI
- β Zero-downtime deployment
Credentials are displayed at the end of deployment:
# GitLab
Username: root
Password: <automatically generated>
# ArgoCD
Username: admin
Password: <automatically generated>- GitOps: Deployment practice using Git as source of truth
- Ingress Controller: HTTP/HTTPS ingress traffic management
- Service Mesh: Secure inter-service communication
- CI/CD Pipeline: Continuous integration and deployment
- Fork the project
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is developed for educational purposes. See LICENSE for more details.