Go to file
2025-10-02 10:18:00 +02:00
p1 directory stucture and start p2 2025-02-17 14:30:10 +01:00
p2 p2 done ? 2025-02-19 21:15:09 +01:00
README.md docs: add comprehensive README for Kubernetes and IoT project 2025-10-02 10:18:00 +02:00

Inception-of-Things (IoT) - École 42

Description

Inception-of-Things est un projet de l'École 42 qui introduit aux technologies DevOps modernes, particulièrement Kubernetes, Docker, et l'orchestration de conteneurs. Ce projet utilise K3s (Kubernetes léger) avec Vagrant pour créer et gérer des clusters Kubernetes.

Objectifs pédagogiques

  • Découvrir Kubernetes et l'orchestration de conteneurs
  • Maîtriser K3s (version allégée de Kubernetes)
  • Comprendre les concepts DevOps (IaC, CI/CD)
  • Gérer l'infrastructure as Code avec Vagrant
  • Apprendre le déploiement d'applications conteneurisées
  • Mettre en place des services réseau et load balancing

Architecture du projet

Structure générale

Inception-of-Things/
├── p1/                  # Partie 1 - Cluster K3s simple
│   ├── Vagrantfile     # Configuration VMs
│   └── scripts/        # Scripts d'installation
├── p2/                  # Partie 2 - Applications et services
│   ├── Vagrantfile     # Configuration avancée
│   ├── confs/          # Configurations Kubernetes
│   └── scripts/        # Scripts de déploiement
└── README.md           # Documentation

Partie 1 (P1) - Cluster K3s basique

Objectifs

  • Créer un cluster K3s avec 2 machines virtuelles
  • Configurer un master node et un worker node
  • Établir la communication inter-nodes

Infrastructure

  • VM Master (apommierS) : 192.168.56.110

    • Rôle : Control plane K3s
    • RAM : 2048 MB
    • CPU : 2 cores
  • VM Worker (apommierSW) : 192.168.56.111

    • Rôle : Worker node
    • RAM : 2048 MB
    • CPU : 2 cores

Technologies utilisées

  • Vagrant : Orchestration des VMs
  • VirtualBox : Hyperviseur
  • K3s : Distribution Kubernetes légère
  • Ubuntu 18.04 : OS des VMs

Partie 2 (P2) - Applications et services

Objectifs

  • Déployer des applications web sur le cluster
  • Configurer des services Kubernetes
  • Mettre en place du load balancing
  • Gérer les ressources et namespaces

Services déployés

  • Applications web personnalisées
  • Ingress controller pour le routage
  • Load balancer pour la répartition de charge
  • Services avec exposition externe

Installation et déploiement

Prérequis

  • Vagrant 2.2+
  • VirtualBox 6.0+
  • Git pour cloner le projet
  • 8GB RAM minimum disponible

Installation

git clone <repository-url>
cd Inception-of-Things

Déploiement P1

cd p1
vagrant up

Vérification P1

# Connexion au master
vagrant ssh apommierS

# Vérifier les nodes
kubectl get nodes

# Vérifier les pods système
kubectl get pods -A

Déploiement P2

cd ../p2
vagrant up

Vérification P2

# Vérifier les applications
kubectl get deployments

# Vérifier les services
kubectl get services

# Tester l'accès aux applications
curl http://192.168.56.110

Scripts d'automatisation

P1 - Scripts de base

  • k3s-master.sh : Installation et configuration du master
  • k3s-worker.sh : Installation et jointure du worker

P2 - Scripts avancés

  • deploy-apps.sh : Déploiement des applications
  • setup-ingress.sh : Configuration du routage
  • configure-services.sh : Setup des services

Configuration Kubernetes

Exemple de déploiement d'application

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web-app
  template:
    metadata:
      labels:
        app: web-app
    spec:
      containers:
      - name: web
        image: nginx:alpine
        ports:
        - containerPort: 80

Service avec LoadBalancer

apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: web-app

Concepts Kubernetes abordés

Ressources de base

  • Pods : Unité de déploiement minimale
  • Deployments : Gestion des réplicas d'applications
  • Services : Exposition et découverte de services
  • ConfigMaps : Configuration externalisée
  • Secrets : Gestion des données sensibles

Réseau et routage

  • Ingress : Routage HTTP/HTTPS
  • Network Policies : Sécurité réseau
  • LoadBalancer : Répartition de charge
  • ClusterIP : Communication interne

Gestion des ressources

  • Namespaces : Isolation logique
  • Resource Quotas : Limitation des ressources
  • Limits et Requests : Gestion mémoire/CPU

Commandes utiles

Gestion des VMs

# Démarrer les VMs
vagrant up

# Arrêter les VMs
vagrant halt

# Supprimer les VMs
vagrant destroy

# Recharger la configuration
vagrant reload

Debugging Kubernetes

# Logs des pods
kubectl logs <pod-name>

# Description détaillée
kubectl describe pod <pod-name>

# Shell dans un pod
kubectl exec -it <pod-name> -- /bin/bash

# Événements du cluster
kubectl get events --sort-by=.metadata.creationTimestamp

Monitoring

# Utilisation des ressources
kubectl top nodes
kubectl top pods

# État du cluster
kubectl cluster-info

# Services exposés
kubectl get endpoints

Résolution de problèmes

Problèmes courants

  • Nodes NotReady : Vérifier la connectivité réseau
  • Pods Pending : Vérifier les ressources disponibles
  • Services inaccessibles : Vérifier les labels et selectors
  • Images non trouvées : Vérifier les registry et tags

Logs système

# Logs K3s sur le master
sudo journalctl -u k3s

# Logs K3s sur le worker
sudo journalctl -u k3s-agent

# Logs Vagrant
vagrant up --debug

Sécurité et bonnes pratiques

Configurations recommandées

  • RBAC activé par défaut
  • Network policies pour l'isolation
  • Resource limits pour éviter la famine
  • Secrets pour les données sensibles
  • Image policies pour la sécurité

Optimisations

  • Resource requests appropriées
  • Health checks (readiness/liveness)
  • Rolling updates pour les déploiements
  • Horizontal Pod Autoscaling si nécessaire

Extensions possibles

Bonus et améliorations

  • Monitoring avec Prometheus/Grafana
  • Logging centralisé avec ELK Stack
  • CI/CD avec GitLab/Jenkins
  • Service Mesh avec Istio
  • Storage persistant avec volumes

Intégrations

  • Helm pour la gestion de packages
  • ArgoCD pour GitOps
  • Cert-Manager pour les certificats TLS
  • External-DNS pour la gestion DNS

Compétences développées

  • Infrastructure as Code avec Vagrant
  • Orchestration de conteneurs avec Kubernetes
  • Administration système Linux
  • Networking et services distribués
  • Troubleshooting d'infrastructures complexes
  • DevOps et automatisation
  • Monitoring et observabilité

Architecture réseau

Schéma de déploiement

    ┌─────────────────────────────────────┐
    │           Host Machine              │
    │  ┌─────────────┐  ┌─────────────┐   │
    │  │ Master Node │  │ Worker Node │   │
    │  │ 192.168.56. │  │ 192.168.56. │   │
    │  │    110      │  │    111      │   │
    │  │             │  │             │   │
    │  │   K3s API   │  │   K3s Agent │   │
    │  │   Server    │  │             │   │
    │  └─────────────┘  └─────────────┘   │
    └─────────────────────────────────────┘

Tests et validation

Tests de fonctionnement

# Test connectivité entre nodes
kubectl get nodes -o wide

# Test déploiement d'application
kubectl create deployment test-nginx --image=nginx
kubectl expose deployment test-nginx --port=80 --type=NodePort

# Test scaling
kubectl scale deployment test-nginx --replicas=3

Métriques de succès

  • Cluster K3s opérationnel
  • Communication inter-nodes
  • Applications déployées et accessibles
  • Load balancing fonctionnel
  • Pas d'erreurs dans les logs

Documentation officielle

Auteur

Alexandre Pommier (apommier) - École 42

Licence

Projet académique - École 42


"Introduction pratique à l'orchestration moderne" ☸️🚀