diff --git a/aula-04/setup.sh b/aula-04/setup.sh new file mode 100755 index 0000000..a151da2 --- /dev/null +++ b/aula-04/setup.sh @@ -0,0 +1,176 @@ +#!/bin/bash +# ============================================================================= +# Setup da Aula 04 - NGINX Ingress com Keep Request (Lua) +# ============================================================================= +# +# Este script instala e configura: +# 1. NGINX Ingress Controller +# 2. Aplicacao node-bugado com Ingress usando padrao Keep Request +# +# Pre-requisitos: +# - Kubernetes cluster rodando (OrbStack, Docker Desktop, minikube, etc) +# - kubectl configurado +# - Helm 3.x instalado +# +# Uso: +# chmod +x setup.sh +# ./setup.sh +# +# ============================================================================= + +set -e # Para na primeira falha + +# Cores para output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# Funcoes de log +log_info() { echo -e "${BLUE}[INFO]${NC} $1"; } +log_success() { echo -e "${GREEN}[OK]${NC} $1"; } +log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } +log_error() { echo -e "${RED}[ERRO]${NC} $1"; } + +# Diretorio do script +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# ============================================================================= +# VERIFICACOES INICIAIS +# ============================================================================= + +log_info "Verificando pre-requisitos..." + +# Verificar kubectl +if ! command -v kubectl &> /dev/null; then + log_error "kubectl nao encontrado. Instale o kubectl primeiro." + exit 1 +fi +log_success "kubectl encontrado" + +# Verificar conexao com cluster +if ! kubectl cluster-info &> /dev/null; then + log_error "Nao foi possivel conectar ao cluster Kubernetes." + exit 1 +fi +log_success "Conectado ao cluster Kubernetes" + +# Verificar helm +if ! command -v helm &> /dev/null; then + log_error "Helm nao encontrado. Instale o Helm >= 3.14 primeiro." + log_info "Instalacao: https://helm.sh/docs/intro/install/" + exit 1 +fi +log_success "Helm $(helm version --short) encontrado" + +echo "" + +# ============================================================================= +# 1. INSTALAR NGINX INGRESS (se nao existir) +# ============================================================================= + +log_info "=== Verificando NGINX Ingress ===" + +if kubectl get ingressclass nginx &> /dev/null; then + log_success "NGINX Ingress ja esta instalado" +else + log_info "Instalando NGINX Ingress Controller..." + helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx 2>/dev/null || true + helm repo update + + helm install nginx-ingress ingress-nginx/ingress-nginx \ + --namespace ingress-nginx \ + --create-namespace \ + --set controller.allowSnippetAnnotations=true \ + --set controller.config.annotations-risk-level=Critical \ + --wait + + log_success "NGINX Ingress instalado" +fi + +# Aguardar controller ficar pronto +log_info "Aguardando NGINX Ingress Controller ficar pronto..." +kubectl wait --for=condition=ready pod \ + -l app.kubernetes.io/component=controller \ + -n ingress-nginx \ + --timeout=120s 2>/dev/null || log_warn "Timeout aguardando controller" + +log_success "NGINX Ingress Controller esta rodando" +echo "" + +# ============================================================================= +# 2. APLICAR MANIFESTOS DA APLICACAO +# ============================================================================= + +log_info "=== Aplicando manifestos da aplicacao ===" + +log_info "Aplicando ConfigMap..." +kubectl apply -f "$SCRIPT_DIR/configmap.yaml" + +log_info "Aplicando Deployment..." +kubectl apply -f "$SCRIPT_DIR/deployment.yaml" + +log_info "Aplicando Service..." +kubectl apply -f "$SCRIPT_DIR/service.yaml" + +log_info "Aplicando Ingress..." +kubectl apply -f "$SCRIPT_DIR/ingress-nginx.yaml" + +log_success "Todos os manifestos aplicados!" +echo "" + +# ============================================================================= +# 3. AGUARDAR PODS FICAREM PRONTOS +# ============================================================================= + +log_info "=== Aguardando aplicacao ficar pronta ===" + +log_info "Aguardando pods da aplicacao..." +kubectl wait --for=condition=ready pod \ + -l app=node-bugado \ + --timeout=120s + +log_success "Aplicacao esta rodando!" +echo "" + +# ============================================================================= +# RESUMO FINAL +# ============================================================================= + +echo "==============================================" +echo -e "${GREEN} Setup Completo!${NC}" +echo "==============================================" +echo "" +echo "Componentes instalados:" +echo " - NGINX Ingress Controller (namespace: ingress-nginx)" +echo " - Aplicacao node-bugado (namespace: default)" +echo " - 5 replicas com readiness/liveness probes" +echo " - Ingress com padrao Keep Request (Lua)" +echo "" +echo "Acesso:" +echo " URL: http://localhost" +echo "" +echo "Comandos uteis:" +echo " # Ver pods da aplicacao" +echo " kubectl get pods -l app=node-bugado" +echo "" +echo " # Ver ingress" +echo " kubectl get ingress" +echo "" +echo " # Teste de stress (100 requisicoes)" +echo " ./teste-stress.sh http://localhost 100" +echo "" +echo " # Monitorar pods em tempo real" +echo " watch kubectl get pods -l app=node-bugado" +echo "" +echo "==============================================" +echo "" + +# Mostrar status atual +log_info "Status atual:" +echo "" +kubectl get pods -l app=node-bugado +echo "" +kubectl get ingress +echo ""