Files
tools/minio/values.yaml
T
arcodange ffd52ba5ab
Helm Charts / Detect changed charts (pull_request) Successful in 1m2s
Helm Charts / Library charts tool (pull_request) Skipped
Helm Charts / Application charts pgcat (pull_request) Skipped
MinIO tournait sans une seule sonde — trois jours de panne invisible
Le 29 août à 17 h 54, ext4 a abandonné son journal sous MinIO
(`comm minio: Detected aborted journal`), après que les répliques Longhorn
se soient perdues de vue sur le réseau. Toute écriture rendait `EIO`.

Longhorn s'est rétabli TOUT SEUL le 30 août à 11 h 50. Mais un journal ext4
abandonné ne se répare jamais seul : il le reste jusqu'au démontage. MinIO est
donc resté assis sur un montage mort DEUX JOURS APRÈS la réparation du
stockage, pendant que Longhorn (`healthy`), les répliques (`RW`), les nœuds,
ArgoCD (`Synced, Healthy`) et le pod (`1/1 Running`, `0 restart`) affichaient
tous vert. Le remède a été un `scale --replicas=0` : « insufficient » dans les
journaux, 6126 → 0.

Le pod ne redémarre pas quand son système de fichiers meurt : le processus
vit, et c'est tout ce que Kubernetes regardait — faute de sonde.

⚠⚠ Et ce n'était pas un oubli de configuration : LE CHART OFFICIEL
`minio/minio` N'OFFRE AUCUNE SONDE, dans aucune de ses versions (5.4.0 est la
dernière). Pas une clé `livenessProbe` dans ses valeurs, pas un rendu de sonde
dans ses templates. Il n'existe aucun moyen de greffer une sonde sur le
Deployment d'un sous-chart depuis un chart parent : on rend donc les
manifestes nous-mêmes.

SABOTAGE RELEVÉ (MinIO jetable, quatre disques, LES DEUX MOITIÉS DANS LE MÊME
POD, même image) :

  | état du magasin         | /health/live | /health/cluster |
  |-------------------------|--------------|-----------------|
  | 4 disques sains         |     200      |     **200**     |
  | quorum d'écriture perdu |   **200**    |     **503**     |

`format.json` de deux disques sur quatre écrasé ; bascule de `cluster` entre
t+20 s et t+40 s ; `live` n'a JAMAIS bougé. C'est exactement pourquoi la panne
était invisible — et pourquoi la sonde vise `cluster`, pas `live`.

Ce que le lot change d'autre, délibérément :
- `RollingUpdate (maxSurge 100%)` → `Recreate` : le volume est ReadWriteOnce,
  un roulement laissait le second pod en `Multi-Attach error` jusqu'au timeout
- `MINIO_PROMETHEUS_AUTH_TYPE` était déclaré DEUX FOIS (kubectl le signalait à
  chaque application)
- le `post-job` et son ConfigMap de 25 Ko disparaissent : `buckets` était vide
  et le ConfigMap n'était monté par AUCUN conteneur (vérifié sur le Deployment
  vivant avant de le retirer)
- plus aucune dépendance Helm : un point de panne distant en moins sur le
  chemin de synchronisation du stockage objet

⚠ Le PVC est l'objet dangereux de ce lot : ne pas le rendre ici l'aurait fait
ÉLAGUER par ArgoCD, avec les vidéos dedans. Il est rendu à l'identique (son
`spec` ne bouge pas d'un champ, vérifié par `kubectl diff`), sans `volumeName`
— que le contrôleur pose lui-même — et porte `Prune=false` en ceinture.

Vérifications, codes relevés :
- `helm template` : code 0, 10 objets (les 11 d'ArgoCD moins le ConfigMap)
- `kubectl apply --dry-run=server` : code 0, les 10 en `configured`, aucun en
  `created`, aucune violation de champ immuable
- `kubectl diff` : le `spec` du PVC intact, les `selector` et ports des deux
  Services identiques

Refs: arcodange-org/tools#31
2026-09-03 00:21:42 +02:00

65 lines
3.3 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.
# -----------------------------------------------------------------------------
# ⚠ Depuis le 2026-09-02, ces valeurs alimentent NOS PROPRES manifestes
# (templates/deployment.yaml & co.), plus un sous-chart. Beaucoup de réglages
# qui vivaient ici sont devenus du manifeste explicite — on dit ci-dessous où
# chacun est parti, pour qu'on ne les cherche pas en vain :
#
# mode / replicas → templates/deployment.yaml (`replicas: 1`)
# serviceAccount.* → templates/serviceaccount.yaml
# ingress / consoleIngress→ templates/ingress.yaml (le public : ingress-public.yaml)
# buckets: [] → n'existe plus : chaque app déclare les siens
# depuis son dépôt, via iac/modules/minio_app
# metrics.serviceMonitor → n'existe plus : pas d'opérateur Prometheus ici,
# le scrape se fait par annotation
#
# ⚠ Et le `post-job` du chart officiel (création de buckets et d'utilisateurs)
# n'existe plus non plus. Il ne faisait rien : `buckets` était vide, et son
# ConfigMap de 25 Ko n'était monté par AUCUN conteneur — vérifié sur le
# Deployment vivant avant de le retirer.
# -----------------------------------------------------------------------------
minio:
# Image officielle MinIO — multi-arch, arm64 inclus (les nœuds sont des Pi 5).
#
# ⚠ LE TAG EST MAINTENANT À NOTRE CHARGE. Il était auparavant choisi par la
# version du sous-chart ; plus personne ne le fait avancer tout seul. C'est le
# prix assumé de l'autonomie du chart — à relever quand on met à jour.
image:
repository: quay.io/minio/minio
tag: RELEASE.2024-12-18T13-15-44Z
pullPolicy: IfNotPresent
# Identifiants JAMAIS dans le dépôt : le secret est matérialisé par le
# Vault Secrets Operator depuis kvv2/minio/config (voir templates/ et iac/).
# Les clés `rootUser` / `rootPassword` gardent les noms qu'attendait le chart
# officiel — les renommer obligerait à toucher Vault pour rien.
existingSecret: minio-config
persistence:
storageClass: longhorn
# 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
environment:
# Métriques : Prometheus (namespace `tools`) scrape déjà la façade et le
# laptop (ADR-0014 du dossier) — MinIO rejoint la même vue.
#
# ⚠ Cette variable était déclarée DEUX FOIS sur le Deployment rendu par le
# sous-chart (une fois par le chart, une fois par nos `environment`) —
# `kubectl` le signalait à chaque application : « hides previous definition
# of MINIO_PROMETHEUS_AUTH_TYPE ». Rendre le manifeste nous-mêmes règle ça.
MINIO_PROMETHEUS_AUTH_TYPE: "public"
# CORS : le navigateur téléverse directement (URL présignées) — origines
# EXACTES, jamais « * » : une URL qui fuite serait sinon rejouable partout.
MINIO_API_CORS_ALLOW_ORIGIN: "https://kadans.arcodange.fr,https://kadans.arcodange.lab"