Déploiement PHP sur Kubernetes : guide de base pour développeurs

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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.yml


Exemple 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


ConfigMap pour la configuration

Blogs

Book Recommendations