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
Co-authored-by: Gabriel Radureau <[email protected]>
129 lines
5.0 KiB
YAML
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
|