Random Bits of Knowledge: Kubernetes Pods beim Update einer ConfigMap automatisch durchstarten

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.

 

Unsere Kunden

  • baumit logo sw baumit logo
  • libri grey libri
  • alpenverein grey alpenverein
  • Logo genialokal Logo genialokal
  • ambiente grey ambiente
  • Logo Tischwelt Logo Tischwelt
  • Logo Zündstoff Logo Zündstoff
  • Logo Burda Logo Burda
  • Streit Streit