Déploiement PHP sur Kubernetes : guide de base
Le développement web moderne nécessite de plus en plus de solutions évolutives et tolérantes aux pannes. Kubernetes (K8s) est devenu le standard de facto pour l'orchestration de conteneurs. Si vous êtes développeur PHP et souhaitez apprendre à déployer vos applications sur Kubernetes, ce guide est fait pour vous. Nous allons parcourir le chemin, de la création d'une image Docker au déploiement d'un service PHP complet dans un cluster.
Pourquoi déployer PHP sur Kubernetes ?
Kubernetes offre plusieurs avantages pour les applications PHP :
- Mise à l'échelle automatique : K8s peut augmenter le nombre de pods lorsque la charge augmente et le réduire lorsqu'elle diminue.
- Auto-guérison : Si un conteneur tombe, Kubernetes le redémarre automatiquement.
- Gestion de la configuration : Les variables d'environnement et les fichiers de configuration peuvent être facilement centralisés via ConfigMap et Secrets.
- Simplicité des mises à jour : Les Rolling updates permettent de mettre à jour l'application sans temps d'arrêt.
C'est particulièrement pertinent pour PHP, car de nombreux projets legacy sont difficiles à mettre à l'échelle avec les méthodes traditionnelles.
Étape 1 : Conteneurisation de l'application PHP
Avant de déployer l'application sur Kubernetes, elle doit être empaquetée dans une image Docker. Prenons l'exemple d'une application PHP simple utilisant Nginx et PHP-FPM.
Création de la structure du projet
my-php-app/├── src/│ └── index.php├── docker/│ ├── nginx/│ │ └── default.conf│ └── php/│ └── Dockerfile└── docker-compose.ymlExemple de src/index.php
<?phpecho "Hello from PHP on Kubernetes!";phpinfo();?>Dockerfile pour PHP-FPM
FROM php:8.2-fpm-alpine
RUN docker-php-ext-install pdo pdo_mysql
COPY src/ /var/www/html/
EXPOSE 9000CMD ["php-fpm"]Configuration Nginx (docker/nginx/default.conf)
server { listen 80; server_name localhost; root /var/www/html;
location / { try_files $uri $uri/ /index.php?$query_string; }
location ~ \\.php$ { fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }}Construction de l'image
docker build -t my-php-app:latest -f docker/php/Dockerfile .Étape 2 : Rédaction des manifestes Kubernetes
Maintenant que l'image est prête, créons les manifestes pour le déploiement dans le cluster.
Deployment pour PHP-FPM
apiVersion: apps/v1kind: Deploymentmetadata: name: php-app labels: app: php-appspec: replicas: 3 selector: matchLabels: app: php-app template: metadata: labels: app: php-app spec: containers: - name: php-fpm image: my-php-app:latest ports: - containerPort: 9000 env: - name: DB_HOST value: "mysql-service" - name: DB_NAME value: "mydb" resources: requests: memory: "128Mi" cpu: "250m" limits: memory: "256Mi" cpu: "500m"Deployment pour Nginx
apiVersion: apps/v1kind: Deploymentmetadata: name: nginx labels: app: nginxspec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:alpine ports: - containerPort: 80 volumeMounts: - name: nginx-config mountPath: /etc/nginx/conf.d volumes: - name: nginx-config configMap: name: nginx-config