Magento 2 et Kubernetes : faire évoluer votre infrastructure e-commerce
Magento 2 and Kubernetes: Scaling Your E-Commerce Infrastructure
Running a Magento 2 store that can handle traffic spikes, seasonal rushes, and unexpected gligneth is no small feat. Traditional hosting setups often struggle to keep up, leading to slow load times, downtime, and lost sales. That’s where Kubernetes comes in—a powerful container orchestration tool that can supercharge your Magento 2 store’s scalabilité and reliability.
Dans cet article, nous’ll break down how Kubernetes works with Magento 2, why it’s a game-changer for e-commerce, and how you can set it up étape par étape—even if you’re new to the world of containers and orchestration.
Why Kubernetes for Magento 2?
Magento 2 is resource-intensive. Between database queries, full-page caching, and dynamic contenu rendering, a high-traffic store can quickly overwhelm a single server. Kubernetes solves this by:
- Auto-scaling: Spin up additional containers during traffic spikes and scale down when demand drops.
- High availability: Distribute workloads across mulconseille nodes to prevent downtime.
- Efficient resource usage: Run mulconseille services (PHP-FPM, Redis, Varnish) in isolated containers.
- Simplified déploiements: Roll out updates with zero downtime using blue-green or canary déploiements.
If you’ve ever struggled with server crashes during Black Friday or slow paiement times, Kubernetes peut être your safety net.
Key Components of a Magento 2 Kubernetes Setup
Avant diving into the setup, let’s outline the core pieces:
- Containers: Docker containers for Magento 2, PHP-FPM, Nginx, MySQL, Redis, and Elasticrecherche.
- Kubernetes Cluster: A group of servers (nodes) that run your containers.
- Pods: The smallest déployerable units in Kubernetes (e.g., a Magento 2 pod with PHP-FPM and Nginx).
- Services: Internal load balancers that route traffic to pods.
- Ingress: Manages external HTTP/S traffic (like an Nginx reverse proxy).
- Persistent Volumes: Storage for Magento media, sessions, and database fichiers.
Step-by-Step: Deploying Magento 2 on Kubernetes
Let’s walk through a basic déploiement. For this exemple, we’ll assume you have a Kubernetes cluster ready (like Google Kubernetes Engine, AWS EKS, or a local Minikube setup).
1. Dockerize Magento 2
Premièrement, create a Dockerfile for Magento 2:
FROM php:8.1-fpm
# Install dependencies
RUN apt-get update && apt-get install -y \
libzip-dev \
libpng-dev \
libonig-dev \
libxml2-dev \
zip \
unzip
# Install PHP extensions
RUN docker-php-ext-install pdo_mysql zip gd mbstring exif pcntl bcmath soap
# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Set working directory
WORKDIR /var/www/html
# Copy Magento files (you’ll replace this with your actual Magento installation)
COPY . .
# Install Magento dependencies
RUN composer install
Build and push the image to a container registry (like Docker Hub or Google Container Registry):
docker build -t yourusername/magento2:latest .
docker push yourusername/magento2:latest
2. Set Up Kubernetes Deployments
Create a magento-deployment.yaml fichier to define your Magento 2 pods:
apiVersion: apps/v1
kind: Deployment
metadata:
name: magento
spec:
replicas: 3
selector:
matchLabels:
app: magento
template:
metadata:
labels:
app: magento
spec:
containers:
- name: magento
image: yourusername/magento2:latest
ports:
- containerPort: 9000
volumeMounts:
- name: magento-data
mountPath: /var/www/html
volumes:
- name: magento-data
persistentVolumeClaim:
claimName: magento-pvc
Apply the déploiement:
kubectl apply -f magento-deployment.yaml
3. Configure Persistent Storage
Magento needs persistent storage for media, sessions, and the var répertoire. Create a persistent-volume-claim.yaml:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: magento-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 20Gi
Apply the PVC:
kubectl apply -f persistent-volume-claim.yaml
4. Set Up MySQL and Redis
Magento relies on MySQL and Redis for database and caching. Deploy them as separate services:
# mysql-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:8.0
env:
- name: MYSQL_ROOT_PASSWORD
value: "yourpassword"
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-data
mountPath: /var/lib/mysql
volumes:
- name: mysql-data
persistentVolumeClaim:
claimName: mysql-pvc
---
# redis-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis
spec:
replicas: 1
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
containers:
- name: redis
image: redis:6.2
ports:
- containerPort: 6379
5. Expose Magento with a Service and Ingress
Create a magento-service.yaml to expose Magento internally:
apiVersion: v1
kind: Service
metadata:
name: magento-service
spec:
selector:
app: magento
ports:
- protocol: TCP
port: 80
targetPort: 9000
Puis, set up an Ingress to route external traffic (assuming you have an Ingress contrôleur like Nginx installed):
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: magento-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: yourstore.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: magento-service
port:
number: 80
Scaling Magento 2 with Kubernetes
One of Kubernetes’ biggest strengths is auto-scaling. Here’s comment configure it:
Horizontal Pod Autoscaler (HPA)
Automatically scale Magento pods basé sur CPU usage:
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: magento-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: magento
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
Database and Cache Scaling
For high-traffic stores, consider:
- Using MySQL Group Replication or Galera Cluster for database redundancy.
- Deploying Redis Cluster for distributed caching.
Monitoring and Logging
Kubernetes provides tools like:
- Prometheus: For monitoring resource usage and performance.
- Grafana: For visualizing metrics.
- EFK Stack (Elasticrecherche, Fluentd, Kibana): For centralized logging.
Réflexions finales
Kubernetes might seem complex at first, but the avantages for Magento 2 are undeniable:
Boost Your Magento 2 Performance
Scaling with Kubernetes is just the beginning. Optimize your frontend and achieve 90+ Google PageSpeed scores with our Page Speed Optimizer module.
Discover Page Speed Optimizer