Migration complète de l'application OroCommerce Demo depuis Docker Compose vers Kubernetes avec Helm Charts, monitoring et haute disponibilité.
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
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
- Kubernetes 1.25+ (Minikube, K3s, ou cluster)
- Helm 3.x
- kubectl configuré
- 4 GB RAM minimum disponible
# 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
# Lancer Docker Dekstop
cocher l'options kubernetes
git clone <votre-repo>
cd orocommerce
# Installer les dépendances Helm
helm dependency update
# 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
kubectl port-forward -n orocommerce service/frontend 8080:80
# Puis ouvrez http://localhost:8080 dans votre navigateur
# 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
# 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
# values-custom.yaml
backend:
resources:
limits:
cpu: 2000m
memory: 2Gi
requests:
cpu: 1000m
memory: 1Gi
autoscaling:
enabled: true
minReplicas: 3
maxReplicas: 20
targetCPUUtilizationPercentage: 60
# values-custom.yaml
database:
auth:
password: "VotreMotDePasseSecurise123!"
persistence:
size: 50Gi
resources:
limits:
cpu: 2000m
memory: 2Gi
# 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 CPU/Memory
kubectl top pods -n orocommerce
kubectl top nodes
# Events du cluster
kubectl get events -n orocommerce --sort-by='.lastTimestamp'
# 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)/
# Vérifier les ressources
kubectl describe node
# Vérifier les PVC
kubectl get pvc -n orocommerce
# 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
# Vérifier l'Ingress Controller
kubectl get pods -n ingress-nginx
# Installer nginx-ingress si nécessaire (Minikube)
minikube addons enable ingress
Le backend est configuré avec HPA automatique :
# Déjà activé par défaut
backend:
autoscaling:
enabled: true
minReplicas: 2
maxReplicas: 10
targetCPUUtilizationPercentage: 70
# Scaler le frontend
kubectl scale deployment orocommerce-frontend --replicas=5 -n orocommerce
# Scaler le backend
kubectl scale deployment orocommerce-backend --replicas=8 -n orocommerce
# 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'
# 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)
# 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
- ✅ Monitoring Prometheus/Grafana complet
- ✅ Métriques applicatives et infrastructure
- ✅ Dashboards temps réel
- ✅ Alertes configuré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