refactor: migrar GitLab → Gitea (aulas 10, 11, 13)

- Aula 10: Gitea + Registry + Actions + Runner (substituiu GitLab)
  - gitea-values.yaml: PostgreSQL standalone, Valkey standalone, ~800Mi RAM
  - setup.sh/cleanup.sh: namespace gitea, Helm gitea-charts/gitea + actions
  - README.md: documentação completa com de→para (GitLab/Harbor/Tekton vs Gitea)

- Aula 11: ArgoCD (GitOps) — removido GitLab Runner (runner vive na aula-10)
  - setup.sh: só ArgoCD, integração SSH com Gitea
  - node-bugado/.gitea/workflows/ci.yml: pipeline convertida

- Aula 13: Container Factory — atualizado para Gitea
  - setup.sh/cleanup.sh: referências GitLab → Gitea
  - pipelines/postgresql/ci.yml: Gitea Actions workflow
  - README.md: conexão com act_runner explicada

- CLAUDE.md: tabela de aulas atualizada
This commit is contained in:
ArgoCD Setup
2026-03-14 01:44:30 -03:00
parent ff7af56c30
commit d380cd8585
35 changed files with 3374 additions and 1202 deletions

View File

@@ -4,7 +4,7 @@
#
# Esta configuração:
# - Usa NGINX Ingress Controller externo (instalado na aula-08)
# - Define ~7.5GB de recursos para forçar nodes dedicados via autoscaler
# - Define ~5GB de recursos distribuídos em 2 workers CAX11 (antiAffinity)
# - Desabilita componentes não essenciais para economizar recursos
# - Configura Registry para container images
#
@@ -31,6 +31,10 @@
# =============================================================================
global:
# Desabilitar MinIO interno (migrado para Hetzner Object Storage)
minio:
enabled: false
# Usar Ingress Controller externo
ingress:
class: nginx
@@ -52,36 +56,6 @@ global:
seccompProfile:
type: RuntimeDefault
# Object Storage - Hetzner S3 (em vez de MinIO)
minio:
enabled: false
appConfig:
object_store:
enabled: true
proxy_download: true
connection:
secret: gitlab-object-storage
key: connection
# Bucket único para todos os tipos de objeto
# O GitLab organiza internamente por pastas/prefixos
# Os valores abaixo são sobrescritos via --set no setup.sh usando S3_BUCKET do .env
uploads:
bucket: gitlab-storage
artifacts:
bucket: gitlab-storage
lfs:
bucket: gitlab-storage
packages:
bucket: gitlab-storage
externalDiffs:
bucket: gitlab-storage
terraformState:
bucket: gitlab-storage
ciSecureFiles:
bucket: gitlab-storage
dependencyProxy:
bucket: gitlab-storage
# Email (opcional - configurar depois)
# email:
# from: gitlab@kube.quest
@@ -106,38 +80,9 @@ nginx-ingress:
gitlab:
# Webservice (Rails app - UI e API)
# Anti-affinity preferencial: distribui se possível, mas não obriga
# - 1 nó grande (8GB): tudo roda junto
# - Múltiplos nós pequenos: distribui automaticamente
# - Sem recursos: autoscaler cria nós novos
# NOTA: antiAffinity garante que webservice e sidekiq rodem em nós diferentes
# Isso evita OOM quando ambos competem por memória no mesmo nó CAX11 (4GB)
webservice:
minReplicas: 1
maxReplicas: 1
resources:
requests:
memory: 2.5Gi
cpu: 300m
limits:
memory: 3Gi
cpu: 1
workerProcesses: 1
puma:
threads:
min: 1
max: 2
# Anti-affinity preferencial: tenta separar de sidekiq, mas não obriga
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
app: sidekiq
topologyKey: kubernetes.io/hostname
# Sidekiq (background jobs)
sidekiq:
minReplicas: 1
maxReplicas: 1
resources:
@@ -146,29 +91,83 @@ gitlab:
cpu: 200m
limits:
memory: 2.5Gi
cpu: 1
workerProcesses: 1
puma:
threads:
min: 1
max: 2
# Anti-affinity: não rodar no mesmo nó que sidekiq
# Node affinity: preferir nodes do pool gitlab-pool (CAX21 com 8GB)
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
preference:
matchExpressions:
- key: hcloud/node-group
operator: In
values:
- gitlab-pool
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchLabels:
app: sidekiq
topologyKey: kubernetes.io/hostname
# Sidekiq (background jobs)
# Anti-affinity: não rodar no mesmo nó que webservice
sidekiq:
minReplicas: 1
maxReplicas: 1
resources:
requests:
memory: 1.5Gi
cpu: 100m
limits:
memory: 2Gi
cpu: 500m
# Desabilitar memory watchdog interno do GitLab (deixa o OOM killer do K8s gerenciar)
memoryKiller:
maxRss: 2000000000 # 2GB - maior que o limite para evitar kills prematuros
# Anti-affinity preferencial: tenta separar de webservice, mas não obriga
# Node affinity: preferir nodes do pool gitlab-pool (CAX21 com 8GB)
affinity:
podAntiAffinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
app: webservice
topologyKey: kubernetes.io/hostname
preference:
matchExpressions:
- key: hcloud/node-group
operator: In
values:
- gitlab-pool
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchLabels:
app: webservice
topologyKey: kubernetes.io/hostname
# Gitaly (Git storage)
gitaly:
# Node affinity: preferir nodes do pool gitlab-pool (CAX21 com 8GB)
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
preference:
matchExpressions:
- key: hcloud/node-group
operator: In
values:
- gitlab-pool
resources:
requests:
memory: 1Gi
cpu: 150m
memory: 512Mi
cpu: 100m
limits:
memory: 1.5Gi
memory: 1Gi
cpu: 500m
persistence:
size: 10Gi # Mínimo Hetzner ($0.0484/GB)
@@ -220,12 +219,22 @@ gitlab:
postgresql:
install: true
primary:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
preference:
matchExpressions:
- key: hcloud/node-group
operator: In
values:
- gitlab-pool
resources:
requests:
memory: 1Gi
cpu: 150m
memory: 512Mi
cpu: 100m
limits:
memory: 1.5Gi
memory: 1Gi
cpu: 500m
persistence:
size: 10Gi # Mínimo Hetzner ($0.0484/GB)
@@ -239,34 +248,35 @@ redis:
master:
resources:
requests:
memory: 512Mi
cpu: 100m
memory: 256Mi
cpu: 50m
limits:
memory: 1Gi
cpu: 300m
memory: 512Mi
cpu: 200m
persistence:
size: 10Gi # Mínimo Hetzner ($0.0484/GB)
storageClass: hcloud-volumes
# =============================================================================
# OBJECT STORAGE (Hetzner Object Storage - S3 compatible)
# MINIO (Object Storage) - DESABILITADO
# =============================================================================
# Usamos o Hetzner Object Storage ao invés do MinIO bundled.
# Vantagens:
# - Sem volume persistente (economia de $0.50/mês)
# - Sem pod MinIO (economia de recursos)
# - Storage ilimitado (paga por uso: €0.006/GB)
# - Alta disponibilidade gerenciada pela Hetzner
# Migrado para Hetzner Object Storage para resolver problema de espaço (89% cheio)
# O Registry agora usa S3 externo (Hetzner Object Storage)
#
# Pré-requisito: criar bucket e credenciais na Hetzner Console
# O setup.sh cria o Secret gitlab-object-storage automaticamente
# Para voltar ao MinIO interno (rollback):
# 1. Mudar minio.install: true
# 2. Remover registry.storage configuração
# 3. Re-deploy GitLab
minio:
install: false
# =============================================================================
# REGISTRY (Container Registry)
# REGISTRY (Container Registry) - Usando Hetzner Object Storage
# =============================================================================
# IMPORTANTE: Antes de fazer deploy, criar o secret:
# kubectl apply -f gitlab-registry-storage-secret.yaml
#
# O secret contém as credenciais S3 para o Hetzner Object Storage
registry:
enabled: true
hpa:
@@ -279,7 +289,7 @@ registry:
limits:
memory: 256Mi
cpu: 200m
# Storage usa Hetzner Object Storage (configurado via global.appConfig.object_store)
# Storage configurado para Hetzner Object Storage (S3 compatível)
storage:
secret: gitlab-registry-storage
key: config