Implantação de JavaScript (Node.js) no Kubernetes: guia passo a passo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: por que implantar JavaScript no Kubernetes?

\n

O desenvolvimento web moderno em JavaScript (especialmente Node.js) cada vez mais exige não apenas executar a aplicação em um único servidor, mas sim organizar uma infraestrutura tolerante a falhas, escalável e facilmente gerenciável. Kubernetes (K8s) é o padrão de facto para orquestração de contêineres. Se você programa em Node.js e quer que sua aplicação suporte picos de carga, se recupere automaticamente de falhas e seja atualizada facilmente sem downtime — você precisa do Kubernetes.

\n

Neste guia, vamos abordar o processo básico de implantação de uma aplicação Node.js simples em um cluster Kubernetes. Você aprenderá como preparar uma imagem Docker, escrever os manifestos YAML necessários (Deployment, Service, Ingress) e executar a aplicação. O artigo é voltado para desenvolvedores que já conhecem os fundamentos de Node.js e Docker, mas estão apenas começando sua jornada no mundo Kubernetes.

\n
\n

1. Preparação da aplicação Node.js e da imagem Docker

\n

Primeiramente, precisamos de uma aplicação para implantar. Vamos criar um servidor HTTP simples com Express que responde a requisições GET.

\n

1.1. Criação de um servidor simples (app.js)

\n
const express = require('express');\nconst app = express();\nconst PORT = process.env.PORT || 3000;\n\napp.get('/', (req, res) => {\n  res.send('Hello from Node.js on Kubernetes!');\n});\n\napp.listen(PORT, () => {\n  console.log(`Server running on port ${PORT}`);\n});\n
\n

Arquivo package.json (dependências):

\n
{\n  "name": "k8s-node-app",\n  "version": "1.0.0",\n  "main": "app.js",\n  "scripts": {\n    "start": "node app.js"\n  },\n  "dependencies": {\n    "express": "^4.18.2"\n  }\n}\n
\n

1.2. Dockerfile para Node.js

\n

Para que o Kubernetes possa executar nossa aplicação, ela precisa ser empacotada em um contêiner. Usaremos a imagem oficial do Node.js (versão 18 LTS).

\n
# Usa a imagem oficial do Node.js\nFROM node:18-alpine\n\n# Define o diretório de trabalho dentro do contêiner\nWORKDIR /usr/src/app\n\n# Copia package.json e package-lock.json\nCOPY package*.json ./\n\n# Instala as dependências\nRUN npm install --production\n\n# Copia o código fonte da aplicação\nCOPY . .\n\n# Indica a porta que a aplicação irá escutar\nEXPOSE 3000\n\n# Comando para executar a aplicação\nCMD ["node", "app.js"]\n
\n

Construção da imagem e envio ao registro:

\n
# Constrói a imagem\ndocker build -t my-registry/node-app:v1 .\n\n# Envia para o Docker Hub ou seu registro privado\ndocker push my-registry/node-app:v1\n
\n

Substitua my-registry pelo nome do seu registro (ex: docker.io/username/node-app).

\n
\n

2. Criação dos manifestos YAML para Kubernetes

\n

O Kubernetes usa uma abordagem declarativa: descrevemos o estado desejado do sistema em arquivos YAML, e o K8s se encarrega de levar tudo a esse estado. Precisaremos de três recursos principais: Deployment, Service e Ingress.

\n

2.1. Deployment (deployment.yaml)

\n

O Deployment é responsável por executar e atualizar os pods (contêineres). Ele garante que o número necessário de réplicas esteja sempre em execução.

\n
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: node-app-deployment\n  labels:\n    app: node-app\nspec:\n  replicas: 3  # Número de réplicas (cópias) da aplicação\n  selector:\n    matchLabels:\n      app: node-app\n  template:\n    metadata:\n      labels:\n        app: node-app\n    spec:\n      containers:\n      - name: node-app\n        image: my-registry/node-app:v1\n        ports:\n        - containerPort: 3000\n        env:\n        - name: PORT\n          value: "3000"\n        resources:\n          requests:\n            memory: "64Mi"\n            cpu: "250m"\n          limits:\n            memory: "128Mi"\n            cpu: "500m"\n
\n

Pontos-chave:

\n
    \n
  • replicas: 3 — exec

Blogs

Book Recommendations