MinIO quitte Longhorn pour le disque externe de pi1 (volume local, /mnt/arcodange/minio) (#60)
Helm Charts / Detect changed charts (push) Successful in 17s
Helm Charts / Library charts tool (push) Skipped
Helm Charts / Application charts alloy (push) Skipped
Helm Charts / Application charts crowdsec (push) Skipped
Helm Charts / Application charts grafana (push) Skipped
Helm Charts / Application charts hashicorp-vault (push) Skipped
Helm Charts / Application charts loki (push) Skipped
Helm Charts / Application charts pgbouncer (push) Skipped
Helm Charts / Application charts pgcat (push) Skipped
Helm Charts / Application charts prometheus (push) Skipped
Helm Charts / Application charts redis (push) Skipped
Helm Charts / Application charts chart (push) Successful in 12s
Helm Charts / Application charts minio (push) Successful in 35s

Co-authored-by: Gabriel Radureau <[email protected]>
This commit was merged in pull request #60.
This commit is contained in:
2026-09-26 11:05:59 +02:00
committed by arcodange
parent e6720bdd40
commit 865b82548c
4 changed files with 92 additions and 9 deletions
+8
View File
@@ -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
+4 -9
View File
@@ -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 }}
@@ -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 }}
+13
View File
@@ -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.