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 siephase=Available– provisioniert, aber nie gebundenage > 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:
- Beobachtet alle
PersistentVolume-Objekte im Cluster - Erzeugt für jedes PV ein Polycrate-
K8sVolumeper API-Call - Hält Status, Phase und PVC-Zuordnung aktuell
- 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¶
- Operator (CLI) – Sync-Details und Konfiguration
- Pricing & Business Layer
- Release API 0.15.0 – Einführung K8sVolume + Produktisierung
- Prometheus-Metriken – Volume-Kapazität als Metrik