From b9ab2d281fbda0df63e53a8a966e184b5acb1e06 Mon Sep 17 00:00:00 2001 From: Allyson de Paula Date: Thu, 25 Dec 2025 13:32:29 -0300 Subject: [PATCH] aula-02: Kubernetes com liveness probe Deployment com liveness probe para detectar quando a app trava e reiniciar o container automaticamente. --- aula-02/configmap.yaml | 43 +++++++++++++++++++++++++++++++++++++++++ aula-02/deployment.yaml | 41 +++++++++++++++++++++++++++++++++++++++ aula-02/service.yaml | 12 ++++++++++++ 3 files changed, 96 insertions(+) create mode 100644 aula-02/configmap.yaml create mode 100644 aula-02/deployment.yaml create mode 100644 aula-02/service.yaml diff --git a/aula-02/configmap.yaml b/aula-02/configmap.yaml new file mode 100644 index 0000000..1f600c8 --- /dev/null +++ b/aula-02/configmap.yaml @@ -0,0 +1,43 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: app-config +data: + MAX_REQUESTS: "3" + + app.js: | + const http = require("http"); + + const MAX_REQUESTS = Number(process.env.MAX_REQUESTS || 3); + + let requestCount = 0; + + console.log("MAX_REQUESTS =", MAX_REQUESTS); + + const server = http.createServer((req, res) => { + if (req.url === "/health") { + if (requestCount > MAX_REQUESTS) { + console.log('❌ O health check falhou'); + return; + } + + res.writeHead(200); + res.end(`ok`); + return; + } + + requestCount++; + console.log("request", requestCount); + + if (requestCount > MAX_REQUESTS) { + console.log(`🔥 App travado após ${MAX_REQUESTS} requests`); + return; + } + + res.writeHead(200); + res.end(`Req -> ${requestCount}/${MAX_REQUESTS}`); + }); + + server.listen(3000, () => { + console.log("App rodando na porta 3000"); + }); diff --git a/aula-02/deployment.yaml b/aula-02/deployment.yaml new file mode 100644 index 0000000..b7a954f --- /dev/null +++ b/aula-02/deployment.yaml @@ -0,0 +1,41 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: node-bugado +spec: + replicas: 1 + selector: + matchLabels: + app: node-bugado + template: + metadata: + labels: + app: node-bugado + spec: + terminationGracePeriodSeconds: 5 + containers: + - name: app + image: node:24-alpine + command: ["node", "/app/app.js"] + env: + - name: MAX_REQUESTS + valueFrom: + configMapKeyRef: + name: app-config + key: MAX_REQUESTS + ports: + - containerPort: 3000 + livenessProbe: + httpGet: + path: /health + port: 3000 + initialDelaySeconds: 5 # Espera para começar a testar + periodSeconds: 2 # A cada 5 segs faz o teste novamente + failureThreshold: 2 # Vezes seguidas antes de ser considerado morto + volumeMounts: + - name: app-volume + mountPath: /app + volumes: + - name: app-volume + configMap: + name: app-config diff --git a/aula-02/service.yaml b/aula-02/service.yaml new file mode 100644 index 0000000..91b8792 --- /dev/null +++ b/aula-02/service.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + name: node-bugado +spec: + type: LoadBalancer + selector: + app: node-bugado + ports: + - port: 3000 + targetPort: 3000 + protocol: TCP