Kubernetes Pods beim Update einer Configmap automatisch durchstarten

  • Administrator Administrator
  • 09.08.2022

Konfigurationen werden in Kubernetes oft als ConfigMap hinterlegt. Das ist einfach und erlaubt auch die Konfiguration von Container-Workloads, die ggf. nicht vollständig über Environment-Variablen steuerbar sind.

Problem dabei: Ändert sich die ConfigMap z.B. durch ein "helm upgrade", wird der Pod, der die daraus resultierende Konfigurationsdatei benutzt, nicht durchgestartet, da sich aus Sicht von Kubernetes nichts geändert hat. Die Lösung dafür ist so simpel wie effektiv:

DAS GEHEIMNIS: EINE CHECKSUMME AUF DEN INHALT DER CONFIGMAP ALS ANNOTATION IM DEPLOYMENT VERWENDEN

Einfaches Beispiel im Annotation-Block des Deployments:

spec:
  replicas: 1
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: meine-app
  template:
    metadata:
      annotations:
        checksum/config: {{ include (print $.Template.BasePath "/meine-configmap.yaml") . | sha256sum }}
      labels:
        app: meine-app
    spec:
      containers:
        - image: mein-image:latest

Sobald sich nun etwas an "meine-configmap.yml" ändert, ändert sich auch die Annotation, was zur Folge hat, dass ab sofort Kubernetes bei einem Ändern der Configmap auch das Pod neu deployed und damit auch garantiert die neue Konfiguration eingelesen wird.