Flux CD im Detail: Architektur, CRDs und Denkmodelle
Wie die Diskussion begann
Hey zusammen!
Ich betreibe Flux CD seit ein paar Jahren sowohl bei der Arbeit als auch in meinem Homelab. Nachdem ich für neue Kollegen bei der Arbeit einige Onboarding-Sessions gehalten hatte, dachte ich, dass die Informationen auch für andere nützlich sein könnten. Ich habe mich entschieden, ein Video zusammenzustellen, das einige der Dinge abdeckt, die mir wirklich geholfen haben zu verstehen, wie Flux funktioniert, statt einfach nur Manifeste zu kopieren.
Der Hauptfokus liegt darauf, wie die verschiedenen Controller und ihre CRDs auf Befehle abbilden, die man manuell ausführen würde, und wie die tatsächliche Kette von Ereignissen aussieht, um von einem Git-Commit zu einem laufenden Workload zu kommen.
Sobald mir das klar wurde, wurde das gesamte System deutlich intuitiver.
Ich gehe außerdem darauf ein, wie ich mein Homelab-Repository strukturiere, wie ich mit dem Flux Operator bootstrappe, damit Flux sich selbst verwalten und aktualisieren kann, und zeige eine Live-Demo, in der ich einen Namespace lösche und Flux ihn neu aufbauen lasse.
Repo: https://github.com/mirceanton/home-ops
Video: https://youtu.be/hoi2GzvJUXM
Mich interessiert, wie andere an ihr Flux-Setup herangehen. Besonders beim Operator-Bootstrap und beim sauberen Umgang mit der CRD-Abhängigkeit. Ich habe einige Repos gesehen, die versuchen, alle CRDs bei der Cluster-Erstellung zu bündeln, aber das wirkt auf mich etwas unsauber.
Was in den Kommentaren auffiel
Diskussionspunkt 1
Als jemand, der seit den v1- und Weaveworks-Tagen Nutzer und Fanboy von Flux ist: Flux ist wahrscheinlich das am meisten unterschätzte Projekt unter dem CNCF-Dach. Es hat das Fundament für Kubernetes- und GitOps-Workflows gelegt, wie wir sie heute kennen (vor etwa 8 Jahren war das noch ein völlig fremdes Konzept), und meiner Meinung nach ist der einzige Grund, warum ArgoCD an Popularität vorbeigezogen ist, die benutzerfreundlichere UI, die sie mitgeliefert haben. Danke, Stefan & Team, für die Beharrlichkeit und den Dienst an der Community.
Diskussionspunkt 2
Weißt du, wie sich das Denkmodell zwischen ArgoCD und Flux unterscheidet? Ich habe ursprünglich mit ArgoCD angefangen, weil es eine GUI hatte, stelle aber jetzt fest, dass ich sowieso alles deklarativ mache, also ist Flux vielleicht die bessere Wahl.
Diskussionspunkt 3
ControlPlanes FluxCD-D2-Referenzarchitektur, die sich größtenteils auf gitless konzentriert, ist der richtige Weg. Bei dieser Architektur liegt die gesamte Verantwortung bei der Template-Generierung und der Pipeline. Eine echte Verbesserung. Vielen Dank an Stefan und das Control-Plane-Team. Zu deinem CRD-Thema: Ich habe ein Setup basierend auf Brian Fairs awesome-flux (head, crd, infra), aber in einem Monorepo mit Template-Generierung für gitless. Das funktioniert bei mir gut.
Diskussionspunkt 4
Es gibt ein Flux-Plugin für k9s
Diskussionspunkt 5
Wir machen bei der Arbeit etwas Ähnliches mit der D2-Architektur, aber mit dem Multi-Tenant-Ansatz eines Repos pro Tenant. Was mir an der D2-Architektur nicht gefallen hat, ist die starke Nutzung von Kustomize-Overlays zur Unterscheidung zwischen Umgebungen, und ich fand es schwieriger, Promotions zwischen Umgebungen durchzuführen, besonders auf automatisierte Weise, also z. B. via Renovate. Wir nutzen OCI noch nicht als Quelle, sind also nicht gitless, mehr oder weniger aus demselben Grund. Ich habe gesehen, dass das in manchen Diskussionen schräg angesehen wird, aber bei uns hat es gut funktioniert, die Staging-Umgebung mit dem Main-Branch des Tenant-Repos zu synchronisieren und Produktion mit einem Prod-Branch, kombiniert mit Post-Build-Substitution und Konfigurationen pro Umgebung. Alles wird über PRs nachverfolgt, und Promotion läuft über eine dedizierte Promotion-Pipeline, da wir Branch-Protections ziemlich intensiv nutzen. Ich muss mir den gitless-Ansatz wohl noch etwas genauer ansehen, aber ich fand ihn bisher unnötig verschachtelt.
Thread-Übersicht
- Ursprüngliches Subreddit: r/kubernetes
- Ursprünglicher Autor: u/MikeAnth
- Reddit-Score: 84
- Kommentaranzahl: 23
- Ursprünglicher Thread: https://www.reddit.com/r/kubernetes/comments/1rkkdgg/flux_cd_deep_dive_architecture_crds_and_mental/