14 Tage kostenlos testen

Kubernetes-Kostenallokation pro Namespace: EKS-, AKS- und GKE-Infrastruktur der Business-GuV zuordnen

Erfahren Sie, wie Plattform-Engineers & CFOs Multi-Cloud-Kubernetes-Kosten auf Namespaces, Pods & GPUs ohne Prometheus-Storage-Sprawl allokieren.

Kubernetes-Kostenallokation pro Namespace: EKS-, AKS- und GKE-Infrastruktur der Business-GuV zuordnen
Figure 1: Architectural overview of Kubernetes-Kostenallokation pro Namespace: EKS-, AKS- und GKE-Infrastruktur der Business-GuV zuordnen.
KERNERKENNTNISSE
  • Canonical cost normalization across AWS, Azure, GCP, Kubernetes, and LLM APIs into FOCUS 1.0 schema.
  • Real-time COGS and gross margin attribution mapped directly to engineering teams and customer tenants.
  • Flat monthly pricing with engineer-executed savings automation, avoiding vendor lock-in or savings tax penalties.

Die Kubernetes-Kostenallokation pro Namespace ist die architektonische Praxis, geteilte Cluster-Compute-, Speicher-, Storage- und Netzwerk-Overheads in diskrete geschäftliche Kostenstellen aufzuteilen. Durch den Abgleich von Container-Ressourcenanforderungen (Requests) mit der tatsächlichen Auslastung und die Zuweisung nicht allokierter Node-Kapazitäten können Engineering-Teams dynamische Amazon EKS-, Azure AKS- und Google Cloud GKE-Infrastrukturen direkt den Gewinn- und Verlustrechnungen (GuV) einzelner Abteilungen zuordnen, ohne das Node-Abrechnungsmodell zu verzerren.

Das Multi-Tenant-Container-Dilemma: Warum Node-Rechnungen die Buchhaltung überfordern

Wenn Unternehmen monolithische Workloads von isolierten virtuellen Maschinen (EC2-Instanzen, Azure VMs oder Google Compute Engine) auf Multi-Tenant-Kubernetes-Cluster migrieren, bricht die Kostentransparenz der Infrastruktur häufig ein. In einer traditionellen VM-Architektur kann eine einzelne Instanz mit Owner, Environment und CostCenter getaggt werden, was einen eindeutigen Posten auf der monatlichen Cloud-Rechnung erzeugt.

Auf einer geteilten Container-Plattform hostet eine einzelne c6i.4xlarge EC2-Instanz oder Standard_D16s_v5 Azure VM jedoch Dutzende Pods verschiedener Produkt-Squads, Plattform-Tools (wie Ingress-Controller, Service-Meshes und Observability-DaemonSets) sowie Batch-Prozessoren.

Standard-Cloud-Rechnungen weisen lediglich die Kosten für die zugrunde liegenden Nodes, persistenten Datenträger und Load Balancer aus. Sie können jedoch nicht aufschlüsseln:

  1. Welches Engineering-Team während Lastspitzen 60 % des Cluster-Arbeitsspeichers verbraucht hat.
  2. Wie viel ungenutzter Overhead durch überdimensionierte CPU-Limits im Vergleich zur aktiven Workload-Ausführung entsteht.
  3. Welchen exakten monetären Anteil spezialisierte GPU-Node-Pools (p4de.24xlarge oder Standard_NC24ads_A100_v4) an der Bereitstellung von Enterprise-KI-Features haben.

Ohne granulare, Namespace- und Label-basierte Kostenzuordnung müssen Finanzteams auf pauschale, ungenaue prozentuale Aufteilungen zurückgreifen. Dies verschleiert die Erosion von Bruttomargen und nimmt Entwicklern den Anreiz, Pod-Spezifikationen zu optimieren.

Die Anatomie der Kubernetes-Kostenallokation: Requests, Auslastung und Idle-Kapazität

Die präzise Aufteilung der physischen Infrastrukturrechnung eines Clusters erfordert die Dekonstruktion der Node-Ökonomie in drei verschiedene Betriebszustände:

+-----------------------------------------------------------------------------+
|                      Physische Node-Kapazität (z. B. 16 vCPU, 64 GB RAM)    |
+------------------------------------+----------------------------------------+
| 1. Aktive Auslastung               | 2. Bereitgestellter Puffer (Headroom)  |
| (Tatsächlich verbrauchte Zyklen)   | (Request minus tatsächliche Nutzung)   |
+------------------------------------+----------------------------------------+
| 3. Nicht allokierte Idle-Kapazität (Ungestartete Ressourcen auf Node)       |
+-----------------------------------------------------------------------------+

1. Ressourcen-Requests vs. tatsächliche Auslastung

In Kubernetes platziert der Scheduler Pods auf Basis ihrer resources.requests, nicht anhand ihres tatsächlichen Laufzeitverbrauchs. Wenn eine Anwendung 4 vCPUs anfordert, im Schnitt aber nur 450 Millicores (0,45 vCPUs) verbraucht, stellt der Cloud-Provider dem Cluster dennoch die vollen 4 vCPUs in Rechnung, da diese Kerne nicht für andere Workloads auf diesem Node eingeplant werden können.

Eine robuste FinOps-Allokations-Engine muss Kosten über beide Dimensionen berechnen:

  • Request-basierte Allokation: Bestimmt die finanzielle Verantwortung basierend auf der zugesagten Kapazität, die von Engineering-Teams reserviert wurde.
  • Auslastungsbasierte Allokation: Identifiziert Optimierungspotenziale, indem sie das monetäre Delta zwischen reservierten Requests und Laufzeitverbrauch aufzeigt.

2. Zuordnung nicht allokierter (Idle) Node-Kapazität

Cluster erreichen selten eine Packungsdichte (Bin-Packing) von 100 %. Nodes weisen ungenutzte Kapazitäten auf, bedingt durch Autoscaling-Schwellenwerte, Pod-Anti-Affinity-Regeln und notwendigen Headroom für Failover-Spitzen. Wenn ein 16-Core-Node Pods hostet, die insgesamt 12 Cores anfordern, stellen die verbleibenden 4 Cores (25 % der stündlichen Node-Kosten) ungenutzte Leerlaufkapazität (Idle) dar.

Plattform-Teams müssen eine konsistente Governance-Richtlinie für diese Idle-Kosten definieren:

  • Geteilte Plattformkosten (Proportional): Verteilung der Leerlaufkosten auf Mandanten-Namespaces proportional zu deren aktiven Ausgaben.
  • Zentraler Overhead (Plattform-Zuschlag): Direkte Zuweisung der Idle-Kapazität an das Budget der Core Infrastructure oder des Platform Engineerings.
  • Gleichmäßige Aufteilung: Gleichmäßige Aufteilung der Idle-Kosten über alle aktiven Mandanten-Namespaces.

3. Geteilte Cluster-Infrastruktur & DaemonSets

Jeder Produktionscluster betreibt System-DaemonSets, die erhebliche Ressourcen beanspruchen: AWS VPC CNI, kube-proxy, CoreDNS, Datadog/Prometheus-Agenten, Cilium- oder Istio-Service-Meshes und Fluentbit-Log-Forwarder. Diese Dienste müssen als geteilter Plattform-Overhead normalisiert werden, anstatt sie unfairerweise dem ersten Tenant-Pod anzurechnen, der auf einem Worker-Node bereitgestellt wird.

Architektonischer Vergleich: Native Exporter vs. Legacy-In-Cluster-Monitoring

Bei der Implementierung von Container-Kostentransparenz wählen Engineering-Teams typischerweise zwischen leichtgewichtigen CNCF-Open-Source-Exportern (wie OpenCost) oder komplexen proprietären In-Cluster-Monitoring-Stacks (wie eigenständigen Kubecost-Deployments).

Bewertungsdimension CNCF OpenCost + CostGlass Standalone Kubecost / Legacy Monitoring Native Cloud-Provider-Add-ons (z. B. AWS Cost Allocation)
Architektonischer Footprint Leichtgewichtiger DaemonSet/CronJob (<100m CPU, <150MB RAM) Schwerfällige Prometheus-, Thanos- und Grafana-Stateful-Speicher CloudWatch-Agent oder Metrik-Stream-Ingestion
In-Cluster-Storage-Overhead Kein lokaler Speicher; streamt schlanke Kostenmetriken an SaaS 50GB–500GB+ Persistent Volumes für lokale TSDB-Speicherung Abhängig von CloudWatch-Retention-Tiers
Gesamter Cloud-Kontext Vereinheitlicht über alle 13 Provider (EKS + RDS + S3 + Datadog + AI) Isolierte Container-Ansicht; blind für 70 % der Cloud-Rechnung Nur AWS; blind für Azure, GCP, Datadog, Snowflake oder OpenAI
GPU- & Carbon (CO2e)-Metriken Native GPU-Zuordnung und Cloud-Carbon-Footprint-Berechnungen Unterstützt über proprietäre Zusatzmodule Eingeschränkt oder auf Pod-Ebene nicht verfügbar
Kommerzielles Modell Vorhersehbare Plattform-Flatrate; 0 $ zusätzliche Add-on-Gebühren Jahresverträge, Node- oder Ausgaben-basierte Aufschläge Ingestionsgebühren für CloudWatch-Metriken
Umsetzung von Optimierungen Erfahrene FinOps-Engineers erstellen Terraform-Rightsizing-PRs Passive Alerts und Empfehlungen verbleiben in Jira-Backlogs Statische Konsolen-Dashboards mit manueller Fehlerbehebung

Die Entwicklungsfalle eigener DIY-Kubernetes-Allokations-Pipelines

Viele Plattform-Engineering-Teams versuchen, die Container-Kostenzuordnung intern zu lösen, indem sie Prometheus bereitstellen, cAdvisor-Metriken scrapen, benutzerdefinierte CronJobs für AWS-Pricing-APIs schreiben und interne SQL-Aggregationsskripte pflegen.

Obwohl dies als initiales Proof of Concept technisch machbar ist, stellt der Bau einer maßgeschneiderten Multi-Cluster-Kostenallokations-Pipeline eine teure operative Falle dar, die Engineering-Roadmaps blockiert:

  1. Fragile Synchronisation von Cloud-Preislisten: Die Übersetzung von CPU- und Memory-Kernen in akkurate Stundensätze erfordert die Berücksichtigung von Reserved Instances, Savings Plans, Committed Use Discounts, Enterprise Discount Programs (EDP), Spot-Preisschwankungen und regionsspezifischen Differenzen. Interne Skripte greifen häufig auf öffentliche Listenpreise zurück, was zu Zahlen führt, die die Finanzabteilung nicht mit der tatsächlichen Cloud-Rechnung abgleichen kann.
  2. Prometheus-Überlastung durch hohe Kardinalität: Das sekundengenaue Erfassen von Pod-, Container-, Namespace- und Label-Metriken über Hunderte von Nodes erzeugt eine extreme Zeitreihenkardinalität. Interne Monitoring-Teams verbringen Dutzende Stunden damit, Scrape-Intervalle anzupassen, beschädigte lokale Speicher-Volumes zu reparieren und Thanos-Compaction-Jobs zu verwalten, nur um die Kosten-Dashboards online zu halten.
  3. Schema-Drift und Kubernetes-API-Upgrades: Upstream-Kubernetes-API-Deprecations, Änderungen beim Node-Autoscaling (wie Karpenter, das dynamisch unterschiedliche Instanztypen nutzt) und Updates von Cloud-Billing-Schemata erfordern kontinuierliche Wartung. Teams investieren jährlich über 120.000 $ an Gehältern für Senior Platform Engineers in die Pflege eines internen Tools, das keinen kundenrelevanten Produktwert schafft.

Anstatt kritische Engineering-Kapazitäten für den Bau und Betrieb interner Billing-Extraktoren aufzuwenden, setzen zukunftsorientierte Unternehmen auf schlüsselfertige Plattformen, die Standard-Container-Telemetrie erfassen und diese automatisch mit den abgeglichenen Cloud-Rechnungsdaten harmonisieren.

So konfigurieren Sie die Kubernetes-Kostenallokation in CostGlass

CostGlass normalisiert Multi-Cloud-Kubernetes-Telemetrie mithilfe der leichtgewichtigen Open-Source-Spezifikation CNCF OpenCost und kombiniert Container-Ressourcennutzung direkt mit maßgeblichen Cloud-Billing-Datensätzen (einschließlich AWS CUR 2.0, Azure MCA und GCP BigQuery).

Schritt 1: Bereitstellung des leichtgewichtigen OpenCost-Exporters

Deployen Sie den minimalen OpenCost-Collector via Helm auf Ihrem Amazon EKS-, Azure AKS-, Google Cloud GKE- oder Oracle OKE-Cluster. Der Exporter läuft als ressourcenschonender Dienst, der Ressourcenmetriken auf Pod-Ebene berechnet, ohne lokalen persistenten Prometheus-Speicher zu benötigen.

helm repo add opencost https://opencost.github.io/opencost-helm-chart
helm repo update

helm install opencost opencost/opencost \
  --namespace costglass-system \
  --create-namespace \
  --set opencost.exporter.extraEnv.CLUSTER_ID="production-eks-eu-west-2" \
  --set opencost.exporter.resources.requests.cpu="50m" \
  --set opencost.exporter.resources.requests.memory="128Mi" \
  --set opencost.exporter.resources.limits.cpu="200m" \
  --set opencost.exporter.resources.limits.memory="256Mi"

Schritt 2: Verbinden des Clusters in CostGlass

  1. Navigieren Sie zu Integrations -> Kubernetes (#finops:kubernetes).
  2. Wählen Sie Add Cluster und geben Sie Ihren eindeutigen Cluster-Identifier ein (production-eks-eu-west-2).
  3. Konfigurieren Sie Ihren API-Key oder Telemetrie-Endpunkt. CostGlass beginnt mit der Erfassung von Pod-, Controller-, Namespace- und GPU-Nutzungsmetriken in einem 6-Stunden-Intervall und gleicht Ihre Cluster-Telemetrie automatisch mit den Abrechnungsdaten Ihres Cloud-Providers ab.

Schritt 3: Echtzeit-Namespace-Allokation & Idle-Zuordnung einsehen

Öffnen Sie das Dashboard der Dokumentation zu Kubernetes-Kosten, um Allokationsmatrizen in Echtzeit zu analysieren. CostGlass schlüsselt direkt auf:

  • Monatliche Gesamtkosten (Run Rate) pro Namespace: Absolute Kosten in Dollar pro Namespace, einschließlich Compute, Memory, Persistent Storage und Netzwerk.
  • Delta zwischen Request und tatsächlicher Nutzung: Visualisierung überprovisionierter Namespaces, in denen Teams signifikante Kapazitäten reserviert haben, die ungenutzt blieben.
  • CO2-Fußabdruck (CO2e): Tatsächliche Upstream-Emissionen, berechnet pro Cluster und Namespace unter Verwendung standardisierter Koeffizienten des Cloud Carbon Footprint.
+---------------------------------------------------------------------------------+
| CostGlass Kubernetes Allocation: production-eks-eu-west-2                       |
+------------------+---------------+----------------+---------------+-------------+
| Namespace        | Billed Spend  | Idle Overhead  | Pod Efficiency| Carbon CO2e |
+------------------+---------------+----------------+---------------+-------------+
| payments-api     | $2,450.12     | $312.40        | 82.4%         | 142.1 kg    |
| search-indexing  | $4,120.80     | $1,420.10      | 41.2%         | 310.8 kg    |
| platform-system  | $890.50       | $110.20        | 88.1%         | 52.3 kg     |
| data-ml-gpu      | $8,940.00     | $640.50        | 91.5%         | 620.0 kg    |
+------------------+---------------+----------------+---------------+-------------+

Schritt 4: Namespaces mit Virtual Tagging Geschäftsbereichen zuordnen

Viele Cluster betreiben Third-Party- oder Legacy-Namespaces, denen saubere Kubernetes-Labels fehlen. Anstatt von Entwicklern zu verlangen, Helm-Charts anzupassen oder GitOps-Deployment-Pipelines über Dutzende Microservices hinweg auszulösen, navigieren Sie zu Virtual Tagging (#finops:virtual-tags).

Erstellen Sie eine Virtual-Tag-Regel, die komplexe Geschäftslogik in einen automatisierten Allokationsausdruck übersetzt:

  • Bedingung: Wenn kubernetes_namespace mit payments- oder billing- beginnt -> Weise zu: BusinessUnit = FinTech Operations.
  • Bedingung: Wenn kubernetes_namespace gleich search-indexing ist -> Weise zu: BusinessUnit = Core Product.
  • Bedingung: Wenn kubernetes_namespace monitoring oder ingress enthält -> Weise zu: BusinessUnit = Shared Infrastructure.

CostGlass wendet diese Regeln rückwirkend auf alle historischen und eingehenden Container-Telemetriedaten an und erstellt revisionssichere Showback- und Chargeback-Matrizen, ohne In-Cluster-Konfigurationen zu verändern.

Der Business Case für das Management: Alignment von CFO & CTO

Die Implementierung von Container-Kostenallokation ist nicht nur eine technische Aufräumübung; sie verändert die Wirtschaftlichkeit von Softwareunternehmen grundlegend:

1. Sicherung von Bruttomarge und Unit Economics

Wenn ein SaaS-Unternehmen Enterprise-Kunden auf geteilten Clustern bedient, müssen die Kosten für Container-Compute einzelnen Mandanten zugerechnet werden. Die Zusammenführung von Kubernetes-Namespace-Telemetrie mit Unit-Economics-Metriken ermöglicht es CFOs, die tatsächlichen Herstellungskosten (Cost of Goods Sold, COGS) pro Transaktion, pro API-Aufruf oder pro Mandant zu berechnen – und verhindert so, dass Infrastrukturausgaben die operativen Margen schmälern.

2. Abbau passiver Empfehlungs-Backlogs

Die meisten FinOps-Plattformen generieren lediglich endlose Rightsizing-Alerts, die über Quartale hinweg unberührt in Jira liegen bleiben. CostGlass verbindet Software-Telemetrie im Scale-Tarif mit dedizierten Senior DevOps- und FinOps-Engineers.

Anstatt Ihre internen Teams mit Backlogs zur Container-Optimierung zu belasten, analysieren CostGlass-Ingenieure den p95-Headroom für CPU und Memory, erstellen getestete Terraform- und Helm-Pull-Requests zur Anpassung von Pod-Ressourcenspezifikationen und führen freigegebene Optimierungen direkt in Ihren Repositories aus.

3. Vorhersehbare Pauschalpreise statt prozentualer Abgaben

Legacy-Monitoring-Tools und moderne FinOps-Wettbewerber bestrafen die Container-Nutzung häufig durch zusätzliche Add-on-Gebühren (wie Finouts +25 % Aufschlag für Kubernetes-Allokation) oder verlangen eine prozentuale Beteiligung an Cloud-Ausgaben oder Einsparungen.

CostGlass setzt auf transparente, planbare monatliche Festpreise: Unternehmen behalten 100 % jedes eingesparten Dollars aus Container-Rightsizing, Rückgewinnung ungenutzter Nodes und Commitment-Optimierung – ohne überraschende Rechnungserhöhungen.

Häufig gestellte Fragen (FAQ)

Wie berechnet CostGlass die exakten Kosten eines einzelnen Kubernetes-Pods?

CostGlass ermittelt Pod-Kosten, indem es die maßgeblichen, amortisierten stündlichen Kosten des Nodes aus dem zugrunde liegenden Cloud-Billing-Export (AWS CUR 2.0, Azure MCA oder GCP BigQuery) heranzieht und diese basierend auf den Ressourcenreservierungen des Pods (CPU, Memory, Storage und GPU) im Verhältnis zur gesamten allokierbaren Node-Kapazität verteilt. Dadurch spiegeln die Pod-Kosten tatsächliche Unternehmensrabatte, Savings Plans und Spot-Preise wider, anstatt synthetische öffentliche Listenpreise zu nutzen.

Kann CostGlass Kosten für spezialisierte GPU-Node-Pools zuordnen?

Ja. CostGlass schlüsselt GPU-Infrastrukturen (wie NVIDIA A100-, H100- und L4-Instanzen) nativ über Namespaces und Workloads hinweg auf. Teams, die Machine-Learning-Inferenz- oder -Trainingsjobs ausführen, können KI-Container-Ausgaben präzise von Standard-Anwendungs-Compute trennen und direkt den Unit Economics auf Feature-Ebene zuordnen.

Verursacht die Installation des OpenCost-Exporters Sicherheitsrisiken oder Performance-Overhead?

Nein. Der CNCF OpenCost-Exporter arbeitet mit Least-Privilege-Read-Only-Berechtigungen innerhalb des Clusters. Er benötigt keinen Root-Zugriff, nimmt keine Änderungen am Cluster-Status vor und verbraucht weniger als 50m CPU und 128 MB RAM. Es werden zu keinem Zeitpunkt Anwendungsdaten oder Kunden-Payloads analysiert, sondern ausschließlich Metadaten zur Ressourcenauslastung erfasst.

Um blinde Flecken bei Multi-Tenant-Containern zu beseitigen, erkunden Sie unsere Dokumentation zu Kubernetes-Kosten, informieren Sie sich über unsere transparenten Pauschaltarife auf der CostGlass-Preisseite oder sehen Sie im Vergleich CostGlass vs. Kubecost, wie wir im Vergleich zu Einzellösungen abschneiden.

Ready to unify your multi-cloud costs?

See your AWS, Azure, GCP, and Kubernetes spend in canonical FOCUS 1.0 in under 15 minutes.

Start 14-day free trial →

Mehr aus dem Blog

Alle ansehen →