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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user