Deploy de Node.js no Kubernetes exige Dockerfile otimizado, manifests corretos e configuração de secrets. Tutorial passo a passo completo.
Conceitos Principais
Multi-Stage Dockerfile
Stage build: npm install + build. Stage production: Alpine + apenas node_modules prod. Imagem 150MB ao invés de 1GB.
Deployment YAML
Define replicas, imagem, ports, env vars. Rolling update strategy: maxSurge 1, maxUnavailable 0. Zero downtime garantido.
Service YAML
ClusterIP para comunicação interna. LoadBalancer para acesso externo. Selector matcheia labels do Deployment.
Secrets & ConfigMaps
Secret: DATABASE_URL, JWT_SECRET. ConfigMap: NODE_ENV, LOG_LEVEL. Montados como env vars ou files.
Passo a Passo
- Otimize Dockerfile: Multi-stage: FROM node:18 AS builder, npm ci, build. FROM node:18-alpine, COPY --from=builder. User non-root. HEALTHCHECK endpoint /health.
- Push para Registry: Build:
docker build -t seu-registry/app:v1.0 .. Push:docker push. K8s puxa de registry (Docker Hub, GCR, ECR). - Crie Secrets:
kubectl create secret generic app-secrets --from-literal=DB_URL=postgres://.... Ou YAML: kind Secret, data com base64. - Deploy App: deployment.yaml: replicas 3, image seu-registry/app:v1.0, envFrom secretRef app-secrets.
kubectl apply -f deployment.yaml. - Exponha Service: service.yaml: type LoadBalancer, port 80 targetPort 3000.
kubectl apply -f service.yaml. Obtenha IP:kubectl get svc.
Boas Praticas
Recomendacoes
• Sempre versione imagens (não latest)
• Configure readinessProbe e livenessProbe
• Use HorizontalPodAutoscaler para auto-scale
• Resource requests/limits para cada Pod
Erros Comuns
Evite estes erros
• Não configurar health checks (restart loops)
• Hardcodar secrets no YAML
• Não limitar recursos (um Pod mata cluster)
Checklist
- Dockerfile multi-stage criado
- Imagem pushed para registry
- Secrets configurados
- Deployment com 3+ réplicas
- Service com LoadBalancer
- Health checks funcionando