From 87486e95df0cb92e18fa3d71e56df00534aaa92e Mon Sep 17 00:00:00 2001 From: Gabriel Radureau Date: Sat, 26 Sep 2026 10:50:44 +0200 Subject: [PATCH] MinIO quitte Longhorn pour le disque externe de pi1 : un volume `local` sur /mnt/arcodange/minio MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fondateur (2026-09-26) : « Je veux qu'on utilise l'external hard disk » ; « No need for replicas for homelab ». Longhorn a mis MinIO trois fois en « drive is faulty » (tools#31, #49, #58) ; le volume sert désormais un dossier du disque USB de pi1, sans moteur ni réplique. Sans le disque, le chemin n'existe pas : MinIO refuse de démarrer au lieu d'écrire sur la carte SD. Le PVC Longhorn `minio` reste, détaché : le retour arrière est `claim: minio`. Le projet `tools` autorise désormais `PersistentVolume` (un volume `local` se déclare à la main). Co-Authored-By: Claude Opus 5.5 --- chart/templates/project.yaml | 8 +++ minio/templates/deployment.yaml | 13 ++--- minio/templates/volume-disque-externe.yaml | 67 ++++++++++++++++++++++ minio/values.yaml | 13 +++++ 4 files changed, 92 insertions(+), 9 deletions(-) create mode 100644 minio/templates/volume-disque-externe.yaml diff --git a/chart/templates/project.yaml b/chart/templates/project.yaml index d131fa5..43b1297 100644 --- a/chart/templates/project.yaml +++ b/chart/templates/project.yaml @@ -40,3 +40,11 @@ spec: # qu'ordonner l'éviction et la préemption. - group: 'scheduling.k8s.io' kind: PriorityClass + # PersistentVolume — ajouté le 2026-09-26 pour une seule raison : le volume de MinIO + # quitte Longhorn pour le DISQUE EXTERNE de pi1 (fondateur : « Je veux qu'on utilise + # l'external hard disk » ; « No need for replicas for homelab »). Un volume `local` + # se déclare à la main (aucun provisionneur ne le crée), et un PV est cluster-scoped. + # Il porte de la donnée : `minio/templates/volume-disque-externe.yaml` le pose en + # `Retain` et `Prune=false`, pour qu'aucune synchronisation ne puisse l'effacer. + - group: '' + kind: PersistentVolume diff --git a/minio/templates/deployment.yaml b/minio/templates/deployment.yaml index 192c6e2..0376353 100644 --- a/minio/templates/deployment.yaml +++ b/minio/templates/deployment.yaml @@ -77,14 +77,9 @@ spec: - key: kubernetes.io/hostname operator: NotIn values: [pi2] - preferredDuringSchedulingIgnoredDuringExecution: - # pi3 est le moins chargé en mémoire (58 % au 2026-09-15, pi1 81 %). - - weight: 50 - preference: - matchExpressions: - - key: kubernetes.io/hostname - operator: In - values: [pi3] + # ⚠ Plus de préférence pour pi3 (2026-09-26) : le volume `local` du disque + # externe fixe le nœud (values.yaml, `disqueExterne.noeud`) — le pod suit + # son volume. securityContext: # Repris tel quel : la donnée déjà écrite sur le volume appartient à # 1000:1000. Changer ces valeurs rendrait le bucket illisible. @@ -195,7 +190,7 @@ spec: volumes: - name: export persistentVolumeClaim: - claimName: minio + claimName: {{ .Values.minio.persistence.claim }} - name: minio-user secret: secretName: {{ .Values.minio.existingSecret }} diff --git a/minio/templates/volume-disque-externe.yaml b/minio/templates/volume-disque-externe.yaml new file mode 100644 index 0000000..1a104ff --- /dev/null +++ b/minio/templates/volume-disque-externe.yaml @@ -0,0 +1,67 @@ +# ----------------------------------------------------------------------------- +# LE VOLUME DE MINIO SUR LE DISQUE EXTERNE (2026-09-26). +# +# Un volume `local` : un dossier du disque USB de un nœud, sans provisionneur, +# sans moteur, sans réplique. Il remplace le volume Longhorn (templates/pvc.yaml, +# gardé détaché pour le retour arrière) — voir `persistence` dans values.yaml. +# +# ⚠ `Retain` ET `Prune=false` : ce PV porte les objets du magasin. Ni la +# suppression du PVC, ni une synchronisation ArgoCD ne doivent pouvoir l'effacer. +# +# ⚠ Le chemin DOIT exister avant le premier démarrage (un volume `local` ne le +# crée pas) : il est rempli par la copie de la migration. S'il manque — pi1 +# démarré sans son disque, le dossier `/mnt/arcodange` vide de la carte SD —, le +# pod échoue au montage : c'est voulu, on n'écrit jamais le magasin sur la carte. +# +# ⚠ `volumeName` est posé EXPRÈS ici (contrairement à templates/pvc.yaml) : ce +# PVC ne doit se lier qu'à CE volume, jamais à un autre de la même classe. +# La classe `disque-externe` n'a pas d'objet StorageClass : la liaison est +# statique, les deux noms suffisent. +# ----------------------------------------------------------------------------- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: minio-disque-externe + labels: + app: minio + release: minio + annotations: + argocd.argoproj.io/sync-options: Prune=false +spec: + capacity: + storage: {{ .Values.minio.persistence.size }} + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + storageClassName: disque-externe + volumeMode: Filesystem + local: + path: {{ .Values.minio.persistence.disqueExterne.chemin }} + nodeAffinity: + required: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/hostname + operator: In + values: + - {{ .Values.minio.persistence.disqueExterne.noeud }} +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: minio-disque-externe + namespace: tools + labels: + app: minio + release: minio + annotations: + argocd.argoproj.io/sync-options: Prune=false +spec: + accessModes: + - ReadWriteOnce + storageClassName: disque-externe + volumeName: minio-disque-externe + volumeMode: Filesystem + resources: + requests: + storage: {{ .Values.minio.persistence.size }} diff --git a/minio/values.yaml b/minio/values.yaml index 0fa3ed6..f7d9d92 100644 --- a/minio/values.yaml +++ b/minio/values.yaml @@ -40,6 +40,19 @@ minio: # 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 + # ⚡ LE VOLUME SERVI (2026-09-26) : le DISQUE EXTERNE de pi1, plus Longhorn. + # Fondateur : « Je veux qu'on utilise l'external hard disk » ; « No need for + # replicas for homelab. Our staging environment holds no critical files. » + # Longhorn a mis MinIO trois fois en « drive is faulty » (tools#31, #49, #58) ; + # un volume `local` sur le disque USB n'a ni moteur, ni réplique, ni iSCSI. + # ⚠ Si pi1 démarre SANS son disque, `chemin` n'existe pas sur la carte SD : + # MinIO REFUSE de démarrer au lieu d'écrire sur la carte en silence. + # ⚠ Le PVC Longhorn `minio` (templates/pvc.yaml) reste là, détaché : c'est + # le retour arrière — remettre `claim: minio`. + claim: minio-disque-externe + disqueExterne: + noeud: pi1 + chemin: /mnt/arcodange/minio # 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. -- 2.54.0