refactor: remover todas as dependências do GitLab no workshop
- Aula 08: nginx-ingress TCP passthrough gitlab→gitea, comments
- Aula 09: add-client.sh API GitLab→Gitea
- Aula 11: node-bugado deployment image registry.kube.quest→gitea.kube.quest
- Aula 12: setup.sh/cleanup.sh API GitLab→Gitea, ArgoCD repoURL
- Aula 13: k8s manifests, benchmarks: registry.kube.quest→gitea.kube.quest,
gitlab-registry→gitea-registry, GITLAB_TOKEN→GITEA_TOKEN
- Aula 14: comments GitLab→Gitea
- README raiz: arquitetura, tabela, DNS
This commit is contained in:
18
README.md
18
README.md
@@ -50,7 +50,7 @@ Workshop progressivo que evolui de containers básicos até um cluster Kubernete
|
||||
│ PLATAFORMA (Hetzner Cloud) │
|
||||
├─────────────────────────────────────────────────────────────────────────────┤
|
||||
│ Aula 09 Aula 10 Aula 11 │
|
||||
│ n8n (Hetzner) GitLab ArgoCD + Runner │
|
||||
│ n8n (Hetzner) Gitea ArgoCD │
|
||||
│ Multi-tenant Registry + SSH GitOps CI/CD │
|
||||
└─────────────────────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
@@ -77,7 +77,7 @@ Workshop progressivo que evolui de containers básicos até um cluster Kubernete
|
||||
| 07 | Talos Linux | Hetzner | Imagem customizada, Factory |
|
||||
| 08 | Cluster HA | Hetzner | OpenTofu, CCM, CSI, Autoscaler |
|
||||
| 09 | n8n (Cloud) | Hetzner | Multi-tenant, CSI Driver |
|
||||
| 10 | GitLab | Hetzner | Registry, SSH, Helm |
|
||||
| 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 |
|
||||
@@ -117,7 +117,7 @@ cd aula-08 && ./setup.sh
|
||||
|
||||
# 3. Instalar aplicações
|
||||
cd aula-09 && ./setup.sh # n8n
|
||||
cd aula-10 && ./setup.sh # GitLab
|
||||
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
|
||||
@@ -141,7 +141,7 @@ cd aula-14 && ./setup.sh # Istio + Kiali
|
||||
┌─────────────┬───────────┼───────────┬─────────────┐
|
||||
│ │ │ │ │
|
||||
▼ ▼ ▼ ▼ ▼
|
||||
git.kube.quest n8n.kube.quest argocd grafana.kube.quest kiali.kube.quest
|
||||
gitea.kube.quest n8n.kube.quest argocd grafana.kube.quest kiali.kube.quest
|
||||
│ │ │ │ │
|
||||
└─────────────┴───────────┼───────────┴─────────────┘
|
||||
│
|
||||
@@ -161,10 +161,10 @@ cd aula-14 && ./setup.sh # Istio + Kiali
|
||||
│ │ │ │ │ │
|
||||
▼ ▼ ▼ ▼ ▼ ▼
|
||||
┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐
|
||||
│ GitLab │ │ n8n │ │ ArgoCD │ │ Victor.│ │ Istio │ │ Apps │
|
||||
│ Gitea │ │ n8n │ │ ArgoCD │ │ Victor.│ │ Istio │ │ Apps │
|
||||
│ │ │ │ │ │ │ Metrics│ │ System │ │ Mesh │
|
||||
│Registry│ │Workers │ │ Runner │ │Grafana │ │ Kiali │ │ v1/v2 │
|
||||
│ SSH │ │Webhooks│ │GitOps │ │Alertas │ │ Jaeger │ │Canary │
|
||||
│Registry│ │Workers │ │GitOps │ │Grafana │ │ Kiali │ │ v1/v2 │
|
||||
│ SSH │ │Webhooks│ │ │ │Alertas │ │ Jaeger │ │Canary │
|
||||
└────────┘ └────────┘ └────────┘ └────────┘ └────────┘ └────────┘
|
||||
|
||||
GitOps Pipeline
|
||||
@@ -205,8 +205,8 @@ workshop/
|
||||
├── aula-07/ # Talos Linux Image
|
||||
├── aula-08/ # Cluster Hetzner (OpenTofu)
|
||||
├── aula-09/ # n8n Hetzner
|
||||
├── aula-10/ # GitLab
|
||||
├── aula-11/ # ArgoCD + GitLab Runner
|
||||
├── aula-10/ # Gitea
|
||||
├── aula-11/ # ArgoCD (GitOps)
|
||||
├── aula-12/ # Victoria Metrics + Grafana
|
||||
└── aula-14/ # Istio Traffic Splitting
|
||||
```
|
||||
|
||||
@@ -47,7 +47,7 @@ O LoadBalancer centraliza todo o trafego externo:
|
||||
| 50000 | Control Planes | Talos API |
|
||||
| 80 | Workers | HTTP (NGINX Ingress) |
|
||||
| 443 | Workers | HTTPS (NGINX Ingress) |
|
||||
| 22 | Workers | SSH (GitLab) |
|
||||
| 22 | Workers | SSH (Gitea) |
|
||||
|
||||
### Roteamento L7 (por dominio)
|
||||
|
||||
@@ -55,7 +55,7 @@ O LoadBalancer faz apenas roteamento L4 (por porta). O roteamento por dominio e
|
||||
|
||||
```
|
||||
LB :443 → NGINX Ingress → n8n.kube.quest → n8n pods
|
||||
→ git.kube.quest → gitlab pods
|
||||
→ gitea.kube.quest → gitea pods
|
||||
→ argocd.kube.quest → argocd pods
|
||||
→ registry.git... → registry pods
|
||||
```
|
||||
@@ -186,7 +186,7 @@ kubectl delete deployment test
|
||||
|
||||
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
|
||||
3. **Deploy Gitea** (aula-10) - Git + Container Registry + SSH
|
||||
|
||||
## Arquivos
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#
|
||||
# Pools:
|
||||
# - worker-pool: CAX21 (4 vCPU, 8GB) - workloads gerais
|
||||
# - gitlab-pool: CAX21 - GitLab e serviços relacionados
|
||||
# - gitlab-pool: CAX21 - Gitea e serviços relacionados
|
||||
# - build-pool: CAX31 (8 vCPU, 16GB) - builds Docker, escala 0-1
|
||||
############################################################
|
||||
|
||||
@@ -130,7 +130,7 @@ spec:
|
||||
# worker-pool: Workloads gerais (CAX21 = 4 vCPU, 8GB)
|
||||
- --nodes=1:3:CAX21:nbg1:worker-pool
|
||||
#
|
||||
# gitlab-pool: GitLab e serviços pesados (CAX21)
|
||||
# gitlab-pool: Gitea e serviços pesados (CAX21)
|
||||
- --nodes=1:2:CAX21:nbg1:gitlab-pool
|
||||
#
|
||||
# build-pool: Builds Docker (CAX31 = 8 vCPU, 16GB)
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#
|
||||
# Este script configura o NGINX Ingress para:
|
||||
# - Usar LoadBalancer da Hetzner (requer CCM instalado)
|
||||
# - Suportar TCP passthrough para SSH do GitLab
|
||||
# - Suportar TCP passthrough para SSH do Gitea
|
||||
# - Comunicação via rede privada
|
||||
#
|
||||
# Pré-requisitos:
|
||||
@@ -125,15 +125,14 @@ echo ""
|
||||
echo "Portas expostas:"
|
||||
echo " - 80 (HTTP)"
|
||||
echo " - 443 (HTTPS)"
|
||||
echo " - 22 (SSH - para GitLab)"
|
||||
echo " - 22 (SSH - para Gitea)"
|
||||
echo ""
|
||||
echo "Próximos passos:"
|
||||
echo " 1. Configure DNS apontando para o IP acima:"
|
||||
echo " - n8n.kube.quest → $EXTERNAL_IP"
|
||||
echo " - git.kube.quest → $EXTERNAL_IP"
|
||||
echo " - registry.git.kube.quest → $EXTERNAL_IP"
|
||||
echo " - gitea.kube.quest → $EXTERNAL_IP"
|
||||
echo ""
|
||||
echo " 2. Instale o GitLab:"
|
||||
echo " 2. Instale o Gitea:"
|
||||
echo " cd ../aula-09 && ./setup.sh"
|
||||
echo ""
|
||||
echo "=============================================="
|
||||
|
||||
@@ -333,7 +333,7 @@ resource "hcloud_load_balancer_service" "https" {
|
||||
}
|
||||
}
|
||||
|
||||
# SSH (22) -> Workers (GitLab SSH)
|
||||
# SSH (22) -> Workers (Gitea SSH)
|
||||
resource "hcloud_load_balancer_service" "ssh" {
|
||||
count = var.enable_loadbalancer ? 1 : 0
|
||||
load_balancer_id = hcloud_load_balancer.cluster[0].id
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#
|
||||
# Este values configura o NGINX Ingress com:
|
||||
# - LoadBalancer da Hetzner (provisionado automaticamente pelo CCM)
|
||||
# - Suporte a TCP para SSH do GitLab (porta 22)
|
||||
# - Suporte a TCP para SSH do Gitea (porta 22)
|
||||
# - Uso de rede privada para comunicação com os nodes
|
||||
#
|
||||
# Uso:
|
||||
@@ -40,12 +40,12 @@ controller:
|
||||
load-balancer.hetzner.cloud/health-check-retries: "3"
|
||||
|
||||
# ==========================================================================
|
||||
# TCP Services - Para SSH do GitLab
|
||||
# TCP Services - Para SSH do Gitea
|
||||
# ==========================================================================
|
||||
# Mapeia porta externa -> namespace/service:porta
|
||||
# O GitLab Shell roda no namespace gitlab, service gitlab-gitlab-shell
|
||||
# O Gitea SSH roda no namespace gitea, service gitea-ssh
|
||||
tcp:
|
||||
22: "gitlab/gitlab-gitlab-shell:22"
|
||||
22: "gitea/gitea-ssh:22"
|
||||
|
||||
# Configuração do controller
|
||||
config:
|
||||
@@ -57,7 +57,7 @@ controller:
|
||||
proxy-read-timeout: "120"
|
||||
proxy-send-timeout: "120"
|
||||
|
||||
# Body size para uploads grandes (GitLab, n8n)
|
||||
# Body size para uploads grandes (Gitea, n8n)
|
||||
proxy-body-size: "0"
|
||||
|
||||
# Keepalive
|
||||
|
||||
@@ -212,7 +212,7 @@ if [ "$SKIP_CREDENTIALS" != "true" ]; then
|
||||
echo ""
|
||||
echo " O LoadBalancer também serve para:"
|
||||
echo " - HTTP/HTTPS (NGINX Ingress)"
|
||||
echo " - SSH (GitLab)"
|
||||
echo " - SSH (Gitea)"
|
||||
echo " - Talos API"
|
||||
echo ""
|
||||
echo " Custo adicional: ~\$6/mes"
|
||||
|
||||
@@ -224,7 +224,7 @@ Para provisionar n8n para múltiplos clientes em namespaces separados:
|
||||
# Isso cria:
|
||||
# - Namespace: acme-n8n
|
||||
# - n8n em: https://acme-n8n.{domain}
|
||||
# - Grupo GitLab: /acme/ (se GitLab instalado - aula-10)
|
||||
# - Organização Gitea: /acme/ (se Gitea instalado - aula-10)
|
||||
```
|
||||
|
||||
O script `add-client.sh` herda a configuração do `.env` gerado pelo `setup.sh`.
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#
|
||||
# Este script provisiona um novo cliente com:
|
||||
# - n8n em namespace separado (cliente-n8n)
|
||||
# - Grupo no GitLab compartilhado (opcional)
|
||||
# - Organização no Gitea compartilhado (opcional)
|
||||
#
|
||||
# Uso:
|
||||
# ./add-client.sh <nome-cliente>
|
||||
@@ -13,7 +13,7 @@
|
||||
# Exemplo:
|
||||
# ./add-client.sh acme
|
||||
# -> Cria namespace acme-n8n com n8n
|
||||
# -> Cria grupo /acme no GitLab (se disponível)
|
||||
# -> Cria organização /acme no Gitea (se disponível)
|
||||
#
|
||||
# Pré-requisitos:
|
||||
# - ./setup.sh já executado (gera .env com configurações)
|
||||
@@ -64,8 +64,8 @@ if [[ -z "$DOMAIN" ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Carregar configuração do GitLab se disponível
|
||||
GITLAB_HOST=""
|
||||
# Carregar configuração do Gitea se disponível
|
||||
GITEA_HOST=""
|
||||
if [[ -f "$SCRIPT_DIR/../aula-10/.env" ]]; then
|
||||
source "$SCRIPT_DIR/../aula-10/.env"
|
||||
fi
|
||||
@@ -90,8 +90,8 @@ if [ -z "$CLIENT" ]; then
|
||||
PROTOCOL="https"
|
||||
[[ "$USE_CLOUDFLARE" == "false" && "$USE_LETSENCRYPT" == "false" ]] && PROTOCOL="http"
|
||||
echo " - n8n em: ${PROTOCOL}://acme-n8n.${DOMAIN}"
|
||||
if [[ -n "$GITLAB_HOST" ]]; then
|
||||
echo " - GitLab grupo: https://${GITLAB_HOST}/acme/ (se configurado)"
|
||||
if [[ -n "$GITEA_HOST" ]]; then
|
||||
echo " - Gitea organização: https://${GITEA_HOST}/acme/ (se configurado)"
|
||||
fi
|
||||
exit 1
|
||||
fi
|
||||
@@ -196,46 +196,45 @@ eval helm upgrade --install ${CLIENT}-n8n community-charts/n8n \
|
||||
log_success "n8n instalado"
|
||||
|
||||
# =============================================================================
|
||||
# 3. CRIAR GRUPO NO GITLAB (opcional)
|
||||
# 3. CRIAR ORGANIZAÇÃO NO GITEA (opcional)
|
||||
# =============================================================================
|
||||
|
||||
log_info "Verificando GitLab..."
|
||||
log_info "Verificando Gitea..."
|
||||
|
||||
# Obter token do GitLab
|
||||
if [ -z "$GITLAB_TOKEN" ]; then
|
||||
GITLAB_TOKEN=$(kubectl get secret gitlab-gitlab-initial-root-password \
|
||||
-n gitlab \
|
||||
# Obter token do Gitea
|
||||
if [ -z "$GITEA_TOKEN" ]; then
|
||||
GITEA_TOKEN=$(kubectl get secret gitea-admin-secret \
|
||||
-n gitea \
|
||||
-o jsonpath='{.data.password}' 2>/dev/null | base64 -d || echo "")
|
||||
fi
|
||||
|
||||
if [ -z "$GITLAB_TOKEN" ]; then
|
||||
log_warn "GitLab não encontrado ou não configurado"
|
||||
log_warn "Pule esta etapa ou crie o grupo manualmente"
|
||||
if [ -z "$GITEA_TOKEN" ]; then
|
||||
log_warn "Gitea não encontrado ou não configurado"
|
||||
log_warn "Pule esta etapa ou crie a organização manualmente"
|
||||
else
|
||||
log_info "Criando grupo no GitLab..."
|
||||
# Usar GITLAB_HOST se disponível (da aula-10/.env)
|
||||
if [[ -n "$GITLAB_HOST" ]]; then
|
||||
GITLAB_URL="https://${GITLAB_HOST}"
|
||||
log_info "Criando organização no Gitea..."
|
||||
# Usar GITEA_HOST se disponível (da aula-10/.env)
|
||||
if [[ -n "$GITEA_HOST" ]]; then
|
||||
GITEA_URL="https://${GITEA_HOST}"
|
||||
else
|
||||
GITLAB_URL="https://git.${DOMAIN}"
|
||||
GITEA_URL="https://gitea.${DOMAIN}"
|
||||
fi
|
||||
|
||||
# Criar grupo via API
|
||||
RESULT=$(curl -s --request POST "${GITLAB_URL}/api/v4/groups" \
|
||||
--header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" \
|
||||
--form "name=${CLIENT}" \
|
||||
--form "path=${CLIENT}" \
|
||||
--form "visibility=private" \
|
||||
# Criar organização via API
|
||||
RESULT=$(curl -s --request POST "${GITEA_URL}/api/v1/orgs" \
|
||||
--header "Authorization: token ${GITEA_TOKEN}" \
|
||||
--header "Content-Type: application/json" \
|
||||
--data "{\"username\":\"${CLIENT}\",\"visibility\":\"private\"}" \
|
||||
--write-out "%{http_code}" \
|
||||
--output /tmp/gitlab-group-result.json 2>/dev/null || echo "000")
|
||||
--output /tmp/gitea-org-result.json 2>/dev/null || echo "000")
|
||||
|
||||
if [ "$RESULT" == "201" ]; then
|
||||
log_success "Grupo criado no GitLab"
|
||||
elif [ "$RESULT" == "400" ]; then
|
||||
log_warn "Grupo já existe ou erro de validação"
|
||||
log_success "Organização criada no Gitea"
|
||||
elif [ "$RESULT" == "422" ]; then
|
||||
log_warn "Organização já existe ou erro de validação"
|
||||
else
|
||||
log_warn "Não foi possível criar grupo (HTTP $RESULT)"
|
||||
log_warn "Crie manualmente em ${GITLAB_URL}/admin/groups/new"
|
||||
log_warn "Não foi possível criar organização (HTTP $RESULT)"
|
||||
log_warn "Crie manualmente em ${GITEA_URL}/-/admin/orgs"
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -259,11 +258,11 @@ echo -e "${CYAN}═════════════════════
|
||||
echo ""
|
||||
echo "Serviços:"
|
||||
echo -e " n8n: ${GREEN}${PROTOCOL}://${CLIENT}-n8n.${DOMAIN}${NC}"
|
||||
if [ -n "$GITLAB_TOKEN" ]; then
|
||||
if [[ -n "$GITLAB_HOST" ]]; then
|
||||
echo -e " GitLab: ${GREEN}https://${GITLAB_HOST}/${CLIENT}/${NC}"
|
||||
if [ -n "$GITEA_TOKEN" ]; then
|
||||
if [[ -n "$GITEA_HOST" ]]; then
|
||||
echo -e " Gitea: ${GREEN}https://${GITEA_HOST}/${CLIENT}/${NC}"
|
||||
else
|
||||
echo -e " GitLab: ${GREEN}https://git.${DOMAIN}/${CLIENT}/${NC}"
|
||||
echo -e " Gitea: ${GREEN}https://gitea.${DOMAIN}/${CLIENT}/${NC}"
|
||||
fi
|
||||
fi
|
||||
echo ""
|
||||
@@ -285,13 +284,13 @@ else
|
||||
echo "(Ou use o wildcard *.${DOMAIN} se já configurado)"
|
||||
fi
|
||||
|
||||
if [ -n "$GITLAB_TOKEN" ]; then
|
||||
if [ -n "$GITEA_TOKEN" ]; then
|
||||
echo ""
|
||||
echo "Git clone:"
|
||||
if [[ -n "$GITLAB_HOST" ]]; then
|
||||
echo " git clone git@${GITLAB_HOST}:${CLIENT}/meu-projeto.git"
|
||||
if [[ -n "$GITEA_HOST" ]]; then
|
||||
echo " git clone git@${GITEA_HOST}:${CLIENT}/meu-projeto.git"
|
||||
else
|
||||
echo " git clone git@git.${DOMAIN}:${CLIENT}/meu-projeto.git"
|
||||
echo " git clone git@gitea.${DOMAIN}:${CLIENT}/meu-projeto.git"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
34
aula-10/gitlab-registry-storage-secret.yaml
Normal file
34
aula-10/gitlab-registry-storage-secret.yaml
Normal file
@@ -0,0 +1,34 @@
|
||||
# =============================================================================
|
||||
# GitLab Registry Storage Secret - Hetzner Object Storage
|
||||
# =============================================================================
|
||||
#
|
||||
# Este secret configura o Registry para usar Hetzner Object Storage (S3 compatível)
|
||||
#
|
||||
# ANTES DE APLICAR:
|
||||
# 1. Crie o bucket "gitlab-registry" na Hetzner Cloud Console
|
||||
# 2. Gere credenciais S3 (Access Key + Secret Key)
|
||||
# 3. Substitua os valores <PLACEHOLDER> abaixo
|
||||
#
|
||||
# Para aplicar:
|
||||
# kubectl apply -f gitlab-registry-storage-secret.yaml
|
||||
#
|
||||
# =============================================================================
|
||||
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: gitlab-registry-storage
|
||||
namespace: gitlab
|
||||
type: Opaque
|
||||
stringData:
|
||||
config: |
|
||||
s3:
|
||||
bucket: gitlab-registry
|
||||
accesskey: <HETZNER_ACCESS_KEY>
|
||||
secretkey: <HETZNER_SECRET_KEY>
|
||||
region: eu-central
|
||||
regionendpoint: https://fsn1.your-objectstorage.com
|
||||
v4auth: true
|
||||
secure: true
|
||||
chunksize: 5242880
|
||||
rootdirectory: /
|
||||
@@ -3,7 +3,7 @@
|
||||
# =============================================================================
|
||||
#
|
||||
# Deployment com liveness e readiness probes.
|
||||
# A imagem é atualizada automaticamente pelo pipeline GitLab CI.
|
||||
# A imagem é atualizada automaticamente pelo pipeline Gitea Actions.
|
||||
#
|
||||
# =============================================================================
|
||||
|
||||
@@ -26,8 +26,8 @@ spec:
|
||||
terminationGracePeriodSeconds: 5
|
||||
containers:
|
||||
- name: node-bugado
|
||||
# IMPORTANTE: Esta linha é atualizada automaticamente pelo GitLab CI
|
||||
image: registry.kube.quest/workshop/node-bugado:latest
|
||||
# IMPORTANTE: Esta linha é atualizada automaticamente pelo Gitea Actions
|
||||
image: gitea.kube.quest/depaula/node-bugado:latest
|
||||
ports:
|
||||
- containerPort: 3000
|
||||
name: http
|
||||
|
||||
@@ -58,7 +58,7 @@ Victoria Metrics oferece **compatibilidade total** com Prometheus, mas com vanta
|
||||
|
||||
- Cluster Kubernetes Hetzner (aula-08)
|
||||
- ArgoCD instalado (aula-11)
|
||||
- GitLab com grupo `factory` (aula-11)
|
||||
- Gitea com org `factory` (aula-11)
|
||||
|
||||
## Estrutura
|
||||
|
||||
@@ -68,7 +68,7 @@ aula-12/
|
||||
├── setup.sh # Instalação automatizada
|
||||
├── cleanup.sh # Remoção via ArgoCD
|
||||
│
|
||||
├── gitops/ # Conteúdo para GitLab
|
||||
├── gitops/ # Conteúdo para Gitea
|
||||
│ └── apps/
|
||||
│ └── victoria-metrics/
|
||||
│ ├── Chart.yaml # Helm chart wrapper
|
||||
@@ -96,7 +96,7 @@ cd aula-12
|
||||
```
|
||||
|
||||
O script:
|
||||
1. Cria projeto `factory/monitoring` no GitLab
|
||||
1. Cria repositório `factory/monitoring` no Gitea
|
||||
2. Faz push dos manifests GitOps
|
||||
3. Cria namespace `monitoring`
|
||||
4. Aplica ArgoCD Application
|
||||
@@ -106,8 +106,8 @@ O script:
|
||||
|
||||
```
|
||||
┌──────────────────┐ push ┌──────────────────┐
|
||||
│ aula-12/ │ ──────────► │ factory/monitoring│
|
||||
│ gitops/ │ │ (GitLab) │
|
||||
│ aula-12/ │ ──────────► │factory/monitoring │
|
||||
│ gitops/ │ │ (Gitea) │
|
||||
└──────────────────┘ └────────┬─────────┘
|
||||
│
|
||||
sync │
|
||||
@@ -494,7 +494,7 @@ vmsingle:
|
||||
O script remove:
|
||||
1. ArgoCD Application
|
||||
2. Namespace `monitoring`
|
||||
3. Projeto GitLab (opcional)
|
||||
3. Repositório Gitea (opcional)
|
||||
|
||||
**Nota**: Dados de métricas serão perdidos!
|
||||
|
||||
|
||||
@@ -19,8 +19,8 @@ spec:
|
||||
project: default
|
||||
|
||||
source:
|
||||
# URL do repositório GitLab (ajustar conforme seu domínio)
|
||||
repoURL: https://git.kube.quest/factory/monitoring.git
|
||||
# URL do repositório Gitea (ajustar conforme seu domínio)
|
||||
repoURL: https://gitea.kube.quest/factory/monitoring.git
|
||||
targetRevision: HEAD
|
||||
path: apps/victoria-metrics
|
||||
|
||||
|
||||
@@ -110,28 +110,24 @@ else
|
||||
fi
|
||||
|
||||
# =============================================================================
|
||||
# REMOVER PROJETO GITLAB (OPCIONAL)
|
||||
# REMOVER REPOSITÓRIO GITEA (OPCIONAL)
|
||||
# =============================================================================
|
||||
|
||||
if [[ -n "$GITLAB_HOST" && -n "$GITLAB_TOKEN" ]]; then
|
||||
if [[ -n "$GITEA_HOST" && -n "$GITEA_TOKEN" ]]; then
|
||||
echo ""
|
||||
read -p "Remover projeto 'factory/monitoring' do GitLab? [y/N]: " REMOVE_PROJECT
|
||||
read -p "Remover repositório 'factory/monitoring' do Gitea? [y/N]: " REMOVE_PROJECT
|
||||
|
||||
if [[ "$REMOVE_PROJECT" == "y" || "$REMOVE_PROJECT" == "Y" ]]; then
|
||||
log_info "Removendo projeto do GitLab..."
|
||||
log_info "Removendo repositório do Gitea..."
|
||||
|
||||
# Obter ID do projeto
|
||||
PROJECT_RESPONSE=$(curl -s --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" \
|
||||
"https://${GITLAB_HOST}/api/v4/projects/factory%2Fmonitoring")
|
||||
DELETE_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" --request DELETE \
|
||||
-H "Authorization: token ${GITEA_TOKEN}" \
|
||||
"https://${GITEA_HOST}/api/v1/repos/factory/monitoring")
|
||||
|
||||
PROJECT_ID=$(echo "$PROJECT_RESPONSE" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2)
|
||||
|
||||
if [[ -n "$PROJECT_ID" ]]; then
|
||||
curl -s --request DELETE --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" \
|
||||
"https://${GITLAB_HOST}/api/v4/projects/${PROJECT_ID}"
|
||||
log_success "Projeto removido do GitLab"
|
||||
if [[ "$DELETE_RESPONSE" == "204" ]]; then
|
||||
log_success "Repositório removido do Gitea"
|
||||
else
|
||||
log_info "Projeto não encontrado no GitLab"
|
||||
log_info "Repositório não encontrado no Gitea (HTTP ${DELETE_RESPONSE})"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
122
aula-12/setup.sh
122
aula-12/setup.sh
@@ -4,7 +4,7 @@
|
||||
# =============================================================================
|
||||
#
|
||||
# Este script instala Victoria Metrics stack usando ArgoCD (GitOps):
|
||||
# 1. Cria projeto 'factory/monitoring' no GitLab
|
||||
# 1. Cria projeto 'factory/monitoring' no Gitea
|
||||
# 2. Push dos manifests GitOps
|
||||
# 3. Cria ArgoCD Application
|
||||
# 4. Victoria Metrics + Grafana são sincronizados automaticamente
|
||||
@@ -12,7 +12,7 @@
|
||||
# Pré-requisitos:
|
||||
# - Cluster Kubernetes (aula-08)
|
||||
# - ArgoCD instalado (aula-11)
|
||||
# - GitLab com grupo 'factory' (aula-10/11)
|
||||
# - Gitea com org 'factory' (aula-10/11)
|
||||
#
|
||||
# =============================================================================
|
||||
|
||||
@@ -117,15 +117,15 @@ echo " Configuração Victoria Metrics (GitOps)"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
|
||||
# GitLab Host
|
||||
if [[ -z "$GITLAB_HOST" ]]; then
|
||||
read -p "Hostname do GitLab (ex: git.kube.quest): " GITLAB_HOST
|
||||
# Gitea Host
|
||||
if [[ -z "$GITEA_HOST" ]]; then
|
||||
read -p "Hostname do Gitea (ex: gitea.kube.quest): " GITEA_HOST
|
||||
fi
|
||||
log_info "GitLab: https://${GITLAB_HOST}"
|
||||
log_info "Gitea: https://${GITEA_HOST}"
|
||||
|
||||
# Extrair domínio base
|
||||
if [[ -z "$DOMAIN" ]]; then
|
||||
DOMAIN=$(echo "$GITLAB_HOST" | sed 's/^[^.]*\.//')
|
||||
DOMAIN=$(echo "$GITEA_HOST" | sed 's/^[^.]*\.//')
|
||||
fi
|
||||
|
||||
# Grafana Host
|
||||
@@ -136,14 +136,14 @@ if [[ -z "$GRAFANA_HOST" ]]; then
|
||||
fi
|
||||
log_info "Grafana: https://${GRAFANA_HOST}"
|
||||
|
||||
# GitLab Token (para criar projeto via API)
|
||||
if [[ -z "$GITLAB_TOKEN" ]]; then
|
||||
# Gitea Token (para criar projeto via API)
|
||||
if [[ -z "$GITEA_TOKEN" ]]; then
|
||||
echo ""
|
||||
echo "Token de acesso GitLab (para criar projeto via API):"
|
||||
echo " 1. Acesse https://${GITLAB_HOST}/-/user_settings/personal_access_tokens"
|
||||
echo " 2. Crie um token com scope 'api'"
|
||||
echo "Token de acesso Gitea (para criar repositório via API):"
|
||||
echo " 1. Acesse https://${GITEA_HOST}/user/settings/applications"
|
||||
echo " 2. Crie um token com permissões de escrita"
|
||||
echo ""
|
||||
read -p "GitLab Token: " GITLAB_TOKEN
|
||||
read -p "Gitea Token: " GITEA_TOKEN
|
||||
fi
|
||||
|
||||
# TLS (herdar da aula-11)
|
||||
@@ -166,72 +166,73 @@ fi
|
||||
cat > "$ENV_FILE" << EOF
|
||||
# Configuração gerada pelo setup.sh
|
||||
# $(date)
|
||||
GITLAB_HOST=${GITLAB_HOST}
|
||||
GITEA_HOST=${GITEA_HOST}
|
||||
GRAFANA_HOST=${GRAFANA_HOST}
|
||||
DOMAIN=${DOMAIN}
|
||||
USE_CLOUDFLARE=${USE_CLOUDFLARE}
|
||||
USE_LETSENCRYPT=${USE_LETSENCRYPT}
|
||||
GITLAB_TOKEN=${GITLAB_TOKEN}
|
||||
GITEA_TOKEN=${GITEA_TOKEN}
|
||||
EOF
|
||||
|
||||
log_success "Configuração salva em ${ENV_FILE}"
|
||||
|
||||
# =============================================================================
|
||||
# CRIAR PROJETO NO GITLAB (VIA API)
|
||||
# CRIAR REPOSITÓRIO NO GITEA (VIA API)
|
||||
# =============================================================================
|
||||
|
||||
echo ""
|
||||
log_info "=== Criando Projeto no GitLab ==="
|
||||
log_info "=== Criando Repositório no Gitea ==="
|
||||
|
||||
# Verificar se grupo factory existe
|
||||
log_info "Verificando grupo 'factory'..."
|
||||
GROUP_RESPONSE=$(curl -s --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" \
|
||||
"https://${GITLAB_HOST}/api/v4/groups?search=factory")
|
||||
# Verificar se org factory existe
|
||||
log_info "Verificando organização 'factory'..."
|
||||
ORG_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" \
|
||||
-H "Authorization: token ${GITEA_TOKEN}" \
|
||||
"https://${GITEA_HOST}/api/v1/orgs/factory")
|
||||
|
||||
GROUP_ID=$(echo "$GROUP_RESPONSE" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2)
|
||||
if [[ "$ORG_RESPONSE" != "200" ]]; then
|
||||
log_info "Criando organização 'factory'..."
|
||||
ORG_CREATE=$(curl -s --request POST \
|
||||
-H "Authorization: token ${GITEA_TOKEN}" \
|
||||
-H "Content-Type: application/json" \
|
||||
--data '{"username": "factory", "visibility": "limited"}' \
|
||||
"https://${GITEA_HOST}/api/v1/orgs")
|
||||
|
||||
if [[ -z "$GROUP_ID" ]]; then
|
||||
log_info "Criando grupo 'factory'..."
|
||||
GROUP_CREATE=$(curl -s --request POST --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" \
|
||||
--header "Content-Type: application/json" \
|
||||
--data '{"name": "factory", "path": "factory", "visibility": "internal"}' \
|
||||
"https://${GITLAB_HOST}/api/v4/groups")
|
||||
GROUP_ID=$(echo "$GROUP_CREATE" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2)
|
||||
ORG_NAME=$(echo "$ORG_CREATE" | grep -o '"username":"factory"' || true)
|
||||
|
||||
if [[ -z "$GROUP_ID" ]]; then
|
||||
log_error "Falha ao criar grupo 'factory'"
|
||||
log_info "Crie manualmente em https://${GITLAB_HOST}/admin/groups/new"
|
||||
if [[ -z "$ORG_NAME" ]]; then
|
||||
log_error "Falha ao criar organização 'factory'"
|
||||
echo "$ORG_CREATE"
|
||||
exit 1
|
||||
fi
|
||||
log_success "Grupo 'factory' criado (ID: ${GROUP_ID})"
|
||||
log_success "Organização 'factory' criada"
|
||||
else
|
||||
log_success "Grupo 'factory' já existe (ID: ${GROUP_ID})"
|
||||
log_success "Organização 'factory' já existe"
|
||||
fi
|
||||
|
||||
# Verificar se projeto monitoring existe
|
||||
log_info "Verificando projeto 'monitoring'..."
|
||||
PROJECT_RESPONSE=$(curl -s --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" \
|
||||
"https://${GITLAB_HOST}/api/v4/projects?search=monitoring")
|
||||
# Verificar se repositório monitoring existe
|
||||
log_info "Verificando repositório 'monitoring'..."
|
||||
REPO_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" \
|
||||
-H "Authorization: token ${GITEA_TOKEN}" \
|
||||
"https://${GITEA_HOST}/api/v1/repos/factory/monitoring")
|
||||
|
||||
PROJECT_EXISTS=$(echo "$PROJECT_RESPONSE" | grep -o '"path_with_namespace":"factory/monitoring"' || true)
|
||||
if [[ "$REPO_RESPONSE" != "200" ]]; then
|
||||
log_info "Criando repositório 'monitoring'..."
|
||||
REPO_CREATE=$(curl -s --request POST \
|
||||
-H "Authorization: token ${GITEA_TOKEN}" \
|
||||
-H "Content-Type: application/json" \
|
||||
--data '{"name": "monitoring", "private": false, "auto_init": false}' \
|
||||
"https://${GITEA_HOST}/api/v1/orgs/factory/repos")
|
||||
|
||||
if [[ -z "$PROJECT_EXISTS" ]]; then
|
||||
log_info "Criando projeto 'monitoring'..."
|
||||
PROJECT_CREATE=$(curl -s --request POST --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" \
|
||||
--header "Content-Type: application/json" \
|
||||
--data "{\"name\": \"monitoring\", \"namespace_id\": ${GROUP_ID}, \"visibility\": \"internal\", \"initialize_with_readme\": false}" \
|
||||
"https://${GITLAB_HOST}/api/v4/projects")
|
||||
REPO_NAME=$(echo "$REPO_CREATE" | grep -o '"name":"monitoring"' || true)
|
||||
|
||||
PROJECT_ID=$(echo "$PROJECT_CREATE" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2)
|
||||
|
||||
if [[ -z "$PROJECT_ID" ]]; then
|
||||
log_error "Falha ao criar projeto 'monitoring'"
|
||||
echo "$PROJECT_CREATE"
|
||||
if [[ -z "$REPO_NAME" ]]; then
|
||||
log_error "Falha ao criar repositório 'monitoring'"
|
||||
echo "$REPO_CREATE"
|
||||
exit 1
|
||||
fi
|
||||
log_success "Projeto 'monitoring' criado (ID: ${PROJECT_ID})"
|
||||
log_success "Repositório 'monitoring' criado"
|
||||
else
|
||||
log_success "Projeto 'monitoring' já existe"
|
||||
log_success "Repositório 'monitoring' já existe"
|
||||
fi
|
||||
|
||||
# =============================================================================
|
||||
@@ -253,7 +254,8 @@ git config --global user.name "ArgoCD Setup" 2>/dev/null || true
|
||||
|
||||
# Clone do repositório (usando token)
|
||||
log_info "Clonando repositório..."
|
||||
GIT_URL="https://oauth2:${GITLAB_TOKEN}@${GITLAB_HOST}/factory/monitoring.git"
|
||||
GITEA_USER=$(curl -s -H "Authorization: token ${GITEA_TOKEN}" "https://${GITEA_HOST}/api/v1/user" | grep -o '"login":"[^"]*"' | cut -d'"' -f4)
|
||||
GIT_URL="https://${GITEA_USER}:${GITEA_TOKEN}@${GITEA_HOST}/factory/monitoring.git"
|
||||
|
||||
if ! git clone "${GIT_URL}" monitoring 2>/dev/null; then
|
||||
# Repositório vazio, inicializar
|
||||
@@ -282,12 +284,12 @@ if git diff --cached --quiet; then
|
||||
log_info "Nenhuma mudança para commit"
|
||||
else
|
||||
git commit -m "feat: Victoria Metrics stack configuration"
|
||||
log_info "Pushing para GitLab..."
|
||||
log_info "Pushing para Gitea..."
|
||||
git push -u origin main 2>/dev/null || git push -u origin master 2>/dev/null || {
|
||||
# Primeiro push em repo vazio
|
||||
git push --set-upstream origin main 2>/dev/null || git push --set-upstream origin master
|
||||
}
|
||||
log_success "Manifests enviados para GitLab"
|
||||
log_success "Manifests enviados para Gitea"
|
||||
fi
|
||||
|
||||
cd "${SCRIPT_DIR}"
|
||||
@@ -321,9 +323,9 @@ metadata:
|
||||
argocd.argoproj.io/secret-type: repository
|
||||
stringData:
|
||||
type: git
|
||||
url: https://${GITLAB_HOST}/factory/monitoring.git
|
||||
username: oauth2
|
||||
password: ${GITLAB_TOKEN}
|
||||
url: https://${GITEA_HOST}/factory/monitoring.git
|
||||
username: ${GITEA_USER}
|
||||
password: ${GITEA_TOKEN}
|
||||
EOF
|
||||
|
||||
log_success "Repositório configurado no ArgoCD"
|
||||
@@ -353,7 +355,7 @@ metadata:
|
||||
spec:
|
||||
project: default
|
||||
source:
|
||||
repoURL: https://${GITLAB_HOST}/factory/monitoring.git
|
||||
repoURL: https://${GITEA_HOST}/factory/monitoring.git
|
||||
targetRevision: HEAD
|
||||
path: apps/victoria-metrics
|
||||
helm:
|
||||
@@ -458,7 +460,7 @@ echo "Pods:"
|
||||
echo " kubectl get pods -n monitoring"
|
||||
echo ""
|
||||
echo "GitOps Repository:"
|
||||
echo " https://${GITLAB_HOST}/factory/monitoring"
|
||||
echo " https://${GITEA_HOST}/factory/monitoring"
|
||||
echo ""
|
||||
echo "Verificar métricas:"
|
||||
echo " kubectl port-forward -n monitoring svc/vmsingle-vm 8429:8429"
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
set -e
|
||||
|
||||
NAMESPACE="benchmark-clean"
|
||||
ESTARGZ_IMAGE="registry.kube.quest/factory/postgresql:17"
|
||||
ESTARGZ_IMAGE="gitea.kube.quest/factory/postgresql:17"
|
||||
TRADITIONAL_IMAGE="postgres:17-alpine"
|
||||
TARGET_NODE="talos-msadg4-worker-0" # Node sem cache
|
||||
|
||||
@@ -39,10 +39,10 @@ echo " Ambiente limpo"
|
||||
# Criar namespace
|
||||
echo "[3/6] Criando namespace de teste..."
|
||||
kubectl create namespace $NAMESPACE
|
||||
kubectl create secret docker-registry gitlab-registry \
|
||||
--docker-server=registry.kube.quest \
|
||||
kubectl create secret docker-registry gitea-registry \
|
||||
--docker-server=gitea.kube.quest \
|
||||
--docker-username=root \
|
||||
--docker-password="${GITLAB_TOKEN:-glpat-dummy}" \
|
||||
--docker-password="${GITEA_TOKEN:-glpat-dummy}" \
|
||||
-n $NAMESPACE 2>/dev/null || true
|
||||
echo " Namespace criado"
|
||||
|
||||
@@ -103,7 +103,7 @@ spec:
|
||||
nodeName: $TARGET_NODE
|
||||
restartPolicy: Never
|
||||
imagePullSecrets:
|
||||
- name: gitlab-registry
|
||||
- name: gitea-registry
|
||||
containers:
|
||||
- name: postgres
|
||||
image: $ESTARGZ_IMAGE
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#
|
||||
# Compara tempo de startup entre:
|
||||
# - postgres:17-alpine (gzip tradicional)
|
||||
# - registry.kube.quest/factory/postgresql:17 (eStargz)
|
||||
# - gitea.kube.quest/factory/postgresql:17 (eStargz)
|
||||
#
|
||||
# Este script usa timestamps dos eventos do Kubernetes para medir:
|
||||
# - Tempo de pull (Pulling -> Pulled)
|
||||
@@ -16,7 +16,7 @@
|
||||
set -e
|
||||
|
||||
NAMESPACE="benchmark-test"
|
||||
ESTARGZ_IMAGE="registry.kube.quest/factory/postgresql:17"
|
||||
ESTARGZ_IMAGE="gitea.kube.quest/factory/postgresql:17"
|
||||
TRADITIONAL_IMAGE="postgres:17-alpine"
|
||||
|
||||
echo "========================================================================"
|
||||
@@ -41,10 +41,10 @@ echo " Ambiente limpo"
|
||||
# Criar namespace
|
||||
echo "[3/6] Criando namespace de teste..."
|
||||
kubectl create namespace $NAMESPACE
|
||||
kubectl create secret docker-registry gitlab-registry \
|
||||
--docker-server=registry.kube.quest \
|
||||
kubectl create secret docker-registry gitea-registry \
|
||||
--docker-server=gitea.kube.quest \
|
||||
--docker-username=root \
|
||||
--docker-password="${GITLAB_TOKEN:-glpat-dummy}" \
|
||||
--docker-password="${GITEA_TOKEN:-glpat-dummy}" \
|
||||
-n $NAMESPACE 2>/dev/null || true
|
||||
echo " Namespace criado"
|
||||
|
||||
@@ -74,7 +74,7 @@ T2_START=$(date +%s)
|
||||
|
||||
kubectl run pg-estargz --image=$ESTARGZ_IMAGE --restart=Never \
|
||||
--env=POSTGRES_PASSWORD=benchmarktest \
|
||||
--overrides='{"spec":{"imagePullSecrets":[{"name":"gitlab-registry"}]}}' \
|
||||
--overrides='{"spec":{"imagePullSecrets":[{"name":"gitea-registry"}]}}' \
|
||||
-n $NAMESPACE 2>&1 | grep -v "Warning:"
|
||||
|
||||
kubectl wait --for=condition=Ready pod/pg-estargz -n $NAMESPACE --timeout=180s
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
set -e
|
||||
|
||||
NAMESPACE="benchmark-pull"
|
||||
ESTARGZ_IMAGE="registry.kube.quest/factory/postgresql:17"
|
||||
ESTARGZ_IMAGE="gitea.kube.quest/factory/postgresql:17"
|
||||
TRADITIONAL_IMAGE="postgres:17-alpine"
|
||||
TARGET_NODE="worker-pool-6bea48339a15ab6e" # Node 128.140.11.113 - sem cache
|
||||
|
||||
@@ -25,10 +25,10 @@ echo ""
|
||||
# Setup
|
||||
kubectl delete namespace $NAMESPACE --ignore-not-found=true --wait=true 2>/dev/null || true
|
||||
kubectl create namespace $NAMESPACE
|
||||
kubectl create secret docker-registry gitlab-registry \
|
||||
--docker-server=registry.kube.quest \
|
||||
kubectl create secret docker-registry gitea-registry \
|
||||
--docker-server=gitea.kube.quest \
|
||||
--docker-username=root \
|
||||
--docker-password="${GITLAB_TOKEN:-glpat-dummy}" \
|
||||
--docker-password="${GITEA_TOKEN:-glpat-dummy}" \
|
||||
-n $NAMESPACE 2>/dev/null || true
|
||||
|
||||
echo ""
|
||||
@@ -85,7 +85,7 @@ spec:
|
||||
nodeName: $TARGET_NODE
|
||||
restartPolicy: Never
|
||||
imagePullSecrets:
|
||||
- name: gitlab-registry
|
||||
- name: gitea-registry
|
||||
containers:
|
||||
- name: postgres
|
||||
image: $ESTARGZ_IMAGE
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
set -e
|
||||
|
||||
NAMESPACE="benchmark-toolbox"
|
||||
REGISTRY="registry.kube.quest"
|
||||
REGISTRY="gitea.kube.quest"
|
||||
IMAGE_NAME="factory/devops-toolbox"
|
||||
|
||||
# Cores
|
||||
@@ -50,7 +50,7 @@ spec:
|
||||
imagePullPolicy: Always
|
||||
restartPolicy: Never
|
||||
imagePullSecrets:
|
||||
- name: gitlab-registry
|
||||
- name: gitea-registry
|
||||
EOF
|
||||
|
||||
# Medir tempo até completar
|
||||
@@ -85,12 +85,12 @@ main() {
|
||||
kubectl create namespace $NAMESPACE 2>/dev/null || true
|
||||
|
||||
# Copiar secret do registry
|
||||
if kubectl get secret gitlab-registry -n gitlab &>/dev/null; then
|
||||
kubectl get secret gitlab-registry -n gitlab -o yaml | \
|
||||
sed "s/namespace: gitlab/namespace: $NAMESPACE/" | \
|
||||
if kubectl get secret gitea-registry -n gitea &>/dev/null; then
|
||||
kubectl get secret gitea-registry -n gitea -o yaml | \
|
||||
sed "s/namespace: gitea/namespace: $NAMESPACE/" | \
|
||||
kubectl apply -f - 2>/dev/null || true
|
||||
else
|
||||
log_warn "Secret gitlab-registry não encontrado. Usando imagens públicas."
|
||||
log_warn "Secret gitea-registry não encontrado. Usando imagens públicas."
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
@@ -9,7 +9,7 @@ stages:
|
||||
- push
|
||||
|
||||
variables:
|
||||
REGISTRY: registry.kube.quest
|
||||
REGISTRY: gitea.kube.quest
|
||||
IMAGE_NAME: factory/devops-toolbox
|
||||
DOCKER_HOST: tcp://docker:2376
|
||||
DOCKER_TLS_CERTDIR: "/certs"
|
||||
|
||||
@@ -2,7 +2,7 @@ stages:
|
||||
- build
|
||||
|
||||
variables:
|
||||
REGISTRY: registry.kube.quest
|
||||
REGISTRY: gitea.kube.quest
|
||||
IMAGE_NAME: factory/large-test
|
||||
|
||||
build:
|
||||
|
||||
@@ -23,7 +23,7 @@ spec:
|
||||
spec:
|
||||
terminationGracePeriodSeconds: 30
|
||||
imagePullSecrets:
|
||||
- name: gitlab-registry
|
||||
- name: gitea-registry
|
||||
|
||||
securityContext:
|
||||
runAsNonRoot: true
|
||||
@@ -35,7 +35,7 @@ spec:
|
||||
containers:
|
||||
- name: postgresql
|
||||
# Imagem da Container Factory (eStargz)
|
||||
image: registry.kube.quest/factory/postgresql:17
|
||||
image: gitea.kube.quest/factory/postgresql:17
|
||||
imagePullPolicy: IfNotPresent
|
||||
|
||||
ports:
|
||||
|
||||
@@ -45,7 +45,7 @@ spec:
|
||||
# PostgreSQL (Container Factory)
|
||||
# ---------------------------------------------------------------------
|
||||
- name: prepull-postgresql
|
||||
image: registry.kube.quest/factory/postgresql:17
|
||||
image: gitea.kube.quest/factory/postgresql:17
|
||||
command: ["echo", "PostgreSQL image cached"]
|
||||
imagePullPolicy: Always
|
||||
resources:
|
||||
@@ -115,7 +115,7 @@ spec:
|
||||
|
||||
# Secrets para registries privados
|
||||
imagePullSecrets:
|
||||
- name: gitlab-registry
|
||||
- name: gitea-registry
|
||||
|
||||
---
|
||||
# =============================================================================
|
||||
@@ -123,9 +123,9 @@ spec:
|
||||
# =============================================================================
|
||||
# Crie este secret em kube-system se usar registry privado:
|
||||
#
|
||||
# kubectl create secret docker-registry gitlab-registry \
|
||||
# kubectl create secret docker-registry gitea-registry \
|
||||
# --namespace=kube-system \
|
||||
# --docker-server=registry.kube.quest \
|
||||
# --docker-server=gitea.kube.quest \
|
||||
# --docker-username=<usuario> \
|
||||
# --docker-password=<token>
|
||||
# =============================================================================
|
||||
|
||||
@@ -48,7 +48,7 @@ Em produção, lançar uma nova versão diretamente para 100% dos usuários é a
|
||||
## Pré-requisitos
|
||||
|
||||
- Cluster Kubernetes na Hetzner (aula-08)
|
||||
- GitLab com Registry (aula-10)
|
||||
- Gitea com Registry (aula-10)
|
||||
- Victoria Metrics (aula-12) para métricas
|
||||
- kubectl, helm e docker instalados
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
#
|
||||
# Mantém:
|
||||
# - Cluster Kubernetes
|
||||
# - GitLab e Registry (aula-10)
|
||||
# - Gitea e Registry (aula-10)
|
||||
# - Outros namespaces
|
||||
# ============================================================================
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
# Pré-requisitos:
|
||||
# - Cluster Kubernetes da aula-08
|
||||
# - Victoria Metrics da aula-12
|
||||
# - GitLab com Registry da aula-10
|
||||
# - Gitea com Registry da aula-10
|
||||
# - kubectl, helm e docker instalados
|
||||
# ============================================================================
|
||||
|
||||
@@ -113,12 +113,12 @@ collect_user_input() {
|
||||
read -p "Enter para confirmar ou digite novo valor: " new_reg
|
||||
[[ -n "$new_reg" ]] && REGISTRY_HOST="$new_reg"
|
||||
|
||||
# Grupo/projeto no GitLab para o registry (ex: root, demo, factory)
|
||||
# Owner/repo no Gitea para o registry (ex: root, demo, factory)
|
||||
if [[ -z "$REGISTRY_PROJECT" ]]; then
|
||||
REGISTRY_PROJECT="root"
|
||||
fi
|
||||
echo ""
|
||||
echo -e "Grupo/projeto no GitLab: ${GREEN}${REGISTRY_PROJECT}${NC}"
|
||||
echo -e "Owner/repo no Gitea: ${GREEN}${REGISTRY_PROJECT}${NC}"
|
||||
echo -e " Imagens: ${CYAN}${REGISTRY_HOST}/${REGISTRY_PROJECT}/app-backend:v1${NC}"
|
||||
echo -e " ${CYAN}${REGISTRY_HOST}/${REGISTRY_PROJECT}/app-backend:v2${NC}"
|
||||
read -p "Grupo/projeto [${REGISTRY_PROJECT}]: " new_project
|
||||
|
||||
Reference in New Issue
Block a user