From 5ac60c54faac07fba989541905dae73bb0f659ee Mon Sep 17 00:00:00 2001 From: Gabriel Radureau Date: Tue, 11 Aug 2026 13:15:13 +0200 Subject: [PATCH] =?UTF-8?q?fix(vault)=20=E2=80=94=20un=20PDB=20pour=20les?= =?UTF-8?q?=20=C3=A9victions=20volontaires,=20OnRootMismatch=20pour=20les?= =?UTF-8?q?=20remounts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- .../templates/vault-server-pdb.yaml | 26 +++++++++++++++++++ hashicorp-vault/values.yaml | 14 ++++++++++ 2 files changed, 40 insertions(+) create mode 100644 hashicorp-vault/templates/vault-server-pdb.yaml diff --git a/hashicorp-vault/templates/vault-server-pdb.yaml b/hashicorp-vault/templates/vault-server-pdb.yaml new file mode 100644 index 0000000..827304a --- /dev/null +++ b/hashicorp-vault/templates/vault-server-pdb.yaml @@ -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 diff --git a/hashicorp-vault/values.yaml b/hashicorp-vault/values.yaml index e192089..4442154 100644 --- a/hashicorp-vault/values.yaml +++ b/hashicorp-vault/values.yaml @@ -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: