Training Module
Kubernetes CRDs & Operator Pattern — Kubernetes um eigene Objekte erweitern
In diesem 100-Minuten-Modul erweitert ihr Kubernetes um eigene
Objekttypen. Los geht es mit der Begriffsklärung, die im Alltag am
häufigsten durcheinandergeht: Custom Resource (CR) ist
eine konkrete Instanz – reine Daten –, die
CustomResourceDefinition (CRD) ist das Schema, das
diesen neuen Objekttyp beim API-Server registriert, und der
Controller ist der laufende Prozess, der Ist- und
Soll-Zustand angleicht – genau die Reconciliation-Loop, die ihr aus dem
GitOps-Kurs bereits für ArgoCD kennt, jetzt allgemein auf CRDs
übertragen. Im Hands-on schreibt ihr eine eigene Minimal-CRD (das
Standardbeispiel CronTab aus der offiziellen
Kubernetes-Dokumentation), wendet sie mit kubectl apply an
und bedient euer eigenes Kind mit kubectl get – Kubernetes
behandelt es danach wie jede eingebaute Ressource. Danach ordnet ihr
CRD-Versionierung ein: mehrere Versionen über
spec.versions mit served/storage
-Flags, plus Conversion-Webhooks als Konzept-Ausblick ohne Hands-on, für
den Fall, dass sich das Schema zwischen v1alpha1 und
v1 tatsächlich ändert – → vertieft im Aufbaumodul
Kubernetes Operator härten: Admission- & Conversion-Webhooks mit Kubebuilder
mit echtem Conversion-Webhook-Code. Das
Operator-Pattern lernt ihr nicht an einem
Spielzeugbeispiel, sondern an eurem eigenen, bereits laufenden Cluster:
kubectl get crd zeigt euch die Application
-CRD, die ArgoCD dort seit dem GitOps-Kurs betreibt – Operator ist
damit kein neuer Begriff, sondern die Zusammenfassung von etwas, das
ihr längst benutzt habt. Zum Abschluss eine ehrliche
Build-vs-Buy-Abwägung: wann ein Helm-Chart oder eine
ConfigMap als reiner Datenspeicher reicht, und wann ein eigener,
typischerweise mit Kubebuilder oder Operator SDK gebauter Operator
gerechtfertigt ist – ohne eigenen Go-Code-Hands-on in diesem Modul, das
würde das Modul “Go-Grundlagen” voraussetzen. Wer den fehlenden
Controller tatsächlich selbst schreiben will, findet ihn im
Aufbaumodul
Kubernetes Operator entwickeln mit Kubebuilder (Go)
– dort baut ihr genau an dieser Stelle weiter, an derselben
CronTab-CRD. Voraussetzung ist das Modul “Kubernetes
GitOps — Deklaratives Deployment mit ArgoCD” – die Session läuft
weiterhin vollständig lokal über Minikube, ohne Cloud-Account und ohne
Kostenwirkung.
Format
100 Minuten, live (remote oder vor Ort), Input & Hands-on
Teilnehmende
Entwickler:innen und Ops, die eigene Kubernetes-Objekttypen verstehen und einordnen wollen, ob ein eigener Operator gerechtfertigt ist
Voraussetzungen
Abgeschlossenes Modul “Kubernetes GitOps — Deklaratives Deployment mit ArgoCD” (Pflicht), lauffähige lokale Docker-Umgebung für Minikube
Warum dieses Training für deine Organisation wirkt
Eigene Objekte, nicht nur eigene Werte
Eine ConfigMap speichert Werte – eine CRD definiert einen ganz
neuen Objekttyp mit eigenem Schema, eigener Validierung und
eigenem kubectl get. Wer den Unterschied nicht
kennt, versteht auch nicht, warum kubectl get application
oder kubectl get rollout überhaupt funktionieren.
Operator-Pattern erkennen statt neu erfinden
Statt einer abstrakten Definition zeigen wir das Pattern an
eurem eigenen, aus dem GitOps-Kurs bereits laufenden ArgoCD –
die Application-CRD als Daten, der
ArgoCD-Controller als Verhalten. Der Aha-Moment kommt aus dem
eigenen Cluster, nicht aus einer Folie.
Build-vs-Buy ehrlich beantwortet
Ein eigener Operator ist ein ernstzunehmendes Software-Projekt, kein Konfigurationstrick. Wer nach diesem Modul weiß, wann ein Helm-Chart reicht und wann Kubebuilder/Operator SDK die Investition wert ist, trifft diese Entscheidung nicht aus Trend, sondern aus Bedarf.
Was Teilnehmende mitnehmen
- Custom Resource (CR), CustomResourceDefinition (CRD) und Controller/Operator als drei unterschiedliche Dinge klar benennen und auseinanderhalten.
- Eine eigene Minimal-CRD schreiben: Group/Version/Kind,
scope: Namespacedvs.Cluster, sowie ein OpenAPI-v3-Schema unterspec.versions[].schema.openAPIV3Schema. - Die eigene CRD mit
kubectl applyregistrieren und das eigene Kind mitkubectl getgenauso bedienen wie eine eingebaute Ressource. - Die aus dem GitOps-Kurs bekannte Reconciliation-Loop allgemein auf CRDs übertragen: Custom Resource als Soll-Zustand (Daten), Controller als Prozess, der ihn durchsetzt (Verhalten).
- CRD-Versionierung von
v1alpha1zuv1einordnen: mehrere Versionen überserved/storage-Flags, Conversion-StrategieNonevs.Webhookals Konzept-Ausblick ohne Hands-on. - Das Operator-Pattern am bereits im eigenen Cluster laufenden Beispiel erkennen:
kubectl get crdzeigt dieApplication-CRD aus ArgoCD (und ggf. dieRollout-CRD aus Argo Rollouts, falls bereits belegt). - Build-vs-Buy einordnen: wann ein Helm-Chart oder eine ConfigMap als reiner Datenspeicher reicht, und wann ein eigener, mit Kubebuilder/Operator SDK gebauter Operator gerechtfertigt ist – ohne eigenen Go-Code in diesem Modul, den echten Reconciler dazu liefert das Aufbaumodul Kubernetes Operator entwickeln mit Kubebuilder (Go).
Für wen dieses Modul ideal ist
- • Entwickler:innen und Ops mit abgeschlossenem Modul “Kubernetes GitOps — Deklaratives Deployment mit ArgoCD” oder gleichwertigen Vorkenntnissen zu CRDs
- • Alle, die in Tutorials oder bei Tools wie ArgoCD, Argo Rollouts oder Cert-Manager auf
kubectl get <eigenes-kind>gestoßen sind und endlich verstehen wollen, wie das funktioniert - • Teams, die vor der Entscheidung stehen, ob sich ein eigener Operator lohnt, und das nicht aus Bauchgefühl entscheiden wollen
Rahmendaten
- • Dauer: 100 Minuten live (remote oder vor Ort)
- • Format: Input, Live-Demo im eigenen Cluster, ein Hands-on-Block zur eigenen Minimal-CRD
- • Voraussetzungen: abgeschlossenes Modul “Kubernetes GitOps — Deklaratives Deployment mit ArgoCD” (Pflicht), lauffähige lokale Docker-Umgebung, keine Cloud-Kostenwirkung
Modulaufbau & Agenda
CR vs. CRD vs. Controller (15 min): Begriffsklärung an der Tafel, Bezug zur aus dem GitOps-Kurs bekannten Reconciliation-Loop.
Hands-on: Minimal-CRD schreiben (20 min, Hands-on): eine eigene CRD mit Group/Version/Kind, OpenAPI-v3-Schema und Scope Namespaced/Cluster schreiben, per
kubectl apply/kubectl getgegen das eigene Kind arbeiten.Versionierung & Conversion-Webhooks (20 min, kein Hands-on): mehrere Versionen über
served/storage-Flags, der Weg vonv1alpha1zuv1, Conversion-Webhooks als Konzept-Ausblick – → vertieft im Aufbaumodul Kubernetes Operator härten: Admission- & Conversion-Webhooks mit Kubebuilder.Operator-Pattern am bekannten Beispiel (20 min):
kubectl get crdim eigenen Cluster zeigt bereits laufende CRDs aus ArgoCD (und ggf. Argo Rollouts) – Operator als CR (Daten) plus Controller (Verhalten) erkannt, nicht neu erfunden.Build-vs-Buy (15 min, ohne eigenen Go-Code in diesem Modul): wann Helm-Chart/ConfigMap reicht, wann ein eigener Operator mit Kubebuilder/Operator SDK gerechtfertigt ist – den eigentlichen Reconciler-Code liefert das Aufbaumodul Kubernetes Operator entwickeln mit Kubebuilder (Go).
- Wrap-up & Q&A (10 min).
Dieses Modul setzt das Aufbaumodul
Kubernetes GitOps — Deklaratives Deployment mit ArgoCD
voraus – nicht nur inhaltlich, sondern technisch:
Block 4 nutzt die ArgoCD-Installation aus diesem Vorgängerkurs
direkt weiter, statt sie neu aufzusetzen, damit kubectl get crd
auf echte, bereits laufende CRDs trifft statt auf einen leeren
Cluster.
Abgrenzung, explizit angesagt: Das Modul
Kubernetes GitOps — ArgoCD
nutzt die Application-CRD bereits ausführlich, erklärt
aber nie, was eine CRD strukturell überhaupt ist – dieses Modul
liefert genau das nach, statt es zu wiederholen.
Kein Go-Code, kein Kubebuilder-Hands-on in diesem Modul. Einen eigenen Controller zu schreiben und zu testen setzt das Modul Go-Grundlagen voraus – dieses Modul bleibt bewusst bei CRD und Konzept, Block 5 ist eine Einordnung ohne eigenen Code. Den fehlenden Reconciler schreibt ihr im direkten Aufbaumodul Kubernetes Operator entwickeln mit Kubebuilder (Go), das auf diesem Kurs UND auf Go-Grundlagen aufbaut und an derselben CronTab-CRD weiterarbeitet.
Hands-on Inhalte (Auszug)
Eigene CRD schreiben & anwenden
- Eine
CustomResourceDefinitionmitapiVersion: apiextensions.k8s.io/v1, eigener Group,scope: Namespacedund einem OpenAPI-v3-Schema fürspecschreiben - Mit
kubectl apply -fanwenden und mitkubectl get crdbestätigen, dass der API-Server das neue Kind kennt
Eigene Custom-Resource-Instanz
- Eine erste Instanz des eigenen Kinds anwenden und über Plural-, Singular- und Short-Name gleichermaßen abrufen (
kubectl get crontabs/crontab/ct) - Mit
kubectl get ct -o yamlnachvollziehen, dass Kubernetes das eigene Objekt genauso speichert und ausliefert wie eine eingebaute Ressource
Operator-Pattern im eigenen Cluster
- Mit
kubectl get crddie bereits aus dem GitOps-Kurs installierten CRDs von ArgoCD (applications.argoproj.iou. a.) im eigenen Cluster wiederfinden - Eine bestehende
Application-Instanz als Custom Resource (Daten) dem laufenden ArgoCD-Controller (Verhalten) gegenüberstellen
Build-vs-Buy einordnen
- Am eigenen CronTab-Beispiel durchspielen, wann eine reine ConfigMap oder ein Helm-Chart als Datenspeicher ausgereicht hätte – und wo eine echte Reconciliation-Loop den Unterschied macht
- Kubebuilder und Operator SDK als Werkzeuge zum Schreiben eines echten Controllers benennen, ohne sie in dieser Session einzusetzen
Dieses Modul ist Teil unserer Pilotphase. Gemeinsam mit euch definieren wir passende Metriken (z. B. Zeit vom Anwenden der eigenen CRD bis zum ersten erfolgreichen kubectl get auf das eigene Kind) und werten sie im Anschluss transparent aus. Ergebnisse veröffentlichen wir, sobald sie belastbar sind.
Bereit, das Modul zu buchen?
Wir passen die Hands-on-Übung auf euren Erfahrungsstand und eure Zielumgebung an.
Academy Briefing anfragen