Kubernetes पर PHP डिप्लॉय: बुनियादी गाइड
आधुनिक वेब डेवलपमेंट में तेजी से स्केलेबल और फॉल्ट-टॉलरेंट समाधानों की आवश्यकता होती है। Kubernetes (K8s) कंटेनर ऑर्केस्ट्रेशन के लिए डी-फैक्टो मानक बन गया है। यदि आप PHP डेवलपर हैं और Kubernetes में अपने एप्लिकेशन डिप्लॉय करना सीखना चाहते हैं, तो यह गाइड आपके लिए है। हम Docker इमेज बनाने से लेकर क्लस्टर में पूर्ण PHP सेवा डिप्लॉय करने तक की यात्रा करेंगे।
PHP को Kubernetes पर क्यों डिप्लॉय करें?
Kubernetes PHP एप्लिकेशन के लिए कई लाभ प्रदान करता है:
- स्वचालित स्केलिंग: K8s लोड बढ़ने पर पॉड्स की संख्या बढ़ा सकता है और घटने पर घटा सकता है।
- स्व-उपचार: यदि कोई कंटेनर क्रैश होता है, तो Kubernetes स्वचालित रूप से उसे पुनरारंभ करता है।
- कॉन्फ़िगरेशन प्रबंधन: एनवायरनमेंट वेरिएबल्स और कॉन्फ़िगरेशन फ़ाइलों को ConfigMap और Secrets के माध्यम से आसानी से केंद्रीकृत किया जा सकता है।
- अपडेट में आसानी: Rolling updates बिना डाउनटाइम के एप्लिकेशन को अपडेट करने की अनुमति देते हैं।
PHP के लिए यह विशेष रूप से प्रासंगिक है, क्योंकि कई लीगेसी प्रोजेक्ट्स को पारंपरिक तरीकों से स्केल करना मुश्किल होता है।
चरण 1: PHP एप्लिकेशन को कंटेनरीकृत करना
Kubernetes में एप्लिकेशन डिप्लॉय करने से पहले, इसे Docker इमेज में पैक करना होगा। आइए Nginx और PHP-FPM का उपयोग करके एक सरल PHP एप्लिकेशन का उदाहरण देखें।
प्रोजेक्ट संरचना बनाएँ
my-php-app/├── src/│ └── index.php├── docker/│ ├── nginx/│ │ └── default.conf│ └── php/│ └── Dockerfile└── docker-compose.ymlउदाहरण src/index.php
<?phpecho "Hello from PHP on Kubernetes!";phpinfo();?>PHP-FPM के लिए Dockerfile
FROM php:8.2-fpm-alpine
RUN docker-php-ext-install pdo pdo_mysql
COPY src/ /var/www/html/
EXPOSE 9000CMD ["php-fpm"]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; }}इमेज बिल्ड करें
docker build -t my-php-app:latest -f docker/php/Dockerfile .चरण 2: Kubernetes मेनिफेस्ट लिखना
अब जब इमेज तैयार है, तो क्लस्टर में डिप्लॉयमेंट के लिए मेनिफेस्ट बनाएँ।
PHP-FPM के लिए Deployment
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"Nginx के लिए Deployment
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