Despliegue de PHP en Kubernetes: guía básica para desarrolladores

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Despliegue de PHP en Kubernetes: guía básica

El desarrollo web moderno requiere cada vez más soluciones escalables y tolerantes a fallos. Kubernetes (K8s) se ha convertido en el estándar de facto para la orquestación de contenedores. Si eres desarrollador PHP y quieres aprender a desplegar tus aplicaciones en Kubernetes, esta guía es para ti. Recorreremos el camino desde la creación de una imagen Docker hasta el despliegue de un servicio PHP completo en un clúster.



¿Por qué desplegar PHP en Kubernetes?

Kubernetes ofrece una serie de ventajas para las aplicaciones PHP:

  • Escalado automático: K8s puede aumentar el número de pods cuando la carga crece y reducirlo cuando disminuye.
  • Autocuración: Si un contenedor falla, Kubernetes lo reinicia automáticamente.
  • Gestión de configuración: Las variables de entorno y los archivos de configuración se centralizan fácilmente mediante ConfigMap y Secrets.
  • Simplicidad en las actualizaciones: Las Rolling updates permiten actualizar la aplicación sin tiempo de inactividad.

Para PHP esto es especialmente relevante, ya que muchos proyectos heredados son difíciles de escalar con métodos tradicionales.



Paso 1: Contenerización de la aplicación PHP

Antes de desplegar la aplicación en Kubernetes, hay que empaquetarla en una imagen Docker. Veamos un ejemplo de una aplicación PHP simple usando Nginx y PHP-FPM.



Creando la estructura del proyecto

my-php-app/├── src/│   └── index.php├── docker/│   ├── nginx/│   │   └── default.conf│   └── php/│       └── Dockerfile└── docker-compose.yml


Ejemplo de src/index.php

<?phpecho "Hello from PHP on Kubernetes!";phpinfo();?>


Dockerfile para 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"]


Configuración de 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; }}


Construcción de la imagen

docker build -t my-php-app:latest -f docker/php/Dockerfile .


Paso 2: Escritura de los manifiestos de Kubernetes

Ahora que la imagen está lista, crearemos los manifiestos para el despliegue en el clúster.



Deployment para 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 para 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 para la config

Blogs

Book Recommendations