minio: &minio_config # Image officielle MinIO — multi-arch, arm64 inclus (les nœuds sont des Pi 5). image: repository: quay.io/minio/minio pullPolicy: IfNotPresent # STANDALONE : un seul serveur, un seul volume. La donnée servie ici est # DÉRIVÉE (le master reste chez l'utilisateur) et Longhorn réplique déjà le # volume ; l'erasure coding distribué coûterait de la RAM que les Pi n'ont pas # à dépenser pour ça. `replicas` est ignoré en standalone. mode: standalone replicas: 1 # Le rôle Vault du module `app_roles` borne l'authentification au SERVICE # ACCOUNT nommé comme l'app (`bound_service_account_names = [minio]`) : on # aligne donc le SA du pod sur ce nom, plutôt que le « minio-sa » par défaut # du chart amont — un SA pour le pod, le même pour Vault, rien à réconcilier. serviceAccount: create: true name: minio # Identifiants JAMAIS dans le dépôt : le secret est matérialisé par le # Vault Secrets Operator depuis kvv2/minio/config (voir resources/ et iac/). # Le chart lit `.data.rootUser` et `.data.rootPassword` de ce secret. existingSecret: minio-config persistence: enabled: true storageClass: longhorn accessMode: ReadWriteOnce # 50 Gi ≈ 250 heures de cours au palier « travail » de Kadans (360p, # 3,4 Mo/min — ADR-018 du front). Longhorn réplique ce volume sur les # nœuds : compter ×3 sur la capacité du cluster avant d'augmenter. size: 50Gi # Des Pi 5 à 8 Go partagés avec le reste de `tools` : on borne franchement. # MinIO standalone est frugal ; la limite protège les voisins, pas MinIO. resources: requests: memory: 512Mi cpu: 100m limits: memory: 2Gi # API S3 (les applications parlent ici). ingress: enabled: true ingressClassName: traefik path: / hosts: - s3.arcodange.lab # Console d'administration (humains). consoleIngress: enabled: true ingressClassName: traefik path: / hosts: - minio.arcodange.lab # Buckets créés au déploiement. `versioning: false` assumé : ces objets sont # DÉRIVÉS et re-générables depuis le master local — versionner doublerait le # stockage pour un filet dont on n'a pas besoin. buckets: - name: kadans-videos policy: none # privé : l'accès passe par des URL signées (ADR-0002 du dossier) purge: false versioning: false # Métriques : Prometheus (namespace `tools`) scrape déjà la façade et le # laptop (ADR-0014 du dossier) — MinIO rejoint la même vue. metrics: serviceMonitor: enabled: false # pas d'opérateur Prometheus ici : scrape par annotation environment: MINIO_PROMETHEUS_AUTH_TYPE: "public" # CORS : le navigateur téléverse DIRECTEMENT vers MinIO depuis la PWA (URL # présignées, kadans-api#23) — donc requête inter-origines, donc préflight # OPTIONS. Sans cette liste, le PUT est refusé par le navigateur avant même # de partir. Origines EXACTES, jamais « * » : une URL présignée qui fuite # serait rejouable depuis n'importe quel site. # .fr = la PWA publique (le cas réel, en déplacement comme à la maison) # .lab = la même app servie en interne, pour la mise au point MINIO_API_CORS_ALLOW_ORIGIN: "https://kadans.arcodange.fr,https://kadans.arcodange.lab" tool: # kind: 'SubChart' or 'HelmChart', if subchart then uncomment Chart.yaml dependency, else comment and use tool library with helm chart template kind: 'SubChart' repo: https://charts.min.io/ chart: minio version: 5.4.0 values: *minio_config