Skip to content

mohamedevweb/oro-commerce-docker-demo

 
 

Repository files navigation

Migration OroCommerce vers Kubernetes - Projet EII 5

Migration complète de l'application OroCommerce Demo depuis Docker Compose vers Kubernetes avec Helm Charts, monitoring et haute disponibilité.

🏗️ Architecture

Cette solution déploie OroCommerce sur Kubernetes avec les composants suivants :

  • Frontend: Nginx (Deployment + Service)
  • Backend: PHP-FPM (Deployment + HPA)
  • Database: PostgreSQL (StatefulSet + PVC)
  • WebSockets:
  • Monitoring: Prometheus + Grafana

🗺️ Diagramme d’Architecture

flowchart LR
  subgraph Registry
    REG[Container Registry]
  end

  subgraph Ingress
    ING[Ingress + TLS]
  end

  subgraph NS["Namespace: orocommerce"]
    direction LR

    %% FRONT
    subgraph Frontend
      NGINX_DEP["Deployment: Nginx"]
      NGINX_SVC["Service: web (ClusterIP)"]
      HPA_NGX["HPA (optional)"]
    end

    %% BACK
    subgraph Backend
      PHP_DEP["Deployment: PHP-FPM"]
      PHP_SVC["Service: php-fpm (ClusterIP)"]
      HPA_PHP["HPA"]
      CFG_PHP["ConfigMap: php.ini"]
      SEC_APP["Secret: app creds"]
    end

    %% DATA
    subgraph Data
      direction LR
      subgraph PostgreSQL
        PG_SS["StatefulSet: PostgreSQL"]
        PG_SVC["Service: postgres"]
        PG_PVC["PVC: postgres-data"]
        PG_SEC["Secret: postgres creds"]
      end

      subgraph Redis
        REDIS_SS["StatefulSet: Redis"]
        REDIS_SVC["Service: redis"]
        REDIS_PVC["PVC: redis-data"]
      end

      subgraph ES["Elasticsearch"]
        ES_SS["StatefulSet: ES"]
        ES_SVC["Service: es"]
        ES_PVC["PVC: es-data"]
      end
    end

    %% MONITORING
    subgraph Monitoring
      PROM["Prometheus"]
      GRAF["Grafana"]
      EXP_NGINX["Exporter: Nginx"]
      EXP_PHP["Exporter: PHP-FPM"]
      EXP_NODE["Node Exporter / KSM"]
    end
  end

  %% App links
  ING --> NGINX_SVC
  NGINX_SVC --> PHP_SVC
  PHP_SVC --> PG_SVC
  PHP_SVC --> REDIS_SVC
  PHP_SVC --> ES_SVC

  %% Images -> workloads
  REG --> NGINX_DEP
  REG --> PHP_DEP
  REG --> PG_SS
  REG --> REDIS_SS
  REG --> ES_SS

  %% Workloads -> services
  NGINX_DEP --> NGINX_SVC
  PHP_DEP --> PHP_SVC
  PG_SS --> PG_SVC
  REDIS_SS --> REDIS_SVC
  ES_SS --> ES_SVC

  %% Storage
  PG_SS --- PG_PVC
  REDIS_SS --- REDIS_PVC
  ES_SS --- ES_PVC

  %% Config & secrets
  PHP_DEP --- CFG_PHP
  PHP_DEP --- SEC_APP
  PG_SS --- PG_SEC

  %% Monitoring
  NGINX_DEP -.-> EXP_NGINX -.-> PROM
  PHP_DEP -.-> EXP_PHP -.-> PROM
  PROM --> GRAF
  EXP_NODE --> PROM
Loading

📋 Prérequis

  • Kubernetes 1.25+ (Minikube, K3s, ou cluster)
  • Helm 3.x
  • kubectl configuré
  • 4 GB RAM minimum disponible

Installation sur Minikube

# Démarrer Minikube avec ressources suffisantes
minikube start --cpus=4 --memory=4096 --disk-size=20GB

# Activer les addons nécessaires
minikube addons enable ingress
minikube addons enable storage-provisioner
minikube addons enable metrics-server

Installation sur K3s

# Lancer Docker Dekstop
cocher l'options kubernetes

1. Cloner et préparer

git clone <votre-repo>
cd orocommerce

# Installer les dépendances Helm
helm dependency update

2. Déployer l'application complète

# Créer le namespace
kubectl create namespace orocommerce

# Déployer tout en une commande
helm install orocommerce . -n orocommerce

# Vérifier le déploiement
kubectl get pods -n orocommerce
kubectl get services -n orocommerce
kubectl get ingress -n orocommerce

3. Accéder à l'application

kubectl port-forward -n orocommerce service/frontend 8080:80
# Puis ouvrez http://localhost:8080 dans votre navigateur

4. Accéder au monitoring

# Prometheus
kubectl port-forward -n orocommerce service/orocommerce-monitoring-prometheus 9090:9090
open http://localhost:9090

# Grafana (admin/admin123)
kubectl port-forward -n orocommerce service/orocommerce-monitoring-grafana 3000:3000
open http://localhost:3000

⚙️ Configuration Avancée

Personnaliser les valeurs

# Copier et modifier les valeurs
cp values.yaml values-custom.yaml

# Editer selon vos besoins
vim values-custom.yaml

# Déployer avec vos valeurs
helm upgrade orocommerce . -n orocommerce -f values-custom.yaml

Configuration des ressources

# values-custom.yaml
backend:
  resources:
    limits:
      cpu: 2000m
      memory: 2Gi
    requests:
      cpu: 1000m
      memory: 1Gi
  autoscaling:
    enabled: true
    minReplicas: 3
    maxReplicas: 20
    targetCPUUtilizationPercentage: 60

Configuration de la base de données

# values-custom.yaml
database:
  auth:
    password: "VotreMotDePasseSecurise123!"
  persistence:
    size: 50Gi
  resources:
    limits:
      cpu: 2000m
      memory: 2Gi

🔍 Surveillance et Debug

Vérifier l'état des pods

# Status général
kubectl get all -n orocommerce

# Détails d'un pod
kubectl describe pod <pod-name> -n orocommerce

# Logs en temps réel
kubectl logs -f deployment/orocommerce-backend -n orocommerce

Métriques et monitoring

# Métriques CPU/Memory
kubectl top pods -n orocommerce
kubectl top nodes

# Events du cluster
kubectl get events -n orocommerce --sort-by='.lastTimestamp'

Tests de connectivité

# Test base de données
kubectl exec -it deployment/orocommerce-backend -n orocommerce -- \
  psql -h orocommerce-database -U orocommerce -d orocommerce -c "SELECT version();"

# Test frontend
curl -H "Host: orocommerce.local" http://$(minikube ip)/

🛠️ Troubleshooting

Problèmes courants

Pods en état Pending

# Vérifier les ressources
kubectl describe node

# Vérifier les PVC
kubectl get pvc -n orocommerce

Erreurs de base de données

# Vérifier les logs PostgreSQL
kubectl logs statefulset/orocommerce-database -n orocommerce

# Recréer la base si nécessaire
kubectl delete pvc -l app.kubernetes.io/name=database -n orocommerce
helm upgrade orocommerce . -n orocommerce

Problèmes d'Ingress

# Vérifier l'Ingress Controller
kubectl get pods -n ingress-nginx

# Installer nginx-ingress si nécessaire (Minikube)
minikube addons enable ingress

📈 Mise à l'échelle

Auto-scaling automatique (HPA)

Le backend est configuré avec HPA automatique :

# Déjà activé par défaut
backend:
  autoscaling:
    enabled: true
    minReplicas: 2
    maxReplicas: 10
    targetCPUUtilizationPercentage: 70

Scaling manuel

# Scaler le frontend
kubectl scale deployment orocommerce-frontend --replicas=5 -n orocommerce

# Scaler le backend
kubectl scale deployment orocommerce-backend --replicas=8 -n orocommerce

🔐 Sécurité Production

Secrets management

# Créer des secrets pour la production
kubectl create secret generic db-credentials -n orocommerce \
  --from-literal=password='VotreSuperMotDePasse'

kubectl create secret generic grafana-credentials -n orocommerce \
  --from-literal=admin-password='VotreSuperMotDePasseGrafana'

Mise à jour des certificats TLS

# Installer cert-manager
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.0/cert-manager.yaml

# Configurer Let's Encrypt
# (voir values.yaml pour la configuration SSL)

🧹 Nettoyage

# Supprimer l'application
helm uninstall orocommerce -n orocommerce

# Supprimer les PVC (données perdues !)
kubectl delete pvc --all -n orocommerce

# Supprimer le namespace
kubectl delete namespace orocommerce

📚 Documentation Complémentaire

🎓 Évaluation Projet M2

Critère 1: Exploiter et surveiller l'activité du système ✅

  • ✅ Monitoring Prometheus/Grafana complet
  • ✅ Métriques applicatives et infrastructure
  • ✅ Dashboards temps réel
  • ✅ Alertes configurées

Critère 2: Optimiser l'exploitation des données ✅

  • ✅ HPA automatique selon charge CPU/Memory
  • ✅ Resource limits optimisés
  • ✅ Stockage persistant avec PVC
  • ✅ Haute disponibilité multi-replica

Projet réalisé dans le cadre du M2 - EII 5 - Clusterisation de conteneurs - ESGI

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Smarty 100.0%