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 Kubernetes para Node.js?

Aplicações web modernas em JavaScript (Node.js) exigem alta disponibilidade, escalabilidade e tolerância a falhas. Quando sua aplicação vai além de um único servidor, o gerenciamento manual se torna um pesadelo. É aqui que o Kubernetes (K8s) entra em ação — um sistema de orquestração de contêineres que automatiza a implantação, o escalonamento e o gerenciamento de aplicações.

Neste guia, percorreremos o caminho completo: desde uma aplicação Node.js simples até sua execução em um ambiente semelhante ao de produção no Kubernetes. Você aprenderá como empacotar o código em uma imagem Docker, criar os recursos K8s necessários (Pod, Deployment, Service) e configurar o acesso externo.



1. Preparação da aplicação em Node.js

Para começar, vamos criar uma aplicação Express simples. Ela responderá a requisições HTTP e exibirá o nome do host do contêiner (útil para verificar o balanceamento de carga).



1.1. Arquivo app.js

const express = require('express');const os = require('os');

const app = express();const PORT = process.env.PORT || 3000;

app.get('/', (req, res) => { res.json({ message: 'Hello from Node.js on Kubernetes!', hostname: os.hostname(), timestamp: new Date().toISOString() });});

app.listen(PORT, () => { console.log(`Server running on port ${PORT}`);});


1.2. Arquivo package.json

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


2. Containerização: Imagem Docker

O Kubernetes trabalha com contêineres. Vamos criar um Dockerfile mínimo para nossa aplicação Node.js. Usaremos a imagem oficial do Node.js e uma construção em múltiplos estágios para otimizar o tamanho.



2.1. Dockerfile

FROM node:18-alpine AS builderWORKDIR /appCOPY package*.json ./RUN npm ci --only=production

FROM node:18-alpineWORKDIR /appCOPY --from=builder /app/node_modules ./node_modulesCOPY . .EXPOSE 3000CMD ["node", "app.js"]


Construa a imagem e envie-a para o Docker Hub ou outro registro:

docker build -t your-dockerhub/k8s-node-app:v1 .docker push your-dockerhub/k8s-node-app:v1


3. Implantação no Kubernetes

Agora vamos ao mais importante — a criação dos recursos do Kubernetes. Usaremos um Deployment (para gerenciar os Pods) e um Service (para acesso à rede).



3.1. Criação do Deployment

O Deployment garante que o número necessário de Pods com sua aplicação esteja sempre em execuçã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: your-dockerhub/k8s-node-app:v1        ports:        - containerPort: 3000        env:        - name: PORT          value: "3000"        resources:          requests:            memory: "64Mi"            cpu: "100m"          limits:            memory: "128Mi"            cpu: "200m"


3.2. Criação do Service

O Service fornece um endereço IP estável e um nome DNS para acesso aos Pods. Crie o service.yaml:

apiVersion: v1kind: Servicemetadata:  name: node-app-servicespec:  selector:    app: node-app  ports:    - protocol: TCP      port: 80      targetPort: 3000  type: ClusterIP


3.3. Execução no cluster

Execute os comandos (certifique-se de que o kubectl está configurado e você tem acesso ao cluster):

kubectl apply -f deployment.yamlkubectl app                

Blogs

Book Recommendations