Karriere ~4 Min.

FinOps: Labels und Showback

Kosten sichtbar machen, ohne gleich abzurechnen.

von PlatPrep

Finance schickte eine E-Mail: “Können wir sehen, wieviel Cloud-Kosten Team A und Team B verursachen?” Die technische Antwort kam schnell: “Wir haben Namespace-Labels.” Das reichte nicht — Finance wollte eine Tabelle, aufgeschlüsselt nach Team und Service, idealerweise mit Monatstrend.

Das Kernproblem ist nicht technisch. Es ist organisatorisch: Kosten-Attribution funktioniert nur, wenn die Label-Taxonomie konsistent ist und tatsächlich angewendet wird.

Die Taxonomie — und ihre Durchsetzung

Die Basis für Showback sind wenige, verbindliche Labels: team, environment (prod/staging/dev), service, optional cost-center, wenn Finance auf Kostenstellen bucht. Wichtiger als die Auswahl ist die Disziplin: Ein Label, das nur auf 70 % der Namespaces sitzt, produziert Berichte, denen niemand traut — und ein einziger unglaubwürdiger Bericht beschädigt das ganze Vorhaben. Deshalb gehört die Taxonomie nicht in ein Wiki, sondern in eine Policy:

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: require-cost-labels
spec:
  validationFailureAction: Enforce
  rules:
    - name: check-team-label
      match:
        any:
          - resources:
              kinds:
                - Namespace
      validate:
        message: "Namespaces brauchen team- und environment-Label."
        pattern:
          metadata:
            labels:
              team: "?*"
              environment: "?*"

Bestands-Namespaces fallen durch so eine Policy natürlich nicht um — die müssen einmalig nachgelabelt werden. Erfahrungswert: Diese Aufräumaktion ist der mühsamste Teil des ganzen Projekts, weil bei der Hälfte der alten Namespaces erst einmal niemand weiß, wem sie gehören. Genau diese Erkenntnis ist allerdings schon ein Ergebnis. Mehr zu Kyverno-Patterns gibt es unter Kyverno: Mutate und Generate und im Kyverno-Lernpfad.

Von Labels zu Euro-Beträgen

Kubernetes kennt keine Preise — die Brücke schlagen OpenCost oder Kubecost. Das Allokationsmodell ist wichtig zu verstehen, weil es Diskussionen mit Teams vorwegnimmt: Einem Workload wird das Maximum aus Resource-Request und tatsächlicher Usage zugerechnet. Wer 4 CPU requestet und 0,2 nutzt, zahlt für 4 — denn die Kapazität ist für andere blockiert. Das ist bewusst so, und es ist der Mechanismus, der Teams zum Rightsizing bewegt.

Drei Posten brauchen eine explizite Entscheidung. Idle-Kosten: bezahlte, aber nicht requestete Node-Kapazität — die kann man dem Platform-Team zuschlagen (das für die Cluster-Auslastung verantwortlich ist) oder proportional auf Teams umlegen. Shared Costs: Monitoring, Ingress, cert-manager laufen für alle; üblich ist eine proportionale Umlage. Preisquelle: Listenpreise sind ein Startpunkt, aber erst die Integration der echten Cloud-Abrechnung (bei AWS über die Cost-and-Usage-Reports) berücksichtigt Savings Plans, Reserved Instances und Spot-Preise. Ohne das weichen Showback-Zahlen und Cloud-Rechnung so weit voneinander ab, dass Finance die Berichte anzweifelt.

OpenCost als CNCF-Projekt deckt die Allokations-Basis ab und ist ein guter Einstieg; Kubecost liefert darüber hinaus fertige Trend-Dashboards, Shared-Cost-Regeln und Multi-Cluster-Aggregation. Für den Anfang reicht oft OpenCost plus ein Grafana-Dashboard.

Und nicht vergessen: Der Cluster ist selten die ganze Rechnung. RDS-Instanzen, S3-Buckets, Load Balancer und NAT-Gateways laufen außerhalb von Kubernetes und tauchen in keiner Pod-Allokation auf — bei vielen Teams machen sie die Hälfte der Kosten aus. Die Cloud-Tags dieser Ressourcen müssen derselben Taxonomie folgen wie die Kubernetes-Labels (team, environment, service), sonst gibt es zwei Berichte, die niemand zusammenführen kann. Wer Infrastruktur über Terraform oder Crossplane provisioniert, setzt die Tags dort als Pflichtvariable — derselbe Enforcement-Gedanke wie bei der Kyverno-Policy, nur eine Ebene tiefer.

Showback zuerst, Chargeback vielleicht

Showback heißt: Teams sehen ihre Kosten, ohne dass intern Geld fließt. Chargeback heißt: Die Kosten werden tatsächlich auf Team-Budgets gebucht — das erfordert belastbare Zahlen, einen Streitschlichtungsprozess und Organisationsreife. Der häufigste Fehler ist, mit Chargeback zu starten: Dann diskutieren Teams über die Korrektheit der Umlageformel statt über ihre Architektur.

Mit Showback passiert dagegen etwas erstaunlich Konsistentes: Teams senken überprovisionierte Requests, löschen idle Namespaces, deaktivieren vergessene CronJobs und stellen Dev-Umgebungen nachts ab. Nicht weil sie müssen — weil sie es jetzt sehen. Der Satz “unser Staging kostet mehr als unser Prod” hat schon mehr Aufräumaktionen ausgelöst als jede Policy. Realistische Größenordnung in Clustern, die nie Kostentransparenz hatten: 20 bis 30 Prozent Einsparung allein durch Rightsizing und Aufräumen, ohne eine einzige Architekturänderung. Danach flacht die Kurve ab, und weitere Einsparungen brauchen echte Maßnahmen wie Spot-Instances und Autoscaling — dazu mehr unter Karpenter, Consolidation und Spot.

Der konkrete erste Schritt bleibt unspektakulär: ein wöchentlicher Bericht an Team-Leads mit den eigenen Kosten der letzten sieben Tage, aufgeschlüsselt nach Service, mit Trend zur Vorwoche. Keine Strafen, keine Budgets, keine roten Ampeln. Nur Sichtbarkeit — die Optimierung folgt von selbst. Wer das Thema systematisch angehen will, vom Label-Design bis zur Finance-Kommunikation, findet den Rahmen im FinOps-Lernpfad.