Files
tools/minio/.helmignore
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

20 lines
699 B
Plaintext

# Motifs exclus de l'empaquetage Helm.
#
# ⚠ `iac/` est la raison d'être de ce fichier : il porte le Terraform des
# buckets, et son `.terraform/` local contient un binaire de provider de plus de
# 5 Mo — au-dessus de la limite par fichier de Helm. Un `helm template minio/`
# lancé depuis un poste où le Terraform a été initialisé ÉCHOUE sans ce fichier :
# Error: chart file "terraform-provider-minio_v3.3.0" is larger than the
# maximum file size 5242880
# ArgoCD ne le voyait pas (`.terraform` est gitignoré), donc le défaut ne se
# manifestait qu'en local, à la relecture — c'est-à-dire au pire moment.
.terraform/
iac/
.DS_Store
.git/
.gitignore
*.tmproj
.idea/
.vscode/