4 Configuration Drift Detection und Management

4.1 Was ist Configuration Drift?

Configuration Drift entsteht, wenn der tatsächliche Zustand im Kubernetes-Cluster vom gewünschten Zustand im Git-Repository abweicht. Das passiert häufiger als man denkt und ist nicht zwangsläufig problematisch.

Einfaches Beispiel:

# Git Repository definiert:
replicas: 3

# Cluster zeigt nach manueller Skalierung:
replicas: 5

Das ist Drift. Git sagt 3 Replicas, der Cluster läuft mit 5.

4.2 Häufige Ursachen

Manuelle Eingriffe

kubectl scale deployment my-app --replicas=5
kubectl edit deployment my-app

Automatische Systeme - Horizontal Pod Autoscaler ändert Replica-Counts - Vertical Pod Autoscaler modifiziert Ressourcen-Limits - Service Mesh Injectors fügen Sidecars hinzu

Notfall-Eingriffe

# Hotfix während einem Incident
kubectl set image deployment/my-app container=my-app:hotfix-1.2.1

Externe Controller - Cert-Manager erstellt TLS-Zertifikate - Monitoring-Agents installieren DaemonSets - Cluster-Autoscaler beeinflusst Pod-Placement

4.3 Drift Detection

4.3.1 ArgoCD

ArgoCD prüft kontinuierlich den Cluster-Zustand und zeigt drei Status-Arten:

Status Bedeutung Aktion erforderlich
Synced Git = Cluster Nein
OutOfSync Abweichung erkannt Ja
Unknown Prüfung fehlgeschlagen Ja

4.3.2 Flux

Flux reconciled standardmäßig alle 60 Sekunden:

apiVersion: kustomize.toolkit.fluxcd.io/v1beta2
kind: Kustomization
metadata:
  name: my-app
spec:
  interval: 1m
  prune: true    # Löscht unerwünschte Ressourcen
  force: true    # Überschreibt manuelle Änderungen

4.4 Umgang mit Drift

4.4.1 Automatische Korrektur

ArgoCD:

syncPolicy:
  automated:
    selfHeal: true  # Korrigiert Drift automatisch
    prune: true     # Löscht nicht-definierte Ressourcen

Flux:

spec:
  force: true  # Überschreibt lokale Änderungen
  prune: true  # Entfernt Drift-Ressourcen

4.4.2 Selektives Ignorieren

Manchmal will man bestimmte Drift ignorieren:

# ArgoCD: HPA-Änderungen ignorieren
spec:
  ignoreDifferences:
  - group: apps
    kind: Deployment
    jsonPointers:
    - /spec/replicas
# Flux: Reconciliation deaktivieren
metadata:
  annotations:
    kustomize.toolkit.fluxcd.io/reconcile: disabled

4.5 Monitoring

4.5.1 Metriken überwachen

# ArgoCD Drift Detection
argocd_app_info{sync_status="OutOfSync"}

# Flux Reconciliation Failures  
flux_reconcile_condition{type="Ready",status="False"}

4.5.2 Alerts einrichten

groups:
- name: gitops-drift
  rules:
  - alert: ConfigurationDrift
    expr: argocd_app_info{sync_status="OutOfSync"} > 0
    for: 5m
    annotations:
      summary: "Configuration Drift erkannt"

4.6 Praktische Szenarien

4.6.1 Emergency Scaling

# 1. Produktions-Problem: Sofort skalieren
kubectl scale deployment critical-app --replicas=10

# 2. Drift wird erkannt (OutOfSync)
# 3. Temporär akzeptieren, später Git nachziehen

4.6.2 HPA formalisieren

Entwickler erstellt manuell einen HPA:

kubectl autoscale deployment my-app --min=2 --max=10 --cpu-percent=70

Drift erkannt → HPA in Git definieren:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: my-app-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70

4.7 Policy Enforcement

Open Policy Agent kann unerwünschte manuelle Änderungen verhindern:

deny[msg] {
  input.request.kind.kind == "Deployment"
  input.request.operation == "UPDATE"
  not input.request.userInfo.username == "system:serviceaccount:argocd:argocd-application-controller"
  msg := "Manuelle Deployment-Änderungen nicht erlaubt"
}

4.8 Drift-Kategorien

Typ Beispiel Reaktion
Akzeptabel HPA ändert Replicas Ignorieren oder formalisieren
Temporär Emergency Hotfix Kurzzeitig dulden, dann Git nachziehen
Problematisch Unkoordinierte manuelle Änderungen Sofort korrigieren

Drift ist normal und oft sinnvoll. Der Schlüssel liegt im kontrollierten Umgang:

  1. Überwachen: Kontinuierliche Drift-Detection
  2. Kategorisieren: Bewerten, ob Drift problematisch ist
  3. Reagieren: Korrigieren, ignorieren oder formalisieren
  4. Lernen: Häufige Drift-Muster in Git übernehmen

Ein System ohne Drift-Erkennung ist entweder perfekt konfiguriert oder blind für Änderungen. Drift-Detection macht das System transparent und kontrollierbar.