Kubernetes Controller und CRDs
Controller
Ein Kubernetes Controller beobachtet den aktuellen Cluster-Zustand und stellt sicher, dass er dem gewünschten Zustand (desired state) entspricht. Controller laufen in einer kontinuierlichen Reconciliation-Loop:
Ist-Zustand beobachten → mit Soll-Zustand vergleichen → Differenz ausgleichen
Eingebaute Controller (alle im kube-controller-manager):
- ReplicaSet-Controller – hält die gewünschte Anzahl von Pod-Replikas
- Deployment-Controller – verwaltet Rolling Updates
- Node-Controller – reagiert auf Node-Ausfälle
- Job-Controller – führt Jobs einmalig bis zum Abschluss aus
Custom Resource Definitions (CRDs)
CRDs erweitern die Kubernetes-API um eigene Ressourcentypen. Damit kann man beliebige Konzepte als Kubernetes-Objekte abbilden (z.B. HelmRelease, GitRepository, Certificate).
kubectl get crds
kubectl describe crd helmreleases.helm.toolkit.fluxcd.io
kubectl api-resources
kubectl api-resources | grep flux
Operator Pattern
Ein Operator kombiniert eine CRD mit einem zugehörigen Controller:
- CRD definiert das Schema der neuen Ressource.
- Controller beobachtet Instanzen dieser Ressource und führt die gewünschten Aktionen aus.
Beispiel: Der Flux Helm-Controller beobachtet HelmRelease-Objekte und installiert/aktualisiert die entsprechenden Helm-Charts automatisch.
# Flux CRDs anzeigen
kubectl get crds | grep fluxcd
# helmreleases.helm.toolkit.fluxcd.io
# gitrepositories.source.toolkit.fluxcd.io
# kustomizations.kustomize.toolkit.fluxcd.io
# Instanzen einer CRD
kubectl get helmreleases
kubectl get gitrepositories