Guia de Setup e Execução

Projeto Tech Challenge FIAP com explicação e informação de como rodar no Kubernetes (Minikube). Um passo a passo completo para configurar e rodar a solução em um ambiente de desenvolvimento local.

1. Arquitetura da Solução Local

Antes de começar, é importante entender a estrutura que eu montei. O sistema é composto por uma API (.NET), um Worker de background e um Banco de Dados (SQL Server), todos rodando como contêineres independentes dentro de um cluster Kubernetes.

Diagrama de Infraestrutura

Cluster Kubernetes (Minikube)
Pod(s) da API ↔️ HPA
Pod(s) do Worker
Pod do Banco de Dados
Serviços (API Service, DB Service)
Desenvolvedor ↔️ API Service
Pods ↔️ DB Service ↔️ Armazenamento Persistente

2. Pré-requisitos (Preparando a Máquina)

Garanta que as seguintes ferramentas estejam instaladas e funcionando antes de prosseguir.

  • 1
    Git: Para clonar o repositório. Repositório.
  • 2
    .NET 9 SDK.
  • 3
    Docker Desktop. Ambiente de contêineres para Windows. Download.
  • 4
    Minikube: Cluster Kubernetes local. Instale via PowerShell (Admin): winget install Kubernetes.minikube.
  • 5
    kubectl: Ferramenta de linha de comando para K8s. Verifique com kubectl version --client.

3. Passo a Passo da Execução

Passo 1: Clonar o Repositório

git clone https://github.com/alealencarr/TechChallenge.git
cd TechChallenge

Passo 2: Construir as Imagens Docker

Construa as imagens para a API e o Worker.

docker build -t api-k8s:v1 -f api.dockerfile .
docker build -t worker-k8s:v1 -f job.dockerfile .

Passo 3: Iniciar e Preparar o Cluster Kubernetes

minikube start --memory 4g --cpus 2
minikube addons enable metrics-server

Passo 4: Carregar as Imagens para o Minikube

minikube image load api-k8s:v1
minikube image load worker-k8s:v1

Passo 5: Deploy da Aplicação no Kubernetes

kubectl apply -f k8s/

Passo 6: Verificar a Execução

Monitore os Pods até que todos estejam com o status `Running`. Lembre-se que reinicializações (`CrashLoopBackOff`) são normais enquanto o banco de dados inicia.

kubectl get pods -w

Passo 7: Acessar e Testar a API

minikube service api-service-tc

Este comando abrirá a URL da sua API no navegador. Adicione `/swagger` ao final para ver a documentação e testar.

Passo 8: Com todos os pods "RUNNING" aponte para a porta 8080 para testar a collection.

kubectl port-forward service/api-service-tc 8080:80

4. Entendendo a Escalabilidade Automática (HPA)

A escalabilidade é controlada pelo Horizontal Pod Autoscaler (HPA). A regra é baseada no consumo de CPU para garantir que a aplicação tenha os recursos necessários sob alta carga.

  • Configuração: Cada pod da API solicita 100m (10% de um núcleo de CPU).
  • Regra: O HPA foi configurado para manter o uso médio de CPU em 50% do solicitado.
  • Limites: A aplicação escalará de um mínimo de 1 pod até um máximo de 9 pods.

Quando a carga na API faz com que o uso médio de CPU ultrapasse o gatilho de 50%, o HPA começa a criar novos pods para distribuir o trabalho. Quando a carga diminui, o processo inverso ocorre.

# Monitore o HPA em tempo real com este comando
kubectl get hpa -w

5. Como Limpar o Ambiente

Quando terminar os testes, use os seguintes comandos para limpar os recursos e liberar memória do seu computador.

Deletar os recursos do Kubernetes

kubectl delete -f k8s/

Parar o Minikube

minikube stop

(Opcional) Deletar o cluster completamente

minikube delete