- Atualizar diagrama de jornada com seção de Observabilidade
- Adicionar aulas 12 e 14 na tabela de conteúdo
- Incluir comandos no Quick Start
- Atualizar estrutura do repositório
- Expandir diagrama de arquitetura com monitoramento e service mesh
Adiciona configuração explícita para usar o mesmo bucket S3 para uploads,
artifacts, LFS, packages, externalDiffs, terraformState, ciSecureFiles e
dependencyProxy. O GitLab organiza internamente por pastas/prefixos.
- Instala Istio (base + istiod + ingressgateway)
- Configura Kiali e Jaeger para observabilidade
- Deploy de app-backend v1 e v2 com traffic splitting 90/10
- Integra com Victoria Metrics da aula-12
- Inclui teste-stress.sh para validar distribuição de tráfego
- Tráfego externo passa pelo Istio Gateway via NGINX Ingress
- Mesclar seções global duplicadas no gitlab-values.yaml
(a segunda sobrescrevia ingress.class: nginx, causando 404)
- Adicionar etapa de DNS antes da instalação no setup.sh
(HTTP-01 challenge requer DNS configurado previamente)
load_config retorna 1 quando .env não existe, causando saída
imediata devido ao set -e. Adiciona || true para continuar
a execução e coletar input do usuário.
Adiciona comandos didáticos:
- helm list, history, get values, status
- helm rollback (não precisa de variáveis)
- helm upgrade com source .env (mostra os --set)
- Dica para usar setup.sh em produção
- Adicionar hcloud-csi-values.yaml com tolerations para node failures
- Configurar 2 replicas do CSI controller para HA
- Criar statefulset-pdb.yaml para proteger StatefulSets durante drain
- Documentar troubleshooting de volumes stuck no README
O n8n webhook precisa de mais memória para iniciar corretamente.
Com 256Mi, a liveness probe mata o container antes dele subir.
- Aumentar memory limit de 256Mi para 512Mi
- Aumentar cpu limit de 250m para 500m
- Aumentar requests proporcionalmente
- Documentar trigger único (unavailable) em vez de restarts
- Explicar fórmula intuitiva: 5 + (unavailable * 2)
- Adicionar seção sobre scrape interval de 5s
- Documentar fluxo de detecção (~6-7s)
- Explicar por que não usar restarts (CrashLoopBackOff)
- Atualizar lições e trade-offs
- Simplificar ScaledObject: usar apenas trigger de pods unavailable
(instantâneo) em vez de restarts (requeria janela de tempo)
- Adicionar VMServiceScrape com scrape interval de 5s para detecção
rápida pelo Victoria Metrics (default era 30s)
- Acelerar scale down: stabilizationWindow=0, remove 10 pods/s
- Query intuitiva: 5 + (unavailable * 2) = réplicas desejadas
- Usar metricType AverageValue para cálculo correto de réplicas
- Limpar mensagem desnecessária do teste de stress
- URL padrão agora é http://localhost (porta 80)
- Verificação do Ingress executa sempre, não apenas quando porta 80
- Remove opção de fallback para porta 3000
- Atualiza README com exemplos corretos
- Adicionar flag --no-annotation-check para auto-resize sem annotations
- Documentar comportamento automático para PVCs futuros
- Mover seção de annotations para "Override (Opcional)"
- Atualizar limite padrão para 10Ti (máximo Hetzner)
- ArgoCD via Helm com recursos mínimos (~1Gi)
- GitLab Runner com executor Kubernetes
- Exemplo node-bugado com Dockerfile e .gitlab-ci.yml
- Manifests K8s para repositório GitOps
- README.md da aula-03 (liveness + readiness probes)
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
aula-07: Criação de imagem Talos customizada na Hetzner Cloud
- Usa Talos Factory para gerar imagem ARM64/AMD64
- Inclui extensões: qemu-guest-agent, hcloud
aula-08: Provisionamento de cluster Kubernetes Talos via OpenTofu
- 3 Control Planes em HA (CAX11 ARM64)
- 1 Worker Node (CAX11 ARM64)
- Rede privada, Floating IP, Firewall
- Cluster Autoscaler para Hetzner (0-5 workers extras)
- Setup interativo com validação de pré-requisitos
- Custo estimado: ~€18/mês (base)
Também inclui:
- .gitignore para ignorar arquivos sensíveis
- CLAUDE.md com instruções do projeto
Quando todos os pods estão indisponíveis, o Ingress mantém
a requisição por até 99s aguardando o backend voltar,
alcançando zero falhas visíveis ao usuário.