Workshop completo: aulas 08-10 com Talos, n8n e GitLab na Hetzner
Aula 08 - Cluster Kubernetes HA: - Setup interativo com OpenTofu para Talos na Hetzner - CCM, CSI Driver, Cluster Autoscaler, Metrics Server - NGINX Ingress com LoadBalancer (HTTP/HTTPS/SSH) Aula 09 - n8n na Hetzner: - Deploy via Helm com PostgreSQL e Redis - Suporte multi-tenant com add-client.sh - Integração com Hetzner CSI para volumes persistentes Aula 10 - GitLab na Hetzner: - Setup agnóstico: CloudFlare (trusted proxies) ou Let's Encrypt - Anti-affinity para distribuir webservice/sidekiq em nós diferentes - Container Registry e SSH via TCP passthrough - Documentação do erro 422 e solução com trustedCIDRsForXForwardedFor Melhorias gerais: - READMEs atualizados com arquitetura e troubleshooting - Scripts cleanup.sh para todas as aulas - CLAUDE.md atualizado com contexto do projeto
This commit is contained in:
@@ -20,7 +20,7 @@ cd "$SCRIPT_DIR"
|
||||
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}[ERROR]${NC} $1"; }
|
||||
log_error() { echo -e "${RED}[ERRO]${NC} $1"; }
|
||||
|
||||
echo ""
|
||||
echo "============================================"
|
||||
@@ -57,6 +57,9 @@ fi
|
||||
log_warn "ATENÇÃO: Esta operação irá DESTRUIR todos os recursos!"
|
||||
echo ""
|
||||
echo "Recursos que serão removidos:"
|
||||
echo " - NGINX Ingress Controller"
|
||||
echo " - Hetzner CSI Driver"
|
||||
echo " - LoadBalancer (Hetzner LB)"
|
||||
echo " - 3x Control Plane nodes"
|
||||
echo " - Workers (incluindo os criados pelo autoscaler)"
|
||||
echo " - Rede privada"
|
||||
@@ -99,6 +102,76 @@ if [ -f "terraform.tfvars" ]; then
|
||||
fi
|
||||
fi
|
||||
|
||||
# ==========================================================================
|
||||
# Remover LoadBalancer criado pelo CCM (não gerenciado pelo OpenTofu)
|
||||
# ==========================================================================
|
||||
# O LoadBalancer é criado pelo Hetzner CCM quando o NGINX Ingress é instalado.
|
||||
# Ele está conectado à subnet e impede a destruição da rede se não for removido.
|
||||
|
||||
log_info "Verificando LoadBalancer do Hetzner CCM..."
|
||||
|
||||
# Tentar via kubectl primeiro (se cluster ainda acessível)
|
||||
if [ -f "kubeconfig" ]; then
|
||||
export KUBECONFIG="$SCRIPT_DIR/kubeconfig"
|
||||
if kubectl cluster-info &>/dev/null; then
|
||||
if kubectl get svc -n ingress-nginx nginx-ingress-ingress-nginx-controller &>/dev/null; then
|
||||
log_info "Removendo Service LoadBalancer via kubectl..."
|
||||
kubectl delete svc nginx-ingress-ingress-nginx-controller -n ingress-nginx --timeout=60s 2>/dev/null || true
|
||||
sleep 10 # Aguardar CCM processar a remoção
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Fallback: deletar diretamente via hcloud CLI
|
||||
if [ -f "terraform.tfvars" ]; then
|
||||
HCLOUD_TOKEN=$(grep 'hcloud_token' terraform.tfvars | cut -d'"' -f2)
|
||||
if [ -n "$HCLOUD_TOKEN" ]; then
|
||||
LB_NAME="k8s-ingress" # Nome definido no nginx-ingress-values.yaml
|
||||
if HCLOUD_TOKEN="$HCLOUD_TOKEN" hcloud load-balancer describe "$LB_NAME" &>/dev/null; then
|
||||
log_info "Removendo LoadBalancer '$LB_NAME' via hcloud CLI..."
|
||||
HCLOUD_TOKEN="$HCLOUD_TOKEN" hcloud load-balancer delete "$LB_NAME" --quiet 2>/dev/null || true
|
||||
log_success "LoadBalancer removido"
|
||||
sleep 5 # Aguardar Hetzner processar
|
||||
else
|
||||
log_info "LoadBalancer '$LB_NAME' não encontrado (OK)"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# ==========================================================================
|
||||
# Remover NGINX Ingress Controller
|
||||
# ==========================================================================
|
||||
# Instalado pelo setup.sh para expor serviços HTTP/HTTPS/SSH
|
||||
|
||||
if [ -f "kubeconfig" ]; then
|
||||
export KUBECONFIG="$SCRIPT_DIR/kubeconfig"
|
||||
if kubectl cluster-info &>/dev/null; then
|
||||
if helm status ingress-nginx -n ingress-nginx &>/dev/null; then
|
||||
log_info "Removendo NGINX Ingress Controller..."
|
||||
helm uninstall ingress-nginx -n ingress-nginx --wait 2>/dev/null || true
|
||||
kubectl delete namespace ingress-nginx --wait=false 2>/dev/null || true
|
||||
log_success "NGINX Ingress removido"
|
||||
sleep 5 # Aguardar processamento
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# ==========================================================================
|
||||
# Remover Hetzner CSI Driver
|
||||
# ==========================================================================
|
||||
# Instalado pelo setup.sh para provisionar volumes persistentes
|
||||
|
||||
if [ -f "kubeconfig" ]; then
|
||||
export KUBECONFIG="$SCRIPT_DIR/kubeconfig"
|
||||
if kubectl cluster-info &>/dev/null; then
|
||||
if helm status hcloud-csi -n kube-system &>/dev/null; then
|
||||
log_info "Removendo Hetzner CSI Driver..."
|
||||
helm uninstall hcloud-csi -n kube-system --wait 2>/dev/null || true
|
||||
log_success "Hetzner CSI Driver removido"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
log_info "Destruindo infraestrutura via OpenTofu..."
|
||||
echo ""
|
||||
|
||||
Reference in New Issue
Block a user