Zum Inhalt

Kubernetes Volume Tracking

Überblick

Seit Polycrate API 0.15.0 werden PersistentVolumes in Kubernetes-Clustern als eigenständige Polycrate-Objekte (K8sVolume) erfasst, getrackt und für die Abrechnung genutzt. Das macht sichtbar:

  • Wie viele Volumes laufen wo?
  • Welche Volumes gehören zu welcher K8sApp / welchem Namespace?
  • Wie alt sind sie, wie groß, in welchem Zustand?
  • Welche sind released / orphaned / bound?
  • Was kosten sie?

K8sVolume wird ausschließlich vom Polycrate Operator (CLI) gepflegt – User legen sie nicht manuell an. Der Operator synchronisiert PersistentVolumes im Cluster mit der Polycrate API.


Welche Daten werden getrackt?

Pro PersistentVolume erhält die Polycrate API folgende Metadaten:

Feld Beispiel Bedeutung
name pvc-abc-123 Kubernetes-PV-Name
k8s_cluster → K8sCluster Cluster-Zuordnung
k8s_app → K8sApp (optional) Aus PVC-Namespace/Labels abgeleitete App
namespace production Namespace des zugehörigen PVC
storage_class longhorn, ceph-rbd, hcloud-volumes StorageClass
capacity_bytes 107374182400 (100 GiB) Angefragte Größe
phase Bound, Released, Available Kubernetes-PV-Phase
access_modes [RWO], [RWX] Zugriffsmodi
reclaim_policy Delete, Retain Reclaim-Verhalten
pvc_name / pvc_namespace data-postgres-0 / production Gebundener Claim
provider_object_name / _id technische K8s-Identifier Für Cluster-Sync

Wo sehe ich Volumes?

  • Kubernetes → Volumes – zentrale Liste aller Volumes mit Filter nach Cluster, StorageClass, Phase, App
  • K8sCluster Detail → Tab Volumes – Volumes eines einzelnen Clusters
  • K8sApp Detail → Tab Volumes – Volumes einer App (aus PVC-Labels/Namespace)

Jedes Volume hat eine Detail-Ansicht mit:

  • Overview (Kapazität, Phase, Age)
  • Zugehörige PVC und App
  • Historie (Größenänderungen, Phase-Übergänge)
  • Abrechnungsinformation

Orphaned & Released Volumes

Ein Released Volume (reclaim_policy=Retain, PVC wurde gelöscht, Daten aber behalten) bleibt als Polycrate-K8sVolume sichtbar. Das deckt typische Backup/Recovery-Szenarien ab und verhindert, dass solche Volumes "unsichtbar" Kosten verursachen.

Filter für operative Aufräumarbeiten:

  • phase=Released – Daten liegen, aber niemand nutzt sie
  • phase=Available – provisioniert, aber nie gebunden
  • age > 90d + phase != Bound – Kandidaten für Cleanup

Produktisierung & Abrechnung

K8sVolume ist seit 0.15.0 ein productized model mit Produkt-Kind block-storage. Beim ersten Sync wird automatisch das in System Config → Default K8sVolume Product hinterlegte Produkt zugewiesen. Dadurch werden Volumes Teil der regulären Polycrate-Abrechnung.

Pricing kann je nach Produkt:

  • Flat-Rate pro Volume (z. B. pro-GiB-Monat)
  • Staffelpreise über PricingRule
  • Custom pro Organisation über OrganizationProduct

Details zur Konfiguration: Pricing & Business Layer.


Voraussetzung: Operator-Sync

Damit Volumes in der API erscheinen, muss der Polycrate Operator im Cluster laufen. Der Operator:

  1. Beobachtet alle PersistentVolume-Objekte im Cluster
  2. Erzeugt für jedes PV ein Polycrate-K8sVolume per API-Call
  3. Hält Status, Phase und PVC-Zuordnung aktuell
  4. Entfernt K8sVolumes in der API, wenn das PV im Cluster tatsächlich gelöscht wird (Stale-Sweep)

Sync-Intervall und Label-Filter sind über die OperatorConfig im Cluster konfigurierbar.


Siehe auch