Helm Charts / Detect changed charts (push) Successful in 14s
Helm Charts / Detect changed charts (pull_request) Successful in 14s
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 been cancelled
MinIO / Auth with gitea for vault (pull_request) Failing after 8m31s
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 / Library charts tool (pull_request) Has been skipped
Helm Charts / Application charts pgcat (pull_request) Has been skipped
« Je ne vois pas le mal à donner la permission de lire sur un chemin qui n'existe pas. Je préfère ne pas m'embêter avec consumers ou autre. » (fondateur, 26/07) `var.consumers` disparaît. Le plan LIT `values.yaml` du chart — le même fichier qu'Helm consomme — et provisionne un compte de service par bucket. Créer un bucket EST la déclaration : il devient impossible d'avoir un bucket sans son compte, ou un compte sans son bucket. Une liste de plus aurait été une liste à tenir synchronisée, donc une liste à oublier. La convention qui rend ça possible : UN BUCKET PAR APP, NOMMÉ COMME ELLE. Le bucket passe donc de `kadans-videos` à `kadans`. Il est VIDE aujourd'hui — le renommer maintenant ne coûte rien ; dans un mois ce serait une migration. Tout en découle sans être écrit ailleurs : le compte `<app>-app` borné à ce seul bucket, le secret `kvv2/minio/<app>`, et la lecture que `app_policy` accorde déjà à toute app sur `kvv2/data/minio/<son nom>`. Vérifié plutôt que supposé : `yamldecode` lit bien ce values.yaml, ancres YAML comprises (testé en isolation avant d'écrire le plan). 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
97 lines
3.9 KiB
YAML
97 lines
3.9 KiB
YAML
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.
|
||
# ⚠ UN BUCKET PAR APP, NOMMÉ COMME ELLE. Tout en découle sans rien redéclarer :
|
||
# le compte de service (iac/consumers.tf), le chemin Vault `kvv2/minio/<nom>`,
|
||
# et la policy que le module central accorde déjà à `kvv2/data/minio/<app>`.
|
||
# Créer un bucket ici EST la déclaration — il n'y a pas d'autre liste à tenir.
|
||
buckets:
|
||
- name: 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
|