Kubernetes Pods mit Configmap konfigurieren
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.