#!/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 ""