openova/platform/minio
talent-mesh c9d04a53b4 refactor: flatten platform/ structure (41 components)
Remove hierarchical grouping (networking/, security/, etc.) and use flat
structure for all 41 platform components.

Changes:
- All components now directly under platform/ (no subfolders)
- AI Hub components moved from meta-platforms/ai-hub/components/ to platform/
- Open Banking components (lago, openmeter) moved to platform/
- meta-platforms/ now only contains README files that reference platform/
- Open Banking custom services remain in meta-platforms/open-banking/services/

Structure:
- platform/ (41 components, flat)
- meta-platforms/ai-hub/ (README only, references platform/)
- meta-platforms/open-banking/ (README + 6 custom services)

All documentation links updated.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-08 15:19:48 +00:00
..
README.md refactor: flatten platform/ structure (41 components) 2026-02-08 15:19:48 +00:00

MinIO

S3-compatible object storage for OpenOva platform.

Status: Accepted | Updated: 2026-01-17


Overview

MinIO provides S3-compatible object storage with:

  • Tiered storage (hot/warm/cold)
  • Cross-region replication
  • Lifecycle policies
  • Integration with all platform components

Architecture

flowchart TB
    subgraph MinIO["MinIO"]
        API[S3 API]
        ILM[Lifecycle Manager]
    end

    subgraph Storage["Storage Tiers"]
        Hot[Hot: Local NVMe]
        Warm[Warm: MinIO]
        Cold[Cold: Cloudflare R2]
    end

    subgraph Consumers["Consumers"]
        Loki[Loki]
        Velero[Velero]
        CNPG[CNPG WAL]
        Harbor[Harbor]
    end

    Consumers --> API
    API --> Hot
    ILM --> Warm
    ILM --> Cold

Tiered Storage Strategy

Tier Duration Storage Cost
Hot 0-7 days Local NVMe $
Warm 7-30 days MinIO
Cold 30d+ Cloudflare R2 $

Cloudflare R2 provides zero egress costs for archival storage.


Configuration

MinIO Deployment

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: minio
  namespace: storage
spec:
  replicas: 4
  template:
    spec:
      containers:
        - name: minio
          image: minio/minio:RELEASE.2024-01-01
          args:
            - server
            - /data
            - --console-address
            - ":9001"
          env:
            - name: MINIO_ROOT_USER
              valueFrom:
                secretKeyRef:
                  name: minio-credentials
                  key: access-key
            - name: MINIO_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: minio-credentials
                  key: secret-key
          volumeMounts:
            - name: data
              mountPath: /data

Lifecycle Policy

{
  "Rules": [
    {
      "ID": "TierToR2",
      "Status": "Enabled",
      "Filter": {
        "Prefix": "logs/"
      },
      "Transition": {
        "Days": 30,
        "StorageClass": "GLACIER"
      }
    },
    {
      "ID": "ExpireOldLogs",
      "Status": "Enabled",
      "Filter": {
        "Prefix": "logs/"
      },
      "Expiration": {
        "Days": 365
      }
    }
  ]
}

R2 Tiering Configuration

# mc admin tier add command
mc admin tier add minio r2-tier \
  --endpoint https://<account>.r2.cloudflarestorage.com \
  --access-key ${R2_ACCESS_KEY} \
  --secret-key ${R2_SECRET_KEY} \
  --bucket openova-archive \
  --region auto

Buckets

Bucket Purpose Lifecycle
loki-data Log storage Tier after 30d
tempo-data Trace storage Tier after 30d
velero-backups K8s backups Keep 90d
cnpg-wal PostgreSQL WAL Keep 7d
harbor-data Container images No expiry
ai-hub-models LLM model weights No expiry

Multi-Region Replication

flowchart LR
    subgraph Region1["Region 1"]
        M1[MinIO 1]
    end

    subgraph Region2["Region 2"]
        M2[MinIO 2]
    end

    subgraph Archive["Archive"]
        R2[Cloudflare R2]
    end

    M1 -->|"Replicate"| M2
    M1 -->|"Tier"| R2
    M2 -->|"Tier"| R2

Monitoring

Metric Description
minio_bucket_usage_total_bytes Bucket size
minio_s3_requests_total S3 request count
minio_s3_requests_errors_total S3 errors
minio_node_disk_used_bytes Disk usage

Part of OpenOva