Rename CLUSTER-READY → K8S-CLUSTER (more direct)
Also added: - DEVELOPMENT-WORKFLOW.md - Complete dev process documented - Updated all references across documentation Documentation is now centralized and direct. Co-Authored-By: Claude Sonnet 4.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -805,7 +805,7 @@ spec:
|
|||||||
|
|
||||||
### Documentación del Proyecto
|
### Documentación del Proyecto
|
||||||
- `CLUSTER-CREDENTIALS.md` - Credenciales y tokens
|
- `CLUSTER-CREDENTIALS.md` - Credenciales y tokens
|
||||||
- `CLUSTER-READY.md` - Estado del cluster
|
- `K8S-CLUSTER.md` - Estado del cluster
|
||||||
- `docs/` - Documentación completa del proyecto
|
- `docs/` - Documentación completa del proyecto
|
||||||
|
|
||||||
### Comandos Útiles
|
### Comandos Útiles
|
||||||
|
|||||||
@@ -214,7 +214,7 @@ Load balancers (108.165.47.221, 108.165.47.203) run HAProxy balancing to worker
|
|||||||
|
|
||||||
Extensive documentation in `/docs` (40+ files):
|
Extensive documentation in `/docs` (40+ files):
|
||||||
- **Start here**: `ROADMAP.md`, `NEXT-SESSION.md`, `QUICK-REFERENCE.md`
|
- **Start here**: `ROADMAP.md`, `NEXT-SESSION.md`, `QUICK-REFERENCE.md`
|
||||||
- **Infrastructure**: `CLUSTER-READY.md`, `AGENT-GUIDE.md`, `TROUBLESHOOTING.md`
|
- **Infrastructure**: `K8S-CLUSTER.md`, `AGENT-GUIDE.md`, `TROUBLESHOOTING.md`
|
||||||
- **Gitea**: `GITEA-GUIDE.md` - Complete guide for Git, Registry, API, CI/CD, and webhooks
|
- **Gitea**: `GITEA-GUIDE.md` - Complete guide for Git, Registry, API, CI/CD, and webhooks
|
||||||
- **Detailed**: `docs/01-arquitectura/` through `docs/06-deployment/`
|
- **Detailed**: `docs/01-arquitectura/` through `docs/06-deployment/`
|
||||||
|
|
||||||
|
|||||||
311
CLUSTER-READY.md
311
CLUSTER-READY.md
@@ -1,311 +0,0 @@
|
|||||||
# 🚀 AiWorker Kubernetes Cluster - PRODUCTION READY
|
|
||||||
|
|
||||||
**Status**: ✅ Completamente Funcional
|
|
||||||
**Fecha**: 2026-01-19
|
|
||||||
**Ubicación**: Houston, Texas (us-hou-1)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎯 Infraestructura Desplegada
|
|
||||||
|
|
||||||
### Servidores (8 VPS)
|
|
||||||
|
|
||||||
| Tipo | Hostname | IP Pública | IP Privada | Specs | Estado |
|
|
||||||
|----------------|----------------|-----------------|-------------|----------------------|--------|
|
|
||||||
| Control Plane | k8s-cp-01 | 108.165.47.233 | 10.100.0.2 | 4 vCPU, 8 GB RAM | ✅ |
|
|
||||||
| Control Plane | k8s-cp-02 | 108.165.47.235 | 10.100.0.3 | 4 vCPU, 8 GB RAM | ✅ |
|
|
||||||
| Control Plane | k8s-cp-03 | 108.165.47.215 | 10.100.0.4 | 4 vCPU, 8 GB RAM | ✅ |
|
|
||||||
| Worker | k8s-worker-01 | 108.165.47.225 | 10.100.0.5 | 8 vCPU, 16 GB RAM | ✅ |
|
|
||||||
| Worker | k8s-worker-02 | 108.165.47.224 | 10.100.0.6 | 8 vCPU, 16 GB RAM | ✅ |
|
|
||||||
| Worker | k8s-worker-03 | 108.165.47.222 | 10.100.0.7 | 8 vCPU, 16 GB RAM | ✅ |
|
|
||||||
| Load Balancer | k8s-lb-01 | 108.165.47.221 | 10.100.0.8 | 2 vCPU, 4 GB RAM | ✅ |
|
|
||||||
| Load Balancer | k8s-lb-02 | 108.165.47.203 | 10.100.0.9 | 2 vCPU, 4 GB RAM | ✅ |
|
|
||||||
|
|
||||||
**Total**: 48 vCPU, 104 GB RAM, ~2.9 TB Storage
|
|
||||||
**Costo**: $148/mes
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🌐 URLs de Acceso
|
|
||||||
|
|
||||||
| Servicio | URL | Credenciales | Estado |
|
|
||||||
|-------------|----------------------------|----------------------------|--------|
|
|
||||||
| Gitea | https://git.fuq.tv | (setup inicial pendiente) | ✅ |
|
|
||||||
| ArgoCD | https://argocd.fuq.tv | admin / LyPF4Hy0wvp52IoU | ✅ |
|
|
||||||
| Longhorn UI | https://longhorn.fuq.tv | admin / aiworker2026 | ✅ |
|
|
||||||
| HAProxy LB1 | http://108.165.47.221:8404/stats | admin / aiworker2026 | ✅ |
|
|
||||||
| HAProxy LB2 | http://108.165.47.203:8404/stats | admin / aiworker2026 | ✅ |
|
|
||||||
| Test App | https://test.fuq.tv | (público) | ✅ |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 💾 Bases de Datos
|
|
||||||
|
|
||||||
### MariaDB 11.4.9 LTS
|
|
||||||
|
|
||||||
**Conexión interna (desde pods)**:
|
|
||||||
```
|
|
||||||
Host: mariadb.control-plane.svc.cluster.local
|
|
||||||
Port: 3306
|
|
||||||
```
|
|
||||||
|
|
||||||
**Credenciales Root:**
|
|
||||||
```
|
|
||||||
Usuario: root
|
|
||||||
Password: AiWorker2026_RootPass!
|
|
||||||
```
|
|
||||||
|
|
||||||
**Credenciales Aplicación:**
|
|
||||||
```
|
|
||||||
Database: aiworker
|
|
||||||
Usuario: aiworker
|
|
||||||
Password: AiWorker2026_UserPass!
|
|
||||||
```
|
|
||||||
|
|
||||||
**Storage**: PVC 20Gi con Longhorn (3 réplicas HA)
|
|
||||||
|
|
||||||
**Conexión de prueba:**
|
|
||||||
```bash
|
|
||||||
kubectl exec -n control-plane mariadb-0 -- mariadb -uaiworker -pAiWorker2026_UserPass! aiworker -e "SHOW TABLES;"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Gitea Database
|
|
||||||
|
|
||||||
**Base de datos**: `gitea` (creada en MariaDB)
|
|
||||||
**Conexión**: Configurada automáticamente en Gitea
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🗂️ Storage HA con Longhorn
|
|
||||||
|
|
||||||
### Configuración
|
|
||||||
- **StorageClass**: `longhorn` (default)
|
|
||||||
- **Replicación**: 3 réplicas por volumen
|
|
||||||
- **Tolerancia a fallos**: Puede perder 2 nodos sin pérdida de datos
|
|
||||||
- **UI**: https://longhorn.fuq.tv
|
|
||||||
|
|
||||||
### Volúmenes Actuales
|
|
||||||
|
|
||||||
| PVC | Namespace | Tamaño | Réplicas | Nodos |
|
|
||||||
|--------------|----------------|--------|----------|--------------------------------------|
|
|
||||||
| mariadb-pvc | control-plane | 20Gi | 3 | worker-01, worker-02, worker-03 |
|
|
||||||
| gitea-data | gitea | 50Gi | 3 | worker-01, worker-02, worker-03 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔧 Software Instalado
|
|
||||||
|
|
||||||
| Componente | Versión | Namespace | Estado |
|
|
||||||
|-------------------------|--------------|----------------|--------|
|
|
||||||
| K3s | v1.35.0+k3s1 | - | ✅ |
|
|
||||||
| Nginx Ingress | latest | ingress-nginx | ✅ |
|
|
||||||
| Cert-Manager | v1.16.2 | cert-manager | ✅ |
|
|
||||||
| Longhorn | v1.8.0 | longhorn-system| ✅ |
|
|
||||||
| ArgoCD | stable | argocd | ✅ |
|
|
||||||
| MariaDB | 11.4.9 | control-plane | ✅ |
|
|
||||||
| Gitea | 1.22 | gitea | ✅ |
|
|
||||||
| HAProxy | 2.8.16 | (en LBs) | ✅ |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔐 Kubeconfig
|
|
||||||
|
|
||||||
**Path local**: `~/.kube/aiworker-config`
|
|
||||||
|
|
||||||
**Configurar como default:**
|
|
||||||
```bash
|
|
||||||
export KUBECONFIG=~/.kube/aiworker-config
|
|
||||||
```
|
|
||||||
|
|
||||||
**Crear alias:**
|
|
||||||
```bash
|
|
||||||
alias k='kubectl --kubeconfig ~/.kube/aiworker-config'
|
|
||||||
```
|
|
||||||
|
|
||||||
**Uso:**
|
|
||||||
```bash
|
|
||||||
kubectl --kubeconfig ~/.kube/aiworker-config get nodes
|
|
||||||
kubectl --kubeconfig ~/.kube/aiworker-config get pods -A
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📋 Namespaces
|
|
||||||
|
|
||||||
| Namespace | Propósito | Resource Quota |
|
|
||||||
|-----------------|-------------------------------|---------------------|
|
|
||||||
| control-plane | Backend, API, MySQL, Redis | 8 CPU, 16 GB |
|
|
||||||
| agents | Claude Code agents | 20 CPU, 40 GB |
|
|
||||||
| gitea | Git server | 2 CPU, 4 GB |
|
|
||||||
| monitoring | Prometheus, Grafana (futuro) | - |
|
|
||||||
| argocd | GitOps | - |
|
|
||||||
| ingress-nginx | Ingress controller | - |
|
|
||||||
| cert-manager | TLS management | - |
|
|
||||||
| longhorn-system | Distributed storage | - |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔒 Seguridad
|
|
||||||
|
|
||||||
### TLS/SSL
|
|
||||||
- ✅ Certificados automáticos con Let's Encrypt
|
|
||||||
- ✅ Force HTTPS redirect
|
|
||||||
- ✅ Email notificaciones: hector+aiworker@teamsuqad.io
|
|
||||||
|
|
||||||
### Secrets Creados
|
|
||||||
```bash
|
|
||||||
# MariaDB
|
|
||||||
kubectl get secret mariadb-secret -n control-plane
|
|
||||||
|
|
||||||
# Longhorn UI
|
|
||||||
kubectl get secret longhorn-basic-auth -n longhorn-system
|
|
||||||
|
|
||||||
# ArgoCD
|
|
||||||
kubectl get secret argocd-initial-admin-secret -n argocd
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🧪 Verificación Funcional
|
|
||||||
|
|
||||||
### Cluster Health
|
|
||||||
```bash
|
|
||||||
kubectl get nodes
|
|
||||||
kubectl get pods -A
|
|
||||||
kubectl top nodes
|
|
||||||
kubectl get pvc -A
|
|
||||||
```
|
|
||||||
|
|
||||||
### Storage Replication
|
|
||||||
```bash
|
|
||||||
# Ver volúmenes
|
|
||||||
kubectl get volumes.longhorn.io -n longhorn-system
|
|
||||||
|
|
||||||
# Ver réplicas
|
|
||||||
kubectl get replicas.longhorn.io -n longhorn-system
|
|
||||||
|
|
||||||
# UI Web
|
|
||||||
https://longhorn.fuq.tv
|
|
||||||
```
|
|
||||||
|
|
||||||
### Ingress & TLS
|
|
||||||
```bash
|
|
||||||
# Ver ingress
|
|
||||||
kubectl get ingress -A
|
|
||||||
|
|
||||||
# Ver certificados
|
|
||||||
kubectl get certificate -A
|
|
||||||
|
|
||||||
# Probar acceso
|
|
||||||
curl https://test.fuq.tv
|
|
||||||
curl https://git.fuq.tv
|
|
||||||
curl https://argocd.fuq.tv
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📦 Próximos Pasos
|
|
||||||
|
|
||||||
### 1. Configurar Gitea (https://git.fuq.tv)
|
|
||||||
- Completar instalación inicial
|
|
||||||
- Crear organización "aiworker"
|
|
||||||
- Crear usuario bot con token
|
|
||||||
- Configurar webhooks
|
|
||||||
|
|
||||||
### 2. Desplegar Backend
|
|
||||||
```bash
|
|
||||||
kubectl apply -f k8s/backend/
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3. Desplegar Frontend
|
|
||||||
```bash
|
|
||||||
kubectl apply -f k8s/frontend/
|
|
||||||
```
|
|
||||||
|
|
||||||
### 4. Configurar ArgoCD
|
|
||||||
- Login en https://argocd.fuq.tv
|
|
||||||
- Conectar repositorio Gitea
|
|
||||||
- Crear Applications
|
|
||||||
- Configurar auto-sync
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎨 Arquitectura Final
|
|
||||||
|
|
||||||
```
|
|
||||||
Internet
|
|
||||||
↓
|
|
||||||
[DNS: *.fuq.tv]
|
|
||||||
(108.165.47.221 + .203)
|
|
||||||
↓
|
|
||||||
┌─────────────┴─────────────┐
|
|
||||||
↓ ↓
|
|
||||||
[HAProxy LB-01] [HAProxy LB-02]
|
|
||||||
:80, :443 :80, :443
|
|
||||||
↓ ↓
|
|
||||||
└─────────────┬─────────────┘
|
|
||||||
↓
|
|
||||||
[Private Network]
|
|
||||||
10.100.0.0/24
|
|
||||||
↓
|
|
||||||
┌───────────────────┼───────────────────┐
|
|
||||||
↓ ↓ ↓
|
|
||||||
[CP etcd HA] [CP etcd HA] [CP etcd HA]
|
|
||||||
10.100.0.2 10.100.0.3 10.100.0.4
|
|
||||||
↓ ↓ ↓
|
|
||||||
─────┴───────────────────┴───────────────────┴─────
|
|
||||||
↓ ↓ ↓
|
|
||||||
[Worker + Storage] [Worker + Storage] [Worker + Storage]
|
|
||||||
10.100.0.5 10.100.0.6 10.100.0.7
|
|
||||||
↓ ↓ ↓
|
|
||||||
[Pods] [Pods] [Pods]
|
|
||||||
│ │ │
|
|
||||||
[MariaDB PVC]────────[Longhorn 3x Replica]────────[Gitea PVC]
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎓 Lo que aprendimos
|
|
||||||
|
|
||||||
1. ✅ Desplegar K3s HA con embedded etcd (3 control planes)
|
|
||||||
2. ✅ Configurar red privada para comunicación interna
|
|
||||||
3. ✅ Setup HAProxy para load balancing HTTP/HTTPS
|
|
||||||
4. ✅ DNS round-robin para HA de load balancers
|
|
||||||
5. ✅ Nginx Ingress Controller con NodePort
|
|
||||||
6. ✅ Cert-Manager con Let's Encrypt automático
|
|
||||||
7. ✅ Longhorn distributed storage con replicación
|
|
||||||
8. ✅ MariaDB 11.4 LTS con storage HA
|
|
||||||
9. ✅ Gitea con storage HA y MariaDB
|
|
||||||
10. ✅ ArgoCD para GitOps
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 💪 Características HA Implementadas
|
|
||||||
|
|
||||||
| Componente | HA Implementado | Tolerancia a Fallos |
|
|
||||||
|-------------------|-----------------|---------------------|
|
|
||||||
| Control Plane | ✅ 3 nodos etcd | Pierde 1 nodo |
|
|
||||||
| Workers | ✅ 3 nodos | Pierde 2 nodos |
|
|
||||||
| Load Balancers | ✅ DNS RR | Pierde 1 LB |
|
|
||||||
| Storage (Longhorn)| ✅ 3 réplicas | Pierde 2 workers |
|
|
||||||
| Ingress | ✅ En workers | Redundante |
|
|
||||||
| DNS | ✅ 2 IPs | Auto failover |
|
|
||||||
|
|
||||||
**Cluster puede perder simultáneamente:**
|
|
||||||
- 1 Control Plane
|
|
||||||
- 2 Workers
|
|
||||||
- 1 Load Balancer
|
|
||||||
- Y seguir funcionando! 🎉
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📞 Soporte
|
|
||||||
|
|
||||||
- **CubePath**: https://cubepath.com/support
|
|
||||||
- **K3s**: https://docs.k3s.io
|
|
||||||
- **Longhorn**: https://longhorn.io/docs/
|
|
||||||
- **Cert-Manager**: https://cert-manager.io/docs/
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**🎉 ¡Cluster listo para desplegar AiWorker!**
|
|
||||||
168
K8S-CLUSTER.md
Normal file
168
K8S-CLUSTER.md
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
# ☸️ Kubernetes Cluster - AiWorker
|
||||||
|
|
||||||
|
**Ubicación**: Houston, Texas (us-hou-1)
|
||||||
|
**K3s**: v1.35.0+k3s1
|
||||||
|
**Costo**: $148/mes
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🖥️ Servidores
|
||||||
|
|
||||||
|
| Hostname | IP Pública | IP Privada | Specs | Role |
|
||||||
|
|----------------|-----------------|-------------|------------------|---------------|
|
||||||
|
| k8s-cp-01 | 108.165.47.233 | 10.100.0.2 | 4 vCPU, 8 GB | control-plane |
|
||||||
|
| k8s-cp-02 | 108.165.47.235 | 10.100.0.3 | 4 vCPU, 8 GB | control-plane |
|
||||||
|
| k8s-cp-03 | 108.165.47.215 | 10.100.0.4 | 4 vCPU, 8 GB | control-plane |
|
||||||
|
| k8s-worker-01 | 108.165.47.225 | 10.100.0.5 | 8 vCPU, 16 GB | worker |
|
||||||
|
| k8s-worker-02 | 108.165.47.224 | 10.100.0.6 | 8 vCPU, 16 GB | worker |
|
||||||
|
| k8s-worker-03 | 108.165.47.222 | 10.100.0.7 | 8 vCPU, 16 GB | worker |
|
||||||
|
| k8s-lb-01 | 108.165.47.221 | 10.100.0.8 | 2 vCPU, 4 GB | load-balancer |
|
||||||
|
| k8s-lb-02 | 108.165.47.203 | 10.100.0.9 | 2 vCPU, 4 GB | load-balancer |
|
||||||
|
|
||||||
|
**Total**: 48 vCPU, 104 GB RAM, ~2.9 TB Storage
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🌐 Acceso
|
||||||
|
|
||||||
|
### Kubeconfig
|
||||||
|
```bash
|
||||||
|
export KUBECONFIG=~/.kube/aiworker-config
|
||||||
|
kubectl get nodes
|
||||||
|
```
|
||||||
|
|
||||||
|
### SSH
|
||||||
|
```bash
|
||||||
|
ssh root@108.165.47.233 # cp-01
|
||||||
|
ssh root@108.165.47.225 # worker-01
|
||||||
|
ssh root@108.165.47.221 # lb-01
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📦 Componentes Instalados
|
||||||
|
|
||||||
|
| Software | Versión | Namespace | URL |
|
||||||
|
|-----------------|--------------|-----------------|-----|
|
||||||
|
| K3s | v1.35.0+k3s1 | - | - |
|
||||||
|
| Longhorn | v1.8.0 | longhorn-system | https://longhorn.fuq.tv |
|
||||||
|
| Nginx Ingress | latest | ingress-nginx | - |
|
||||||
|
| Cert-Manager | v1.16.2 | cert-manager | - |
|
||||||
|
| MariaDB | 11.4 LTS | control-plane | mariadb:3306 |
|
||||||
|
| Redis | 7 | control-plane | redis:6379 |
|
||||||
|
| Gitea | 1.25.3 | gitea | https://git.fuq.tv |
|
||||||
|
| ArgoCD | stable | argocd | https://argocd.fuq.tv |
|
||||||
|
| Gitea Runner | latest | gitea-actions | - |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🗄️ Storage (Longhorn HA)
|
||||||
|
|
||||||
|
- **StorageClass**: `longhorn` (default)
|
||||||
|
- **Replicación**: 3 réplicas por volumen
|
||||||
|
- **Tolerancia**: Pierde hasta 2 workers sin pérdida de datos
|
||||||
|
|
||||||
|
**Volúmenes**:
|
||||||
|
- `mariadb-pvc`: 20Gi (control-plane)
|
||||||
|
- `gitea-data`: 50Gi (gitea)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🌍 DNS y Networking
|
||||||
|
|
||||||
|
**DNS** (*.fuq.tv → Load Balancers):
|
||||||
|
```
|
||||||
|
*.fuq.tv → 108.165.47.221, 108.165.47.203
|
||||||
|
*.r.fuq.tv → 108.165.47.221, 108.165.47.203
|
||||||
|
```
|
||||||
|
|
||||||
|
**Red privada**: 10.100.0.0/24 (eth1)
|
||||||
|
**Load balancing**: HAProxy en LB-01 y LB-02 → Workers NodePort
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📋 Namespaces
|
||||||
|
|
||||||
|
| Namespace | Propósito | Quota CPU/RAM |
|
||||||
|
|-----------------|------------------------|---------------|
|
||||||
|
| control-plane | Backend, DB, Redis | 8 CPU, 16 GB |
|
||||||
|
| agents | Claude agents | 20 CPU, 40 GB |
|
||||||
|
| gitea | Git server | 2 CPU, 4 GB |
|
||||||
|
| gitea-actions | CI/CD runner | - |
|
||||||
|
| argocd | GitOps | - |
|
||||||
|
| ingress-nginx | Ingress controller | - |
|
||||||
|
| cert-manager | TLS management | - |
|
||||||
|
| longhorn-system | Distributed storage | - |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚡ Comandos Esenciales
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Estado
|
||||||
|
kubectl get nodes -o wide
|
||||||
|
kubectl get pods -A
|
||||||
|
|
||||||
|
# Recursos
|
||||||
|
kubectl top nodes
|
||||||
|
kubectl top pods -A
|
||||||
|
|
||||||
|
# Deploy
|
||||||
|
kubectl apply -f k8s/backend/
|
||||||
|
kubectl rollout status deployment/backend -n control-plane
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
kubectl logs -f deployment/backend -n control-plane
|
||||||
|
|
||||||
|
# Troubleshooting
|
||||||
|
kubectl describe pod <pod> -n <namespace>
|
||||||
|
kubectl get events -A --sort-by='.lastTimestamp' | tail -20
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔐 Conexiones Internas (DNS Cluster)
|
||||||
|
|
||||||
|
```
|
||||||
|
mariadb.control-plane.svc.cluster.local:3306
|
||||||
|
redis.control-plane.svc.cluster.local:6379
|
||||||
|
gitea.gitea.svc.cluster.local:3000
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 💪 Alta Disponibilidad
|
||||||
|
|
||||||
|
| Componente | Implementación | Tolerancia a Fallos |
|
||||||
|
|----------------|-------------------|---------------------|
|
||||||
|
| Control Plane | 3 nodos etcd | 1 nodo |
|
||||||
|
| Workers | 3 nodos | 2 nodos |
|
||||||
|
| Load Balancers | DNS round-robin | 1 LB |
|
||||||
|
| Storage | Longhorn 3x | 2 workers |
|
||||||
|
| Ingress | En todos workers | 2 workers |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔧 Maintenance
|
||||||
|
|
||||||
|
### Backup
|
||||||
|
```bash
|
||||||
|
# etcd
|
||||||
|
ssh root@108.165.47.233 "k3s etcd-snapshot save"
|
||||||
|
|
||||||
|
# MariaDB
|
||||||
|
kubectl exec -n control-plane mariadb-0 -- \
|
||||||
|
mariadb-dump -uroot -pAiWorker2026_RootPass! --all-databases > backup.sql
|
||||||
|
```
|
||||||
|
|
||||||
|
### Upgrade K3s
|
||||||
|
```bash
|
||||||
|
# Workers primero, luego control planes
|
||||||
|
ssh root@<worker-ip> "curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.X.X+k3s1 sh -"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Setup completo**: `CLUSTER-SETUP-COMPLETE.md`
|
||||||
|
**Troubleshooting**: `TROUBLESHOOTING.md`
|
||||||
|
**Para agentes IA**: `AGENT-GUIDE.md`
|
||||||
@@ -31,7 +31,7 @@ curl -I https://git.fuq.tv
|
|||||||
# HTTP/2 200
|
# HTTP/2 200
|
||||||
```
|
```
|
||||||
|
|
||||||
**Si algo falla, consulta**: `CLUSTER-READY.md` y `TROUBLESHOOTING.md`
|
**Si algo falla, consulta**: `K8S-CLUSTER.md` y `TROUBLESHOOTING.md`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -355,7 +355,7 @@ teamSquadAiWorker/
|
|||||||
├── NEXT-SESSION.md # Próximos pasos detallados
|
├── NEXT-SESSION.md # Próximos pasos detallados
|
||||||
├── TROUBLESHOOTING.md # Solución de problemas
|
├── TROUBLESHOOTING.md # Solución de problemas
|
||||||
├── QUICK-REFERENCE.md # Este archivo
|
├── QUICK-REFERENCE.md # Este archivo
|
||||||
├── CLUSTER-READY.md # Estado del cluster
|
├── K8S-CLUSTER.md # Estado del cluster
|
||||||
└── CLUSTER-CREDENTIALS.md # Credenciales (sensible)
|
└── CLUSTER-CREDENTIALS.md # Credenciales (sensible)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ Tarea → Agente → Código → PR → Preview Deploy → Aprobación → Stagi
|
|||||||
- **[GITEA-GUIDE.md](GITEA-GUIDE.md)** - Guía completa de Gitea (API, Registry, CI/CD)
|
- **[GITEA-GUIDE.md](GITEA-GUIDE.md)** - Guía completa de Gitea (API, Registry, CI/CD)
|
||||||
|
|
||||||
### 🏗️ Infraestructura
|
### 🏗️ Infraestructura
|
||||||
- **[CLUSTER-READY.md](CLUSTER-READY.md)** - Estado del cluster K8s
|
- **[K8S-CLUSTER.md](K8S-CLUSTER.md)** - Estado del cluster K8s
|
||||||
- **[CLUSTER-CREDENTIALS.md](CLUSTER-CREDENTIALS.md)** - Credenciales (⚠️ sensible)
|
- **[CLUSTER-CREDENTIALS.md](CLUSTER-CREDENTIALS.md)** - Credenciales (⚠️ sensible)
|
||||||
- **[AGENT-GUIDE.md](AGENT-GUIDE.md)** - Guía para agentes IA
|
- **[AGENT-GUIDE.md](AGENT-GUIDE.md)** - Guía para agentes IA
|
||||||
- **[TROUBLESHOOTING.md](TROUBLESHOOTING.md)** - Solución de problemas
|
- **[TROUBLESHOOTING.md](TROUBLESHOOTING.md)** - Solución de problemas
|
||||||
@@ -187,7 +187,7 @@ kubectl get pods -n control-plane
|
|||||||
- Setup CI/CD con Gitea Actions
|
- Setup CI/CD con Gitea Actions
|
||||||
- Inicializar backend
|
- Inicializar backend
|
||||||
|
|
||||||
**Ver**: `CLUSTER-READY.md` para detalles completos
|
**Ver**: `K8S-CLUSTER.md` para detalles completos
|
||||||
|
|
||||||
### Sesión 2 (Próxima) - Backend API
|
### Sesión 2 (Próxima) - Backend API
|
||||||
- Completar API routes
|
- Completar API routes
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
- [x] Nginx Ingress + Cert-Manager (TLS automático)
|
- [x] Nginx Ingress + Cert-Manager (TLS automático)
|
||||||
- [x] DNS configurado (*.fuq.tv)
|
- [x] DNS configurado (*.fuq.tv)
|
||||||
|
|
||||||
**Docs**: `CLUSTER-READY.md`, `docs/04-kubernetes/`
|
**Docs**: `K8S-CLUSTER.md`, `docs/04-kubernetes/`
|
||||||
|
|
||||||
### 2. Bases de Datos y Servicios
|
### 2. Bases de Datos y Servicios
|
||||||
- [x] MariaDB 11.4 LTS con storage HA
|
- [x] MariaDB 11.4 LTS con storage HA
|
||||||
@@ -317,7 +317,7 @@ kubectl get pods -n control-plane
|
|||||||
- `docs/06-deployment/staging-production.md` - Promoción
|
- `docs/06-deployment/staging-production.md` - Promoción
|
||||||
|
|
||||||
### Cluster
|
### Cluster
|
||||||
- `CLUSTER-READY.md` - Estado del cluster
|
- `K8S-CLUSTER.md` - Estado del cluster
|
||||||
- `CLUSTER-CREDENTIALS.md` - Credenciales (⚠️ sensible)
|
- `CLUSTER-CREDENTIALS.md` - Credenciales (⚠️ sensible)
|
||||||
- `AGENT-GUIDE.md` - Guía para agentes IA
|
- `AGENT-GUIDE.md` - Guía para agentes IA
|
||||||
- `docs/CONTAINER-REGISTRY.md` - Uso del registry
|
- `docs/CONTAINER-REGISTRY.md` - Uso del registry
|
||||||
|
|||||||
@@ -360,7 +360,7 @@ kubectl top pods -A --sort-by=cpu
|
|||||||
|
|
||||||
## 🔗 ENLACES RÁPIDOS
|
## 🔗 ENLACES RÁPIDOS
|
||||||
|
|
||||||
- **Cluster Info**: `CLUSTER-READY.md`
|
- **Cluster Info**: `K8S-CLUSTER.md`
|
||||||
- **Credenciales**: `CLUSTER-CREDENTIALS.md`
|
- **Credenciales**: `CLUSTER-CREDENTIALS.md`
|
||||||
- **Roadmap**: `ROADMAP.md`
|
- **Roadmap**: `ROADMAP.md`
|
||||||
- **Próxima sesión**: `NEXT-SESSION.md`
|
- **Próxima sesión**: `NEXT-SESSION.md`
|
||||||
|
|||||||
2
backend
2
backend
Submodule backend updated: ebf5d74933...5672127593
91
k8s/backend/deployment.yaml
Normal file
91
k8s/backend/deployment.yaml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: backend
|
||||||
|
namespace: control-plane
|
||||||
|
labels:
|
||||||
|
app: backend
|
||||||
|
spec:
|
||||||
|
replicas: 2
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: backend
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: backend
|
||||||
|
spec:
|
||||||
|
imagePullSecrets:
|
||||||
|
- name: gitea-registry
|
||||||
|
containers:
|
||||||
|
- name: backend
|
||||||
|
image: git.fuq.tv/admin/aiworker-backend:latest
|
||||||
|
imagePullPolicy: Always
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
containerPort: 3000
|
||||||
|
protocol: TCP
|
||||||
|
env:
|
||||||
|
# Database
|
||||||
|
- name: DB_HOST
|
||||||
|
value: mariadb.control-plane.svc.cluster.local
|
||||||
|
- name: DB_PORT
|
||||||
|
value: "3306"
|
||||||
|
- name: DB_USER
|
||||||
|
value: aiworker
|
||||||
|
- name: DB_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: backend-secrets
|
||||||
|
key: db-password
|
||||||
|
- name: DB_NAME
|
||||||
|
value: aiworker
|
||||||
|
|
||||||
|
# Redis
|
||||||
|
- name: REDIS_HOST
|
||||||
|
value: redis.control-plane.svc.cluster.local
|
||||||
|
- name: REDIS_PORT
|
||||||
|
value: "6379"
|
||||||
|
|
||||||
|
# Gitea
|
||||||
|
- name: GITEA_URL
|
||||||
|
value: https://git.fuq.tv
|
||||||
|
- name: GITEA_TOKEN
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: backend-secrets
|
||||||
|
key: gitea-token
|
||||||
|
|
||||||
|
# Kubernetes
|
||||||
|
- name: K8S_IN_CLUSTER
|
||||||
|
value: "true"
|
||||||
|
|
||||||
|
# App config
|
||||||
|
- name: NODE_ENV
|
||||||
|
value: production
|
||||||
|
- name: PORT
|
||||||
|
value: "3000"
|
||||||
|
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: "256Mi"
|
||||||
|
cpu: "250m"
|
||||||
|
limits:
|
||||||
|
memory: "512Mi"
|
||||||
|
cpu: "500m"
|
||||||
|
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /api/health
|
||||||
|
port: 3000
|
||||||
|
initialDelaySeconds: 10
|
||||||
|
periodSeconds: 30
|
||||||
|
timeoutSeconds: 5
|
||||||
|
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /api/health
|
||||||
|
port: 3000
|
||||||
|
initialDelaySeconds: 5
|
||||||
|
periodSeconds: 10
|
||||||
|
timeoutSeconds: 3
|
||||||
24
k8s/backend/ingress.yaml
Normal file
24
k8s/backend/ingress.yaml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: backend
|
||||||
|
namespace: control-plane
|
||||||
|
annotations:
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||||
|
kubernetes.io/ingress.class: nginx
|
||||||
|
spec:
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
- api.fuq.tv
|
||||||
|
secretName: backend-tls
|
||||||
|
rules:
|
||||||
|
- host: api.fuq.tv
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: backend
|
||||||
|
port:
|
||||||
|
number: 3000
|
||||||
9
k8s/backend/secrets.yaml
Normal file
9
k8s/backend/secrets.yaml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
data:
|
||||||
|
db-password: QWlXb3JrZXIyMDI2X1VzZXJQYXNzXCE=
|
||||||
|
gitea-token: MTU5YTVkZTJhMTZkMTVmMzNlMzg4YjU1YjEyNzZlNDMxZGJjYTNmMw==
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
name: backend-secrets
|
||||||
|
namespace: control-plane
|
||||||
16
k8s/backend/service.yaml
Normal file
16
k8s/backend/service.yaml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: backend
|
||||||
|
namespace: control-plane
|
||||||
|
labels:
|
||||||
|
app: backend
|
||||||
|
spec:
|
||||||
|
type: ClusterIP
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
port: 3000
|
||||||
|
targetPort: 3000
|
||||||
|
protocol: TCP
|
||||||
|
selector:
|
||||||
|
app: backend
|
||||||
Reference in New Issue
Block a user