Files
workshop/aula-08
Allyson de Paula 07b7ee62d3 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
2025-12-31 17:57:02 -03:00
..

Aula 08 - Cluster Kubernetes HA na Hetzner Cloud

Objetivo

Provisionar um cluster Kubernetes Talos de producao na Hetzner Cloud usando OpenTofu, com opcoes de Alta Disponibilidade (HA) e LoadBalancer.

Arquitetura

Modo HA com LoadBalancer (Recomendado)

                    Internet
                        │
                        ▼
            ┌───────────────────────┐
            │   Hetzner Load        │
            │   Balancer (LB11)     │
            │   IP: 1.2.3.4         │
            └───────────────────────┘
                        │
        ┌───────────────┼───────────────┐
        │               │               │
        ▼               ▼               ▼
   ┌─────────┐    ┌─────────┐    ┌─────────┐
   │  CP-0   │    │  CP-1   │    │  CP-2   │
   │ CAX11   │    │ CAX11   │    │ CAX11   │
   │10.0.1.10│    │10.0.1.11│    │10.0.1.12│
   └─────────┘    └─────────┘    └─────────┘
        │               │               │
        └───────────────┼───────────────┘
                        │
                        ▼
                  ┌──────────┐
                  │ Worker-0 │
                  │  CAX11   │
                  │10.0.1.20 │
                  └──────────┘

Servicos do LoadBalancer

O LoadBalancer centraliza todo o trafego externo:

Porta Destino Uso
6443 Control Planes Kubernetes API
50000 Control Planes Talos API
80 Workers HTTP (NGINX Ingress)
443 Workers HTTPS (NGINX Ingress)
22 Workers SSH (GitLab)

Roteamento L7 (por dominio)

O LoadBalancer faz apenas roteamento L4 (por porta). O roteamento por dominio e feito pelo NGINX Ingress:

LB :443 → NGINX Ingress → n8n.kube.quest      → n8n pods
                        → git.kube.quest      → gitlab pods
                        → argocd.kube.quest   → argocd pods
                        → registry.git...     → registry pods

Custos Estimados

Precos baseados em Hetzner Cloud (NBG1 - Nuremberg):

Configuracao CPs LB Custo/mes
Single 1 Floating IP ~$13
HA 3 Floating IP ~$22
HA + LB 3 LB11 ~$24
HA + LB + Autoscaler (max 5 workers) 3 LB11 ~$43

Recursos: CAX11 $4.59, LB11 $5.99, Floating IP $3.29

Pre-requisitos

# macOS
brew install opentofu
brew install siderolabs/tap/talosctl
brew install kubectl
brew install helm

# Criar imagem Talos (aula-07)
# Obter ID: hcloud image list --type snapshot

Comandos

# Provisionar cluster (interativo)
./setup.sh

# Destruir infraestrutura
./cleanup.sh

Fluxo do Setup

1. Verifica pre-requisitos
2. Coleta credenciais:
   - Token Hetzner Cloud
   - Chave SSH
   - ID da imagem Talos
3. Pergunta configuracao:
   - Cluster HA? (S/n)
   - LoadBalancer? (S/n) [se HA]
4. Cria terraform.tfvars
5. Executa tofu init/plan/apply
6. Aguarda cluster ficar pronto
7. Instala CCM (Cloud Controller Manager)
8. Instala Cluster Autoscaler
9. Instala Hetzner CSI Driver
10. Instala Metrics Server
11. Instala NGINX Ingress Controller

Componentes Instalados

Componente Funcao
Hetzner CCM Remove taints dos workers, provisiona LoadBalancers
Cluster Autoscaler Escala workers de 1 a 5 automaticamente
Hetzner CSI Driver Provisiona volumes persistentes (StorageClass: hcloud-volumes)
Metrics Server Habilita kubectl top e HPA baseado em CPU/memoria
NGINX Ingress Expoe servicos HTTP/HTTPS/SSH via LoadBalancer

Apos o Setup

Configurar kubectl

export KUBECONFIG=$PWD/kubeconfig
kubectl get nodes

Configurar talosctl

export TALOSCONFIG=$PWD/talosconfig
talosctl -n <IP> health

Ver logs do Autoscaler

kubectl logs -n cluster-autoscaler -l app=cluster-autoscaler -f

Ver IP do LoadBalancer

kubectl get svc -n ingress-nginx ingress-nginx-controller -o jsonpath='{.status.loadBalancer.ingress[0].ip}'

Ver StorageClass

kubectl get storageclass
# Esperado: hcloud-volumes (default)

Ver uso de recursos

kubectl top nodes    # Uso de CPU/memoria por no
kubectl top pods -A  # Uso de CPU/memoria por pod

Testar Autoscaler

# Criar pods pending (vai escalar workers)
kubectl create deployment test --image=nginx --replicas=20

# Acompanhar
kubectl get nodes -w

# Limpar
kubectl delete deployment test

Proximos Passos

  1. Configurar DNS - Apontar dominio para o IP do LoadBalancer
  2. Deploy n8n (aula-09) - Workflow automation com PostgreSQL e Redis
  3. Deploy GitLab (aula-10) - Git + Container Registry + SSH

Arquivos

aula-08/
├── main.tf                    # Recursos principais (servers, LB, Talos)
├── variables.tf               # Variaveis de entrada
├── outputs.tf                 # Outputs do cluster
├── versions.tf                # Versoes dos providers
├── setup.sh                   # Script de setup interativo
├── cleanup.sh                 # Script de destruicao
├── cluster-autoscaler.yaml    # Manifesto do autoscaler
├── install-nginx-ingress.sh   # Instala NGINX Ingress com LB
├── install-metrics-server.sh  # Instala Metrics Server (kubectl top, HPA)
├── nginx-ingress-values.yaml  # Configuracao do NGINX Ingress
└── talos-patches/             # Patches de configuracao Talos
    ├── control-plane.yaml
    └── worker.yaml