Ejemplo Final: Aplicación Citas
Resumen
Despliegue end-to-end de aplicación real: Citas (microservicios). Incluye citas-backend (Python), citas-frontend (Node.js), base de datos MySQL, y actualización de versiones.
Arquitectura de la Aplicación
Cliente HTTP
↓
Route citas.example.com
↓
Service citas-frontend
↓
Deployment frontend (Node.js)
├─ Route citas-api.example.com
├─ Service citas-backend
│ ├─ Deployment backend-v1 (Python)
│ └─ Deployment backend-v2 (Python actualizado)
│
└─ Comunicación interna
↓
Service mysql
↓
Deployment mysql
├─ ConfigMap (database, usuario)
├─ Secret (passwords)
└─ PVC (almacenamiento)
Componentes
Backend (citas-backend)
- Lenguaje: Python
- Propósito: API REST que maneja citas
- Endpoints: GET /citas, POST /citas, etc.
- Acceso DB: Variable envvironment para host MySQL
- Versiones: v1 y v2 (ejemplo de actualización)
Frontend (citas-frontend)
- Lenguaje: Node.js
- Propósito: Interfaz web, llama a backend API
- Comunicación: HTTP REST a backend
- Ruta: Acceso público vía Route
Base de Datos (MySQL)
- Propósito: Almacenar citas
- Almacenamiento: PVC persistente
- Acceso: Internal Service DNS
- Configuración: ConfigMap + Secrets
Despliegue Paso a Paso
1. Crear proyecto
oc new-project citas2. Desplegar MySQL
oc new-app mysql:5.7 \
-e MYSQL_DATABASE=citas \
-e MYSQL_USER=citas \
-e MYSQL_PASSWORD=secret123 \
-e MYSQL_ROOT_PASSWORD=rootsecret3. Desplegar Backend
oc new-app python:3.9~https://github.com/user/citas-backend \
--name=citas-backend \
-e DATABASE_HOST=mysql \
-e DATABASE_USER=citas \
-e DATABASE_PASSWORD=secret1234. Desplegar Frontend
oc new-app node:14~https://github.com/user/citas-frontend \
--name=citas-frontend \
-e BACKEND_URL=http://citas-backend:50005. Exponer aplicación
oc expose service citas-frontend \
--hostname=citas.example.comActualización: Backend v1 → v2
Trigger automático (si usa Git)
Git push → Webhook → BuildConfig
↓
Nuevo build → Nueva ImageStream
↓
Deployment trigger
↓
Rolling update automático
Manual
# Cambiar imagen en Deployment
oc set image deployment/citas-backend \
citas-backend=myrepo/citas-backend:v2 \
--record
# Ver progreso
oc rollout status deployment/citas-backend
# Si falla, rollback
oc rollout undo deployment/citas-backendEscalado y Acceso
Escalar Frontend
oc scale deployment citas-frontend --replicas=3Ver estado
oc get deployments
oc get pods
oc logs -f deployment/citas-backendAcceso a URLs
Frontend: https://citas.example.com
Backend (interno): http://citas-backend:5000
MySQL (interno): mysql:3306
Lecciones del Ejemplo
- Microservicios: Frontend y backend independientes
- Comunicación interna: Nombres DNS (service.namespace.svc)
- Almacenamiento: MySQL requiere PVC
- Actualizaciones: Rolling updates sin downtime
- Configuración: ConfigMap + Secrets
- Acceso público: Routes para clientes externos
Relaciones
Conecta con
- Aplicación de: Deployment, Service, Route
- Usa: ConfigMap, Secret, Volume
- Ejemplo de: Arquitectura microservicios real