graph TB
%% Host Machine
subgraph "Host Machine (macOS)"
HOST[("Host Machine
macOS Sonoma")]
PODMAN[("Podman
Container Runtime")]
HOSTDIRS[("Host Directories
~/k8s-data/dev/
• minio
• redis
• logs
• prometheus
• grafana
• certs")]
end
%% Kind Cluster
subgraph "Kind Cluster (eveai-dev-cluster)"
%% Control Plane
CONTROL[("Control Plane Node
Port Mappings:
• 80:30080
• 443:30443
• 3080:30080")]
%% Ingress Controller
subgraph "ingress-nginx namespace"
INGRESS[("NGINX Ingress Controller
Handles routing to services")]
end
%% EveAI Dev Namespace
subgraph "eveai-dev namespace"
%% Web Services
subgraph "Web Services"
APP[("EveAI App
Port: 5001
NodePort: 30001")]
API[("EveAI API
Port: 5003
NodePort: 30003")]
CHAT[("EveAI Chat Client
Port: 5004
NodePort: 30004")]
STATIC[("Static Files Service
NGINX
Port: 80")]
end
%% Background Services
subgraph "Background Workers"
WORKERS[("EveAI Workers
Replicas: 2
Celery Workers")]
CHATWORKERS[("EveAI Chat Workers
Replicas: 2
Celery Workers")]
BEAT[("EveAI Beat
Celery Scheduler
Replicas: 1")]
ENTITLE[("EveAI Entitlements
Port: 8000")]
end
%% Infrastructure Services
subgraph "Infrastructure Services"
REDIS[("Redis
Port: 6379
NodePort: 30379")]
MINIO[("MinIO
Port: 9000
Console: 9001
NodePort: 30900")]
end
%% Monitoring Services
subgraph "Monitoring Stack"
PROM[("Prometheus
Port: 9090")]
GRAFANA[("Grafana
Port: 3000")]
NGINX_EXPORTER[("NGINX Prometheus Exporter
Port: 9113")]
end
%% Storage
subgraph "Persistent Storage"
PV_REDIS[("Redis PV
5Gi Local")]
PV_MINIO[("MinIO PV
20Gi Local")]
PV_LOGS[("App Logs PV
5Gi Local")]
PV_PROM[("Prometheus PV
10Gi Local")]
PV_GRAFANA[("Grafana PV
5Gi Local")]
end
%% Configuration
subgraph "Configuration"
CONFIGMAP[("eveai-config
ConfigMap")]
SECRETS[("eveai-secrets
Secret")]
end
end
end
%% External Registry
REGISTRY[("Container Registry
registry.ask-eve-ai-local.com
josakola/eveai_*")]
%% Connections
HOST --> PODMAN
PODMAN --> CONTROL
HOSTDIRS --> PV_REDIS
HOSTDIRS --> PV_MINIO
HOSTDIRS --> PV_LOGS
HOSTDIRS --> PV_PROM
HOSTDIRS --> PV_GRAFANA
%% Service connections
CONTROL --> INGRESS
INGRESS --> APP
INGRESS --> API
INGRESS --> CHAT
INGRESS --> STATIC
%% Worker connections to Redis
WORKERS --> REDIS
CHATWORKERS --> REDIS
BEAT --> REDIS
%% All services connect to storage
APP --> PV_LOGS
API --> PV_LOGS
CHAT --> PV_LOGS
WORKERS --> PV_LOGS
CHATWORKERS --> PV_LOGS
BEAT --> PV_LOGS
ENTITLE --> PV_LOGS
%% Infrastructure storage
REDIS --> PV_REDIS
MINIO --> PV_MINIO
PROM --> PV_PROM
GRAFANA --> PV_GRAFANA
%% Configuration connections
CONFIGMAP --> APP
CONFIGMAP --> API
CONFIGMAP --> CHAT
CONFIGMAP --> WORKERS
CONFIGMAP --> CHATWORKERS
CONFIGMAP --> BEAT
CONFIGMAP --> ENTITLE
SECRETS --> APP
SECRETS --> API
SECRETS --> CHAT
SECRETS --> WORKERS
SECRETS --> CHATWORKERS
SECRETS --> BEAT
SECRETS --> ENTITLE
%% Registry connections
REGISTRY --> APP
REGISTRY --> API
REGISTRY --> CHAT
REGISTRY --> WORKERS
REGISTRY --> CHATWORKERS
REGISTRY --> BEAT
REGISTRY --> ENTITLE
%% Monitoring connections
PROM --> APP
PROM --> API
PROM --> CHAT
PROM --> REDIS
PROM --> MINIO
PROM --> NGINX_EXPORTER
GRAFANA --> PROM
%% External Access
subgraph "External Access"
ACCESS[("http://minty.ask-eve-ai-local.com:3080
• /admin/ → App
• /api/ → API
• /chat-client/ → Chat
• /static/ → Static Files")]
end
ACCESS --> INGRESS
%% Styling
classDef webService fill:#e1f5fe,stroke:#01579b,stroke-width:2px
classDef infrastructure fill:#f3e5f5,stroke:#4a148c,stroke-width:2px
classDef storage fill:#e8f5e8,stroke:#1b5e20,stroke-width:2px
classDef monitoring fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef config fill:#fce4ec,stroke:#880e4f,stroke-width:2px
classDef external fill:#f1f8e9,stroke:#33691e,stroke-width:2px
class APP,API,CHAT,STATIC webService
class REDIS,MINIO,WORKERS,CHATWORKERS,BEAT,ENTITLE infrastructure
class PV_REDIS,PV_MINIO,PV_LOGS,PV_PROM,PV_GRAFANA,HOSTDIRS storage
class PROM,GRAFANA,NGINX_EXPORTER monitoring
class CONFIGMAP,SECRETS config
class REGISTRY,ACCESS external