Die vielen Worte um Kubernetes

Komplexe Themen lerne ich meistens erstmal nur so weit, wie es nötig ist. Nur so viel es braucht, um das Problem zu lösen. Das reicht meistens, ich muss ja auch verantwortungsvoll mit meiner Zeit umgehen. Mit Teilwissen kann man lange Zeit sehr weit kommen.
Irgendwann später, oft nach Wochen/Monaten/Jahren spüre ich dann: Jetzt bin ich so weit, jetzt will ich das richtig verstehen. Dann grabe ich mich rein, lese das Fachbuch, wühle mich durch die Dokumentation, aboniere die Blogs der Experten… Bis es sich richtig anfühlt.
Neulich hatte ich diesen Moment mit Kubernetes. Ich hatte ein solides Wissen über Docker. Aber bei Kubernetes ist alles super kopliziert. Selbst wenn man viel darüber weiß, heißt das nicht das man auch viel kapiert. Immerhin konnte ich damit arbeiten. Aber nun wollte ich das endlich richtig verstehen.
Eines der großen Einstiegsprobleme sind die vielen Fachbegriffe. Ich habe also angefangen, alle Fachbegriffe, über die ich gestolpert bin aufzuschreiben. In den Definitionen kommen dann neue Fachbegriffe vor, die kommen auch auf die Liste. Und wenn ich die Beziehung zwischen 2 Begriffen verstehe, dann bekommen sie einen beschrifteten Pfeil. So entsteht eine Mindmap.
Mindmap Software
Ich habe auf Papier angefangen, bin aber recht schnell auf den Rechner umgestiegen. Für Mindmaps gibt es verschiedene tolle Programme:
- Freeplane (Fork von Freemind, GUI-Program, Java, GPLv2)
- graphviz (dot, Diagram als Code, sehr generisch im Einsatzzweck, C, Common Public License)
- mermaid.js (Diagram als Code, für Diagramme in Dokumentation, Javascript, MIT-Lizenz)
- d2 (Diagram as Code, für Entwicker, MPL2 Lizenz, JS+Go)
D2 will ich in Zukunft öfter benutzen. Es ist relativ neu - aber man merkt, dass es nicht nur Software ist, sondern ein echtes Softwareprojekt. Es gibt Projektziele und Dokumentation, die Syntax ist konsistent und das Programm ist komfortabel zu benutzen. Und man spürt, das d2 die besten Ideen von meermaid.js und graphviz kombinieren möchte.
Besonders praktisch war für mich, dass man jedem Knoten einen tooltip und einen Link hinterlegen kann. Den Tooltip habe ich für eine kurze Definition für den jeweiligen Begriff verwendet. Und wenn man auf den Begriff klickt wird man zur jeweiligen Seite in der Dokumentation geleitet.
Für mein Lernprojekt war d2 jedenfalls eine gute Wahl.
Man muss ja nicht alles fertig machen
Die Mindmap ist natürlich nicht fertig geworden. Ich wollte ja auch keine Dokumente erstellen, sondern Begriffe und ihre Beziehungen erforschen. Das ist auch gelungen, ich verstehe jetzt viel besser, was all die Teile von Kubernetes tun.
Den Aufwand, das Diagram zu vervollständigen und auf Korrektheit zu prüfen, eine Legende zu erstellen und alles in Dokumentation einzubetten, diesen Aufwand spare ich mir jetzt. Auch das gehört dazu, verantwortungsvoll mit Zeit umzugehen. Das Work-Not-In-Progress-Anymore Diagram ist hier, der d2-code hier.
Im Rest dieses Posts schreibe ich über ein paar Erkenntnisse, die ich im Erstellungsprozess hatte.
Mehr Worte als erwartet
Um Docker zu verstehen braucht man nur ein paar Worte: Dockerfile, Image, Registry und Container. Wenn man in die Details gehen will kommen vielleicht nochmal 5-10 dazu.
Aber bei Kubernetes hat man ruckzuck mit 30 Fachbegriffen zu kämpfen. Das macht den Einstieg natürlich schwerer.
Ich bin nicht sicher, woran das liegt. Ist Kubernetes als Konzept so viel komplexer? Habe ich vielleicht das System nicht ordentlich abgegrenzt und lerne hier mehrere Systeme gleichzeitig? Aber wenn ja, was sollte ich herausnehmen? Die Control Plane vielleicht, aber die Dokumentation ist voll mit Beschreibungen davon, was die Controller tun.
Ich sehe keinen Weg, hier erstmal nur einen kleinen Teil zu lernen.
Diese Überlegung hat natürlich die Annahme zur Grundlage, dass die Anzahl der Fachbegriffe eines Systems ein gutes Maß für seine Komplexität ist.
Unterschiede herausarbeiten
Die Begriffe “(Helm) Chart”, “Manifest” und “Spec” beschreiben fast das gleiche, aber nicht ganz. Leider habe ich keine einzige Website oder Dokumentationsabschnitt gefunden, die Gemeinsamkeiten und Unterschiede herausarbeitet. Stat dessen muss man ersteinmal merken, das es hier Verwechslungsgefahr gibt und dann die Definitionen vergleichen (und dann die KI fragen, ob man das richtig verstanden hat)..
Das ist schade, eine solche Erklärung hätte mir viel Verwirrung erspart.
Weil dein Englisch zu schlecht ist
Ich kann gut Englisch - ich konsumieren Bücher, Filme, Podcasts, Hörbücher auf englisch, schreibe viele Texte und alle Programme auf englisch, ich kann Konversationen führen habe auch mit den meisten Dialekten kein Problem. Trotzdem bin ich kein Native Speaker. Sonst hätte ich wahrscheinlich weniger Schwierigkeiten mit Begriffen wie “Pod” oder “Ingress” gehabt.
Ein Pod ist eine Menge von Containern, die eng verknüpft sind uns sich Resourcen teilen. Ich kannte das Wort nicht und habe diese Bedeutung “auswendig gelernt”. Erst jetzt verstehe ich, warum man das so nennt: “Pod of Peas” bedeutet übersetzt “Erpsenschote”. Eine total gute Metapher, einfach zu merken. Außer man kennt die Vokabel nicht. So weit reicht mein Wortschatz nun auch wieder nicht.
Bei Ingress (übersetzt Zugang) ging es mir genauso. Inzwischen soll man wohl in Kubernetes lieber Gateways benutzen, das hätte ich sofort übersetzten können.
Ich weiß nicht, ob es da jetzt eine gute Lektion drauß zu lernen gibt.