Introdução: Por que implantar JavaScript no Kubernetes?
\n\nO desenvolvimento web moderno é impensável sem conteinerização. Se você programa em JavaScript (Node.js) e quer que sua aplicação funcione de forma estável, escale automaticamente e seja tolerante a falhas — o Kubernetes (K8s) se tornará seu melhor amigo.
\n\nKubernetes é uma plataforma de orquestração de contêineres. Ela gerencia a implantação, o escalonamento e a operação de suas aplicações. Neste guia, abordaremos a implantação básica de uma aplicação Node.js simples no Kubernetes. Você aprenderá como empacotar o código em uma imagem Docker, criar um Pod, Service e Deployment.
\n\nO artigo é voltado para iniciantes. Pressupõe-se que você já tenha Docker e Minikube instalados (ou acesso a um cluster K8s).
\n\nPasso 1: Preparação da aplicação Node.js e da imagem Docker
\n\nPara começar, vamos criar uma aplicação web simples com Express. Ela responderá a requisições HTTP.
\n\n1.1. Código da aplicação (app.js)
\n\nCrie o arquivo app.js:
const express = require('express');\nconst app = express();\nconst PORT = process.env.PORT || 3000;\n\napp.get('/', (req, res) => {\n res.send('Olá do Kubernetes!');\n});\n\napp.listen(PORT, () => {\n console.log(`Servidor rodando na porta ${PORT}`);\n});\n\n\n1.2. Arquivo package.json
\n\nCrie o package.json:
{\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\n1.3. Dockerfile
\n\nAgora, crie o Dockerfile para construir a imagem:
FROM node:18-alpine\n\nWORKDIR /usr/src/app\n\nCOPY package*.json ./\nRUN npm install\n\nCOPY . .\n\nEXPOSE 3000\n\nCMD ["node", "app.js"]\n\n\n1.4. Construção e envio da imagem
\n\nExecute os comandos:
\n\ndocker build -t my-node-app:v1 .\n\n\nSe você estiver usando Minikube, construa a imagem dentro do ambiente dele:
\n\nminikube image build -t my-node-app:v1 .\n\n\nOu envie a imagem para o Docker Hub/qualquer registry e especifique-a no manifesto.
\n\nPasso 2: Objetos principais do Kubernetes (Pod, Deployment, Service)
\n\nO Kubernetes trabalha com objetos. Para a implantação, precisaremos de três principais:
\n\n- \n
- Pod — a menor unidade, um ou mais contêineres. \n
- Deployment — gerencia os Pods, garante escalonamento e atualizações. \n
- Service — ponto de acesso estável aos Pods (geralmente via ClusterIP ou NodePort). \n
2.1. Criação do Deployment
\n\nCrie o arquivo deployment.yaml:
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: node-app-deployment\nspec:\n replicas: 3\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-node-app:v1\n ports:\n - containerPort: 3000\n env:\n - name: PORT\n value: "3000"\n\n\nExplicação:
\n- \n
replicas: 3— executaremos 3 cópias da aplicação para tolerância a falhas. \n selectorelabels— vinculam o Deployment aos Pods. \n image— o nome da sua imagem Docker. \n
2.2. Criação do Service
\n\nCrie o arquivo service.yaml para acessar a aplicação:
apiVersion: v1\nkind: Service\nmetadata:\n name: node-app-service\nspec:\n selector:\n app: node-app\n ports:\n - protocol: TCP\n port: 80\n targetPort: 3000\n type: NodePort\n\n\nO que está acontecendo aqui:
\n- \n
- O Service redireciona o tráfego da porta