ArgoCD Setup f5cb6f0581 fix(aula-13): reescrever benchmarks eStargz vs GZIP
Benchmarks antigos eram falhos: node hardcoded, imagens diferentes,
sem verificação de snapshotter, sem controle de cache, 1 iteração.

Novos scripts:
- prepare-images.sh: constrói mesma imagem em gzip e estargz
- benchmark.sh: múltiplas iterações, detecção de cache hits,
  verificação de snapshotter, 3 tipos de imagem (nginx/node/postgres)

Requer worker node sem cache (node fresh via cluster autoscaler).
2026-03-14 07:48:51 -03:00
2026-01-23 18:05:11 -03:00
2026-01-11 21:13:47 -03:00

Workshop: Docker, Kubernetes e GitOps na Prática

Workshop progressivo que evolui de containers básicos até um cluster Kubernetes de produção com GitOps na Hetzner Cloud.

👉 Grupo do WhatsApp da nossa comunidade

▶ Assistir a gravação Turma 3 - 24/01/2026

▶ Assistir a gravação Turma 2 - 10/01/2026

▶ Assistir a gravação Turma 1 - 27/12/2025

Jornada de Aprendizado

┌─────────────────────────────────────────────────────────────────────────────┐
│                           FUNDAMENTOS (Local)                               │
├─────────────────────────────────────────────────────────────────────────────┤
│  Aula 01        Aula 02        Aula 03        Aula 04        Aula 05        │
│  Docker         Liveness       Replicas       Keep Request   KEDA           │
│  Compose        Probe          Readiness      (Lua)          Auto-scaling   │
│     │              │              │              │              │           │
│     └──────────────┴──────────────┴──────────────┴──────────────┘           │
│                                   │                                         │
│                          App "node-bugado"                                  │
│                    (trava após N requests)                                  │
└─────────────────────────────────────────────────────────────────────────────┘
                                    │
                                    ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│                         APLICAÇÕES (Local)                                  │
├─────────────────────────────────────────────────────────────────────────────┤
│  Aula 06                                                                    │
│  n8n via Helm (Queue Mode + HPA)                                            │
│  PostgreSQL + Redis                                                         │
└─────────────────────────────────────────────────────────────────────────────┘
                                    │
                                    ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│                      INFRAESTRUTURA (Hetzner Cloud)                         │
├─────────────────────────────────────────────────────────────────────────────┤
│  Aula 07                    Aula 08                                         │
│  Talos Linux ──────────────► Cluster K8s HA                                 │
│  (imagem custom)             OpenTofu + CCM + CSI                           │
│                              Autoscaler (1-5 workers)                       │
└─────────────────────────────────────────────────────────────────────────────┘
                                    │
                                    ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│                       PLATAFORMA (Hetzner Cloud)                            │
├─────────────────────────────────────────────────────────────────────────────┤
│  Aula 09             Aula 10              Aula 11                           │
│  n8n (Hetzner)       Gitea                ArgoCD                            │
│  Multi-tenant        Registry + SSH       GitOps CI/CD                      │
└─────────────────────────────────────────────────────────────────────────────┘
                                   │
                                   ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│                     OBSERVABILIDADE (Hetzner Cloud)                         │
├─────────────────────────────────────────────────────────────────────────────┤
│  Aula 12                        Aula 14                                     │
│  Victoria Metrics               Istio Traffic Splitting                     │
│  Grafana + Alertas              Canary Deployments + Kiali                  │
└─────────────────────────────────────────────────────────────────────────────┘

Aulas

Aula Tema Ambiente Conceitos
01 Docker Compose Local Containers, restart policies
02 Liveness Probe Local Health checks, auto-restart
03 High Availability Local Replicas, readiness probe
04 Keep Request Local NGINX Lua, zero-downtime
05 KEDA Local Auto-scaling por métricas
06 n8n (Local) Local Helm, Queue Mode, HPA
07 Talos Linux Hetzner Imagem customizada, Factory
08 Cluster HA Hetzner OpenTofu, CCM, CSI, Autoscaler
09 n8n (Cloud) Hetzner Multi-tenant, CSI Driver
10 Gitea Hetzner Registry, SSH, Helm
11 ArgoCD Hetzner GitOps, Runner, CI/CD
12 Victoria Metrics Hetzner Observabilidade, Grafana, Alertas
14 Istio Hetzner Service Mesh, Traffic Splitting, Kiali

Pré-requisitos

Aulas 01-06 (Local)

  • Docker Desktop, OrbStack, ou similar
  • kubectl
  • Helm 3.x

Aulas 07-14 (Hetzner Cloud)

  • Conta na Hetzner Cloud
  • hcloud CLI
  • OpenTofu
  • talosctl
  • Domínio configurado (ex: kube.quest)

Quick Start

Local (Docker Desktop)

# Aula 01 - Docker básico
cd aula-01 && docker-compose up

# Aula 02-05 - Kubernetes local
cd aula-02 && kubectl apply -f .

Hetzner Cloud

# 1. Criar imagem Talos (aula-07)
# Siga o README.md da aula-07

# 2. Provisionar cluster (aula-08)
cd aula-08 && ./setup.sh

# 3. Instalar aplicações
cd aula-09 && ./setup.sh  # n8n
cd aula-10 && ./setup.sh  # Gitea
cd aula-11 && ./setup.sh  # ArgoCD
cd aula-12 && ./setup.sh  # Victoria Metrics + Grafana
cd aula-14 && ./setup.sh  # Istio + Kiali

Custos Estimados (Hetzner Cloud)

Componente Recurso Custo/mês
Control Plane 3x CAX11 ~€13.77
Workers 1-5x CAX11 €4.59-€22.95
LoadBalancer LB11 ~€5.99
Volumes 40-80Gi €1.94-€3.88
Total ~€26-€47

Arquitetura Final

                         CloudFlare (DNS + CDN)
                                  │
        ┌─────────────┬───────────┼───────────┬─────────────┐
        │             │           │           │             │
        ▼             ▼           ▼           ▼             ▼
  gitea.kube.quest n8n.kube.quest argocd   grafana.kube.quest kiali.kube.quest
        │             │           │           │             │
        └─────────────┴───────────┼───────────┴─────────────┘
                                  │
                                  ▼
                    ┌─────────────────────────┐
                    │   Hetzner LoadBalancer  │
                    │   :80 :443 :22          │
                    └───────────┬─────────────┘
                                │
                                ▼
                    ┌─────────────────────────┐
                    │    NGINX Ingress        │
                    │    (TCP passthrough)    │
                    └───────────┬─────────────┘
                                │
    ┌───────────┬───────────┬───┼───┬───────────┬───────────┐
    │           │           │       │           │           │
    ▼           ▼           ▼       ▼           ▼           ▼
┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐
│ Gitea  │ │  n8n   │ │ ArgoCD │ │ Victor.│ │ Istio  │ │  Apps  │
│        │ │        │ │        │ │ Metrics│ │ System │ │  Mesh  │
│Registry│ │Workers │ │GitOps  │ │Grafana │ │ Kiali  │ │  v1/v2 │
│  SSH   │ │Webhooks│ │        │ │Alertas │ │ Jaeger │ │Canary  │
└────────┘ └────────┘ └────────┘ └────────┘ └────────┘ └────────┘

                    GitOps Pipeline
         git push → build → registry → sync → deploy
                              ↓
                    Traffic Splitting (Istio)
         v1 (90%) ←──────────────────────→ v2 (10%)

App de Demonstração: node-bugado

Aplicação Node.js que trava intencionalmente após N requisições:

// Aceita requests até MAX_REQUESTS
// Depois para de responder (simula crash)
// /health também para de responder

Usada para demonstrar:

  • Por que restart: always não é suficiente
  • Como liveness probes detectam apps travadas
  • Como readiness probes evitam tráfego para pods não-prontos
  • Como KEDA escala baseado em métricas de saúde

Estrutura do Repositório

workshop/
├── README.md              # Este arquivo
├── CLAUDE.md              # Instruções para Claude Code
├── aula-01/               # Docker Compose
├── aula-02/               # Liveness Probe
├── aula-03/               # Replicas + Readiness
├── aula-04/               # NGINX Keep Request
├── aula-05/               # KEDA + Victoria Metrics
├── aula-06/               # n8n Local
├── aula-07/               # Talos Linux Image
├── aula-08/               # Cluster Hetzner (OpenTofu)
├── aula-09/               # n8n Hetzner
├── aula-10/               # Gitea
├── aula-11/               # ArgoCD (GitOps)
├── aula-12/               # Victoria Metrics + Grafana
└── aula-14/               # Istio Traffic Splitting

Cada aula contém:

  • README.md - Documentação completa
  • setup.sh - Script de instalação (quando aplicável)
  • cleanup.sh - Script de remoção
  • Manifests YAML ou Helm values

Licença

MIT

Description
No description provided
Readme MIT 492 KiB
Languages
Shell 85.5%
HCL 8.2%
JavaScript 3.5%
Dockerfile 2.8%