PHP-Bereitstellung auf Kubernetes: Ein grundlegendes Leitfaden für Entwickler

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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


Beispiel 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


ConfigMap für die Konfig

Blogs

Buchempfehlungen