Implantação de PHP no Kubernetes: guia básico
O desenvolvimento web moderno cada vez mais exige soluções escaláveis e tolerantes a falhas. O Kubernetes (K8s) tornou-se o padrão de facto para orquestração de contêineres. Se você é um desenvolvedor PHP e quer aprender a implantar suas aplicações no Kubernetes — este guia é para você. Vamos percorrer o caminho desde a criação da imagem Docker até a implantação de um serviço PHP completo no cluster.
Por que implantar PHP no Kubernetes?
O Kubernetes oferece uma série de vantagens para aplicações PHP:
- Escalonamento automático: O K8s pode aumentar o número de pods quando a carga cresce e diminuí-los quando ela cai.
- Auto-recuperação: Se um contêiner falhar, o Kubernetes o reinicia automaticamente.
- Gerenciamento de configuração: Variáveis de ambiente e arquivos de configuração são facilmente centralizados através de ConfigMap e Secrets.
- Simplicidade nas atualizações: Rolling updates permitem atualizar a aplicação sem tempo de inatividade.
Para o PHP, isso é especialmente relevante, pois muitos projetos legados são difíceis de escalar com métodos tradicionais.
Passo 1: Containerização da aplicação PHP
Antes de implantar a aplicação no Kubernetes, é necessário empacotá-la em uma imagem Docker. Vamos considerar um exemplo de uma aplicação PHP simples usando Nginx e PHP-FPM.
Criando a estrutura do projeto
my-php-app/├── src/│ └── index.php├── docker/│ ├── nginx/│ │ └── default.conf│ └── php/│ └── Dockerfile└── docker-compose.ymlExemplo 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"]Configuração do 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; }}Construção da imagem
docker build -t my-php-app:latest -f docker/php/Dockerfile .Passo 2: Escrevendo os manifestos do Kubernetes
Agora que a imagem está pronta, vamos criar os manifestos para implantação no cluster.
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