2 Punkte von GN⁺ 2024-08-07 | 1 Kommentare | Auf WhatsApp teilen

Kubernetes-Controller für persistente Volumes

Überblick

  • Ein Controller, der Kubernetes PersistentVolumes (PV) und PersistentVolumeClaims (PVC) synchronisiert
  • Verwaltet bidirektionale „Zeiger“ zwischen PVC und PV, um Datenverlust zu verhindern
  • Arbeitet im Hochverfügbarkeitsmodus und unterstützt Fälle, in denen ein PVC ein bestimmtes PV anfordert oder ein PV für ein bestimmtes PVC reserviert ist

Hauptfunktionen

  • Synchronisiert regelmäßig den Status von PVCs und PVs
  • Wenn ein PVC kein bestimmtes PV anfordert, findet er das am besten passende PV und bindet es
  • Wenn ein PVC ein bestimmtes PV anfordert, prüft er, ob dieses PV existiert und die Bedingungen erfüllt, und bindet es dann
  • Wenn ein PVC bereits gebunden ist, prüft er den Status und korrigiert ihn bei Bedarf

Funktionsweise

  • Wenn ein PVC erstellt oder aktualisiert wird, wird die Methode syncClaim aufgerufen
  • Wenn ein PVC nicht gebunden ist, wird die Methode syncUnboundClaim aufgerufen
  • Wenn ein PVC gebunden ist, wird die Methode syncBoundClaim aufgerufen
  • Wenn ein PV erstellt oder aktualisiert wird, wird die Methode syncVolume aufgerufen

Wichtige Methoden

syncClaim

  • Ruft je nach Status des PVC syncUnboundClaim oder syncBoundClaim auf

syncUnboundClaim

  • Wenn ein PVC kein bestimmtes PV anfordert, versucht die Methode, das am besten passende PV zu finden und zu binden
  • Wenn ein PVC ein bestimmtes PV anfordert, prüft sie, ob dieses PV existiert und die Bedingungen erfüllt, und bindet es dann

syncBoundClaim

  • Wenn ein PVC bereits gebunden ist, prüft die Methode den Status und korrigiert ihn bei Bedarf

syncVolume

  • Führt je nach Status des PV die passende Aktion aus
  • Wenn ein PV nicht verwendet wird, wird der Status auf „Available“ aktualisiert
  • Wenn ein PV an ein bestimmtes PVC gebunden ist, wird der Status dieses PVC geprüft und bei Bedarf korrigiert

GN⁺-Zusammenfassung

  • Dieses Dokument bietet eine detaillierte Erklärung des Kubernetes-Controllers für persistente Volumes
  • Es hilft dabei, die Binding-Logik zwischen Persistent Volumes und Persistent Volume Claims zu verstehen
  • Behandelt die Funktionsweise im Hochverfügbarkeitsmodus sowie den Umgang mit verschiedenen Ausnahmesituationen
  • Nützliches Material für Entwickler, die sich für das Storage-Management in Kubernetes interessieren
  • Andere Projekte mit ähnlicher Funktionalität sind unter anderem OpenEBS und Rook

1 Kommentare

 
GN⁺ 2024-08-07
Hacker-News-Kommentar
  • Die Space-Shuttle-Software ist sehr stabil und hat kaum Bugs

    • In den letzten drei Versionen gab es jeweils nur einen einzigen Fehler in 420.000 Zeilen
    • Im Vergleich zu kommerziellen Programmen ist die Zahl der Fehler sehr gering
  • Der Code ist generisch und in Go geschrieben, daher etwas ausschweifend

    • Das könnte daran liegen, dass man viel Erfahrung mit Enterprise-Software hat und deshalb den Unterschied zu Systemsoftware spürt
    • Für Mitwirkende am k8s-Projekt könnte es zu viele unnötige Kommentare geben
  • Die Codebasis des neuen Unternehmens ist gut aufgeräumt, sodass es Freude macht, sich darin zu bewegen

    • Es gibt viele Kommentare, und der Code ist gut strukturiert
    • Da das Team klein ist, ist die Codequalität hoch
  • Die Sicherheitsbilanz des Space Shuttle ist nicht gut, daher ist es heute nicht mehr im Einsatz

    • Es ist fraglich, ob die Menschen sich in zehn Jahren noch positiv an das Space Shuttle erinnern werden
  • Mit strukturellem Pattern Matching ließen sich if-/else-Blöcke vereinfachen

    • Es gibt Werkzeuge, die zur Compile-Zeit prüfen können, ob das Matching vollständig ist
  • Der Code ist nicht schlecht und folgt einer einzigen Regel

    • Das ist viel besser als Code in vielen verschiedenen Stilen
  • Link zu einer Diskussion aus dem Jahr 2018 bereitgestellt

  • Es hat Spaß gemacht, einen Kubernetes-CSI-Treiber zu schreiben

    • Amazons EFS- oder EBS-CSI-Treiber sind gute Beispiele für eine kleine Codebasis
    • Der Treiber selbst ist einfach, enthält aber komplexe Logik
  • Dass zu jedem if-Statement ein else gehört, gilt als Sicherheitspraktik

    • Module mit 2.000 Zeilen und Methoden mit 200 Zeilen sind schädlich
    • Kommentare, die erklären, was der Code tut, sind nicht nützlich
  • Erläuterung, wie man bei GitHub-Dateilinks auf einen bestimmten Zeilenbereich verlinkt