fix(vault) — un PDB pour les évictions volontaires, OnRootMismatch pour les remounts
Helm Charts / Detect changed charts (pull_request) Successful in 1m59s
Helm Charts / Library charts tool (pull_request) Skipped
Helm Charts / Application charts pgcat (pull_request) Skipped

Ce Vault tourne en standalone (Shamir, un seul réplica, pas d'auto-unseal) :
toute interruption de pod exige un unseal humain ensuite. Le PDB du sous-chart
vendored ne se rend qu'en mode HA (server.ha.disruptionBudget, gardé par
`eq .mode "ha"`), donc jamais ici — il en fallait un écrit à la main.

Par ailleurs chaque remount du volume déclenchait un chown -R complet du
fsGroup, mesuré à ~9 min sur ce PVC (event kubelet
VolumePermissionChangeInProgress, suggestion du kubelet lui-même). Avec
OnRootMismatch, un remount dont le propriétaire racine est déjà correct saute
ce chown.

Le PDB ne protège que des évictions volontaires (drain, descheduler) — pas
d'une panne de nœud ni d'une suppression manuelle.
This commit is contained in:
2026-08-11 13:15:13 +02:00
parent d2202414c0
commit 5ac60c54fa
2 changed files with 40 additions and 0 deletions
@@ -0,0 +1,26 @@
# Le sous-chart vendored `vault` ne rend son PodDisruptionBudget qu'en mode HA
# (server.ha.disruptionBudget.enabled, gardé par `eq .mode "ha"` dans
# server-disruptionbudget.yaml). Ce Vault tourne en standalone (storage "file",
# un seul réplica, scellement Shamir sans auto-unseal) : le garde-fou du chart
# ne s'applique jamais ici, d'où ce PDB écrit à la main dans le chart parapluie.
#
# Il ne protège que des évictions VOLONTAIRES (kubectl drain, descheduler) — pas
# d'une panne de nœud ni d'une suppression manuelle. Avec un seul réplica et
# aucun auto-unseal, toute interruption exige un unseal humain ensuite ; ce PDB
# réduit seulement les interruptions évitables.
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: {{ .Release.Name }}-server
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: vault
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
spec:
maxUnavailable: 0
selector:
matchLabels:
app.kubernetes.io/name: vault
app.kubernetes.io/instance: {{ .Release.Name }}
component: server
+14
View File
@@ -9,6 +9,20 @@ vault: &vault_config
auditStorage:
enabled: true
statefulSet:
securityContext:
pod:
# Le défaut du chart (runAsNonRoot/runAsGroup/runAsUser/fsGroup) est repris tel
# quel ici — seul fsGroupChangePolicy s'ajoute. Sans lui, chaque remount du
# volume (même sur le MÊME nœud) déclenche un chown -R complet ; mesuré à ~9 min
# sur ce PVC (kubelet event "VolumePermissionChangeInProgress"). OnRootMismatch
# saute le chown si le propriétaire racine est déjà bon.
runAsNonRoot: true
runAsGroup: 1000
runAsUser: 100
fsGroup: 1000
fsGroupChangePolicy: OnRootMismatch
ingress:
enabled: true
annotations: