Files
tools/hashicorp-vault/values.yaml
T
arcodange e32faa3c77
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 chart (push) Skipped
Helm Charts / Application charts crowdsec (push) Skipped
Helm Charts / Application charts prometheus (push) Successful in 54s
Helm Charts / Application charts grafana (push) Skipped
Helm Charts / Application charts loki (push) Skipped
Helm Charts / Application charts minio (push) Skipped
Helm Charts / Application charts pgbouncer (push) Skipped
Helm Charts / Application charts pgcat (push) Skipped
Helm Charts / Application charts redis (push) Skipped
Helm Charts / Application charts hashicorp-vault (push) Successful in 12s
Vault est resté scellé onze jours en silence, et c'était le pod le plus faible du cluster (#46)
Co-authored-by: Gabriel Radureau <[email protected]>
2026-09-11 14:51:24 +02:00

129 lines
5.0 KiB
YAML

vault: &vault_config
global:
enabled: false
server:
enabled: true
logLevel: trace
# ---- NE PLUS ÊTRE LE POD LE PLUS FAIBLE DU CLUSTER -----------------------------
# Mesuré le 2026-09-11, avant ce changement : `priorityClassName=""`, `priority=0`,
# QoS `BestEffort`. Vault était donc dernier servi par le scheduler et PREMIER évincé
# par le kubelet sous pression mémoire — alors que le Vault Secrets Operator en dépend
# pour tous les Secrets du cluster, et qu'un Vault tombé repart SCELLÉ, donc muet
# jusqu'à ce qu'un humain vienne le desceller à la main.
#
# Contexte : 78 pods du cluster sont BestEffort contre 35 Burstable et 1 Guaranteed.
# Vault était noyé dans le premier groupe.
priorityClassName: vault-critical # cf. templates/priorityclass.yaml
resources:
# DES REQUESTS, ET DÉLIBÉRÉMENT AUCUNE LIMITE.
#
# Ce sont les `requests` qui protègent : le kubelet évince d'abord les BestEffort,
# puis les Burstable qui DÉPASSENT leur requête, et en dernier ceux qui restent
# dessous. Vault consomme ~175 Mio (kubectl top, 11/09) : avec 512 Mio demandés il
# est très en dessous, donc tout en bas de la liste des candidats à l'éviction.
#
# Pourquoi pas de `limits.memory`, qui donnerait du Guaranteed : une limite trop
# basse déclenche un OOMKill, et un OOMKill sur CE pod coûte un descellement manuel.
# Or je n'ai pas pu établir de pic de mémoire fiable — les séries cAdvisor de ce
# cluster rendent huit valeurs contradictoires pour ce pod (jusqu'à 2,3 Gio, ce qui
# est invraisemblable pour un Vault en storage "file"). On ne pose pas une limite sur
# un chiffre auquel on ne croit pas : le gain marginal ne vaut pas le risque.
#
# Pourquoi pas de `limits.cpu` : le throttling CPU sur un ARM64 à 4 cœurs ralentirait
# les opérations de descellement et de scellement, pour un pod qui consomme 26 m.
requests:
memory: 512Mi
cpu: 100m
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:
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.tls: "true"
traefik.ingress.kubernetes.io/router.tls.certresolver: letsencrypt
traefik.ingress.kubernetes.io/router.tls.domains.0.main: arcodange.lab
traefik.ingress.kubernetes.io/router.tls.domains.0.sans: vault.arcodange.lab
# ⚠ Valable parce que cet hôte est en `.lab` (le client arrive en direct sur
# 192.168.1.201). À NE PAS recopier sur un hôte `.fr` : cf. doc/ce-que-traefik-voit.md §3.
traefik.ingress.kubernetes.io/router.middlewares: localIp@file
hosts:
- host: vault.arcodange.lab
paths: []
postStart: [] # https://github.com/hashicorp/vault-helm/blob/main/values.yaml
standalone:
enabled: true
config: |-
ui = true
listener "tcp" {
tls_disable = 1
address = "[::]:8200"
cluster_address = "[::]:8201"
# Enable unauthenticated metrics access (necessary for Prometheus Operator)
#telemetry {
# unauthenticated_metrics_access = "true"
#}
}
storage "file" {
path = "/vault/data"
}
# Example configuration for enabling Prometheus metrics in your config.
#telemetry {
# prometheus_retention_time = "30s"
# disable_hostname = true
#}
ui:
enabled: true
annotations: {}
vault-secrets-operator:
defaultVaultConnection:
enabled: true
address: http://hashicorp-vault.tools.svc.cluster.local:8200
defaultAuthMethod:
enabled: true
controller:
manager:
clientCache:
persistenceModel: direct-encrypted
storageEncryption:
enabled: true
mount: vault-secret-operator
keyName: vso-client-cache
transitMount: transit
kubernetes:
role: edit-vso-client-cache
serviceAccount: hashicorp-vault-vault-secrets-operator-controller-manager
tool:
# kind: 'SubChart' or 'HelmChart', if subchart then uncomment Chart.yaml dependency, else comment and use tool library with helm chart template
kind: 'SubChart'
repo: https://helm.releases.hashicorp.com
chart: vault
version: 0.28.1
values: *vault_config