Implantação de PHP no Kubernetes: guia básico para iniciantes
\n\nKubernetes (K8s) tornou-se o padrão de facto para orquestração de contêineres. Se você é um desenvolvedor PHP, mais cedo ou mais tarde enfrentará a necessidade de implantar sua aplicação em um cluster. Neste guia, vamos analisar como transformar uma aplicação PHP comum em um serviço completo operando sob o gerenciamento do Kubernetes. Você aprenderá como preparar uma imagem Docker, escrever manifestos e executar tudo isso em um cluster local (por exemplo, Minikube).
\n\nUsaremos a combinação clássica: PHP-FPM para processar scripts PHP e NGINX como servidor web. Isso nos permitirá alcançar alta performance e flexibilidade.
\n\n1. Preparação da aplicação PHP e da imagem Docker
\n\nO primeiro passo é empacotar seu código PHP em um contêiner Docker. Criaremos duas imagens: uma para PHP-FPM e outra para NGINX (ou usaremos uma imagem com supervisor, mas para iniciantes é mais simples separar).
\n\nCrie o arquivo Dockerfile para PHP-FPM:
FROM php:8.2-fpm-alpine\n\n# Instala extensões\nRUN docker-php-ext-install pdo_mysql mysqli opcache\n\n# Copia o código da aplicação\nCOPY . /var/www/html\n\n# Configurações do PHP\nCOPY php.ini /usr/local/etc/php/conf.d/custom.ini\n\nWORKDIR /var/www/html\n\nEXPOSE 9000\nCMD ["php-fpm"]\n\nPara NGINX, crie um Dockerfile separado:
FROM nginx:alpine\n\n# Copia a configuração\nCOPY nginx.conf /etc/nginx/nginx.conf\nCOPY default.conf /etc/nginx/conf.d/default.conf\n\n# Arquivos estáticos (se houver)\nCOPY public/ /var/www/html/public/\n\nEXPOSE 80\nCMD ["nginx", "-g", "daemon off;"]\n\nNão se esqueça do arquivo default.conf para NGINX, que faz proxy das requisições para PHP-FPM:
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; # nome do serviço no K8s\n fastcgi_index index.php;\n fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n include fastcgi_params;\n }\n}\n\nConstrua as imagens com o comando:
\n\ndocker build -t my-php-app:latest -f Dockerfile.php .\ndocker build -t my-nginx:latest -f Dockerfile.nginx .\n\n2. Fundamentos do Kubernetes: Pods, Deployments e Services
\n\nAntes de escrever os manifestos, vamos entender os objetos básicos do K8s:
\n\n- \n
- Pod — a menor unidade de implantação, um ou mais contêineres. \n
- Deployment — gerencia réplicas de Pods, garante atualizações e reversões. \n
- Service — ponto de acesso estável para os Pods (dentro do cluster ou externamente). \n
Para nossa aplicação PHP, criaremos dois Deployments: um para PHP-FPM e outro para NGINX. Em seguida, os conectaremos através de um Service interno.
\n\n3. Escrita dos manifestos para PHP e NGINX
\n\nCrie o arquivo 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" # exemplo de variável de ambiente\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\nAgora crie