Bereitstellung von PHP auf Kubernetes: Ein grundlegender Leitfaden für Anfänger
\n\nKubernetes (K8s) ist der De-facto-Standard für die Container-Orchestrierung. Wenn Sie ein PHP-Entwickler sind, werden Sie früher oder später auf die Notwendigkeit stoßen, Ihre Anwendung in einem Cluster bereitzustellen. In diesem Leitfaden werden wir durchgehen, wie Sie eine gewöhnliche PHP-Anwendung in einen vollwertigen Dienst verwandeln, der unter Kubernetes läuft. Sie erfahren, wie Sie ein Docker-Image vorbereiten, Manifeste schreiben und alles in einem lokalen Cluster (z. B. Minikube) ausführen.
\n\nWir werden das klassische Setup verwenden: PHP-FPM zur Verarbeitung von PHP-Skripten und NGINX als Webserver. Dies ermöglicht uns eine hohe Leistung und Flexibilität.
\n\n1. Vorbereitung der PHP-Anwendung und des Docker-Images
\n\nDer erste Schritt ist das Verpacken Ihres PHP-Codes in einen Docker-Container. Wir werden zwei Images erstellen: eines für PHP-FPM und eines für NGINX (oder wir verwenden ein einzelnes Image mit einem Supervisor, aber für Anfänger ist die Trennung einfacher).
\n\nErstellen Sie eine Datei Dockerfile für PHP-FPM:
FROM php:8.2-fpm-alpine\n\n# Erweiterungen installieren\nRUN docker-php-ext-install pdo_mysql mysqli opcache\n\n# Anwendungscode kopieren\nCOPY . /var/www/html\n\n# PHP-Einstellungen\nCOPY php.ini /usr/local/etc/php/conf.d/custom.ini\n\nWORKDIR /var/www/html\n\nEXPOSE 9000\nCMD ["php-fpm"]\n\nErstellen Sie für NGINX ein separates Dockerfile:
FROM nginx:alpine\n\n# Konfiguration kopieren\nCOPY nginx.conf /etc/nginx/nginx.conf\nCOPY default.conf /etc/nginx/conf.d/default.conf\n\n# Statische Dateien (falls vorhanden)\nCOPY public/ /var/www/html/public/\n\nEXPOSE 80\nCMD ["nginx", "-g", "daemon off;"]\n\nVergessen Sie nicht die Datei default.conf für NGINX, die Anfragen an PHP-FPM weiterleitet:
server {\n listen 80;\n server_name _;\n root /var/www/html/public;\n index index.php;\n\n location / {\n try_files $uri $uri/ /index.php?$args;\n }\n\n location ~ \\.php$ {\n fastcgi_pass php-service:9000; # Dienstname in K8s\n fastcgi_index index.php;\n fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n include fastcgi_params;\n }\n}\n\nErstellen Sie die Images mit dem Befehl:
\n\ndocker build -t my-php-app:latest -f Dockerfile.php .\ndocker build -t my-nginx:latest -f Dockerfile.nginx .\n\n2. Grundlagen von Kubernetes: Pods, Deployments und Services
\n\nBevor wir Manifeste schreiben, lassen Sie uns die grundlegenden K8s-Objekte verstehen:
\n\n- \n
- Pod — die kleinste Bereitstellungseinheit, ein oder mehrere Container. \n
- Deployment — verwaltet Replikate von Pods, ermöglicht Updates und Rollbacks. \n
- Service — ein stabiler Zugangspunkt zu Pods (innerhalb des Clusters oder von außen). \n
Für unsere PHP-Anwendung werden wir zwei Deployments erstellen: eines für PHP-FPM und eines für NGINX. Dann verbinden wir sie über einen internen Service.
\n\n3. Schreiben der Manifeste für PHP und NGINX
\n\nErstellen Sie eine Datei php-deployment.yaml:
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: php-app\nspec:\n replicas: 2\n selector:\n matchLabels:\n app: php-app\n template:\n metadata:\n labels:\n app: php-app\n spec:\n containers:\n - name: php-fpm\n image: my-php-app:latest\n ports:\n - containerPort: 9000\n env:\n - name: DB_HOST\n value: "mysql-service" # Beispiel für eine Umgebungsvariable\n - name: DB_NAME\n value: "mydb"\n resources:\n requests:\n memory: "128Mi"\n cpu: "250m"\n limits:\n memory: "256Mi"\n cpu: "500m"\n---\napiVersion: v1\nkind: Service\nmetadata:\n name: php-service\nspec:\n selector:\n app: php-app\n ports:\n - protocol: TCP\n port: 9000\n targetPort: 9000\n\nErstellen Sie jetzt