Bereitstellung von PHP auf Kubernetes: Ein grundlegender Leitfaden
Moderne Webentwicklung erfordert zunehmend skalierbare und ausfallsichere Lösungen. Kubernetes (K8s) ist zum De-facto-Standard für die Container-Orchestrierung geworden. Wenn Sie ein PHP-Entwickler sind und die Bereitstellung Ihrer Anwendungen in Kubernetes erlernen möchten, ist dieser Leitfaden genau das Richtige für Sie. Wir gehen den Weg von der Erstellung eines Docker-Images bis zur Bereitstellung eines vollwertigen PHP-Dienstes in einem Cluster.
Warum PHP auf Kubernetes bereitstellen?
Kubernetes bietet eine Reihe von Vorteilen für PHP-Anwendungen:
- Automatische Skalierung: K8s kann die Anzahl der Pods bei steigender Last erhöhen und bei sinkender Last verringern.
- Selbstheilung: Wenn ein Container ausfällt, startet Kubernetes ihn automatisch neu.
- Konfigurationsverwaltung: Umgebungsvariablen und Konfigurationsdateien lassen sich einfach über ConfigMap und Secrets zentralisieren.
- Einfache Updates: Rolling Updates ermöglichen die Aktualisierung der Anwendung ohne Ausfallzeiten.
Für PHP ist dies besonders relevant, da viele Legacy-Projekte mit traditionellen Methoden nur schwer zu skalieren sind.
Schritt 1: Containerisierung der PHP-Anwendung
Bevor Sie eine Anwendung in Kubernetes bereitstellen, muss sie in ein Docker-Image verpackt werden. Betrachten wir ein Beispiel einer einfachen PHP-Anwendung mit Nginx und PHP-FPM.
Projektstruktur erstellen
my-php-app/├── src/│ └── index.php├── docker/│ ├── nginx/│ │ └── default.conf│ └── php/│ └── Dockerfile└── docker-compose.ymlBeispiel src/index.php
<?phpecho "Hello from PHP on Kubernetes!";phpinfo();?>Dockerfile für 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"]Nginx-Konfiguration (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; }}Image erstellen
docker build -t my-php-app:latest -f docker/php/Dockerfile .Schritt 2: Schreiben von Kubernetes-Manifesten
Nachdem das Image fertig ist, erstellen wir Manifeste für die Bereitstellung im Cluster.
Deployment für 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 für 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