Implantação de JavaScript (Node.js) no Kubernetes: guia básico na prática
O desenvolvimento web moderno é impensável sem conteinerização e orquestração. Se você programa em JavaScript (Node.js), mais cedo ou mais tarde surgirá a pergunta: como executar a aplicação de forma confiável em produção, garantir sua escalabilidade e tolerância a falhas? A resposta — Kubernetes. Não é apenas uma ferramenta da moda, mas o padrão de facto para gerenciar aplicações conteinerizadas.
Neste guia, abordaremos o ciclo completo de implantação de uma aplicação Node.js simples no Kubernetes. Você aprenderá como empacotar o código em uma imagem Docker, criar os manifestos necessários e executar tudo no cluster. O material é voltado para desenvolvedores que já conhecem os fundamentos do Node.js e desejam aprender práticas de DevOps.
1. Preparação da aplicação Node.js para conteinerização
Antes de implantar a aplicação no Kubernetes, é necessário empacotá-la em um contêiner. Para isso, criaremos uma aplicação Express simples. Certifique-se de ter Node.js e npm instalados.
Crie o arquivo app.js:
const express = require('express');const app = express();const port = process.env.PORT || 3000;
app.get('/', (req, res) => { res.json({ message: 'Hello from Node.js on Kubernetes!' });});
app.get('/health', (req, res) => { res.status(200).send('OK');});
app.listen(port, () => { console.log(`Server running on port ${port}`);});É importante adicionar o endpoint /health — o Kubernetes o usará para verificar a integridade (liveness probe).
Agora crie o Dockerfile na raiz do projeto:
FROM node:18-alpine
WORKDIR /usr/src/app
COPY package*.json ./RUN npm install --production
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]Construa a imagem e verifique localmente:
docker build -t my-node-app:latest .docker run -p 3000:3000 my-node-app:latestAbra http://localhost:3000 — você deve ver uma resposta JSON.
2. Manifestos principais do Kubernetes para Node.js
O Kubernetes trabalha com configurações declarativas (YAML). Para implantar uma aplicação Node.js, precisaremos de pelo menos dois recursos principais: Deployment e Service.
2.1. Deployment
O Deployment gerencia as réplicas da sua aplicação. Crie o arquivo deployment.yaml:
apiVersion: apps/v1kind: Deploymentmetadata: name: node-app-deployment labels: app: node-appspec: replicas: 3 selector: matchLabels: app: node-app template: metadata: labels: app: node-app spec: containers: - name: node-app image: my-node-app:latest ports: - containerPort: 3000 env: - name: PORT value: "3000" livenessProbe: httpGet: path: /health port: 3000 initialDelaySeconds: 5 periodSeconds: 10 readinessProbe: httpGet: path: / port: 3000 initialDelaySeconds: 3 periodSeconds: 5Pontos importantes:
replicas: 3— o Kubernetes criará 3 cópias da sua aplicação para tolerância a falhas.livenessProbe— verifica se a aplicação está ativa. Se não houver resposta, o Kubernetes reiniciará o contêiner.readinessProbe— verifica se a aplicação está pronta para receber tráfego. Enquanto a verificação não for aprovada, o pod não recebe requisições.
2.2. Service
O Service fornece acesso de rede aos pods. Crie o service.yaml:
apiVersion: v1kind: Servicemetadata: name: node-app-servicespec: selector: app: node-app ports: - protocol: TCP