Files
tools/minio/values.yaml
T
arcodangeandClaude Opus 5 0e1b6e1062
Helm Charts / Detect changed charts (pull_request) Successful in 17s
Helm Charts / Detect changed charts (push) Successful in 16s
MinIO / Auth with gitea for vault (pull_request) Failing after 8m32s
MinIO / Tofu - minio IAC (pull_request) Has been skipped
Hashicorp Vault / Auth with gitea for vault (pull_request) Failing after 8m32s
Hashicorp Vault / Tofu - Vault IAC (pull_request) Has been skipped
Helm Charts / Application charts pgcat (push) Has been cancelled
Helm Charts / Library charts tool (push) Has been cancelled
MinIO / Tofu - minio IAC (push) Has been cancelled
MinIO / Auth with gitea for vault (push) Has started running
Helm Charts / Library charts tool (pull_request) Has been skipped
Helm Charts / Application charts pgcat (pull_request) Has been skipped
refactor(minio) — lever la restriction « un seul bucket par app »
« Pourquoi sommes-nous restreints sur les buckets ? » (fondateur, 26/07) — parce
que JE l'avais décidé, pour rendre tout dérivable d'un seul nom. Rien ne
l'imposait, et la restriction aurait mordu au pas suivant : l'ADR-018 de Kadans
prévoit DEUX paliers de transfert (aperçu 240p régénérable, travail 360p à
garder), donc deux cycles de vie, donc potentiellement deux buckets aux
politiques de purge différentes.

Chaque bucket déclare désormais son app (`app: kadans`). C'est toujours la SEULE
déclaration, au même endroit — mais le nom du bucket redevient libre, et
`kadans-videos` retrouve un nom qui dit ce qu'il contient.

Le compte de service devient par APP et non par bucket : une seule clé, autorisée
sur tous ses buckets et eux seuls. Ajouter un bucket à une app existante ne crée
donc aucune nouvelle clé — le compte existant gagne l'accès. Le secret porte
`MINIO_BUCKETS` (tous) en plus de `MINIO_BUCKET` (le premier), pour que l'app
n'ait pas à les redéclarer de son côté.

Un bucket sans `app:` est ignoré plutôt que de faire échouer le plan : il n'aura
simplement pas de compte de service, ce qui se voit immédiatement et ne casse
rien d'existant.

Vérifié sur le VRAI fichier, pas en théorie : le groupement rend bien
{"kadans" = ["kadans-videos"]}, et avec un second bucket de la même app,
{"kadans" = ["kadans-videos", "kadans-apercus"]} — le cas ADR-018 exact.
tofu fmt propre, tofu validate réussi.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_01CoafGWmRVESaWX819USUUA
2026-07-26 09:46:32 +02:00

103 lines
4.2 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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.
# Chaque bucket dit À QUELLE APP il appartient (`app:`) — et c'est la SEULE
# déclaration à faire : `iac/consumers.tf` lit ce fichier, groupe les buckets
# par app, et provisionne UN compte de service par app, autorisé sur tous SES
# buckets. Ses clés atterrissent dans `kvv2/minio/<app>`, que le module Vault
# central autorise déjà l'app à lire.
#
# Une app peut donc avoir PLUSIEURS buckets, aux cycles de vie différents —
# l'ADR-018 de Kadans prévoit déjà deux paliers (aperçu 240p régénérable,
# travail 360p à garder), qui n'ont pas la même politique de purge.
buckets:
- name: kadans-videos
app: kadans
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