<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Aleksei Aleinikov</title>
    <description>The latest articles on DEV Community by Aleksei Aleinikov (@aleksei_aleinikov).</description>
    <link>https://dev.to/aleksei_aleinikov</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2950325%2F67548842-b25f-4c39-84ef-bc470e23aa8d.jpg</url>
      <title>DEV Community: Aleksei Aleinikov</title>
      <link>https://dev.to/aleksei_aleinikov</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aleksei_aleinikov"/>
    <language>en</language>
    <item>
      <title>Kubernetes Autoscaling: Drei Controller, die nicht miteinander reden</title>
      <dc:creator>Aleksei Aleinikov</dc:creator>
      <pubDate>Wed, 26 Aug 2026 10:00:00 +0000</pubDate>
      <link>https://dev.to/aleksei_aleinikov/kubernetes-autoscaling-drei-controller-die-nicht-miteinander-reden-1ke</link>
      <guid>https://dev.to/aleksei_aleinikov/kubernetes-autoscaling-drei-controller-die-nicht-miteinander-reden-1ke</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0m0y534ki73398dlvhi5.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0m0y534ki73398dlvhi5.webp" alt="Kubernetes Autoscaling: Drei Controller, die nicht miteinander reden" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Die meisten Teams installieren alle drei Kubernetes-Autoscaler und nehmen an, daraus ergebe sich ein System. Tut es nicht. HPA, VPA und der Node-Autoscaler sind drei unabhängige Controller ohne gemeinsamen Zustand und ohne Abstimmungsprotokoll.&lt;/p&gt;

&lt;p&gt;Was sie teilen, ist ein Input: &lt;strong&gt;Resource Requests&lt;/strong&gt;. Jeder von ihnen liest Requests, um zu entscheiden. Keiner liest, was Ihre Anwendung tatsächlich verbraucht — außer indirekt. Sind die Requests falsch, degradieren alle drei gleichzeitig. Leise, ohne ein einziges Fehler-Event.&lt;/p&gt;

&lt;p&gt;Dies ist eine Tour durch die Mechanik, die wirklich darüber entscheidet, ob Ihr Cluster skaliert oder nur flattert.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flyv0x9noh486t45yahem.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flyv0x9noh486t45yahem.webp" alt="Die drei Ebenen des Kubernetes-Autoscalings — HPA ändert die Replica-Anzahl, VPA die Pod-Größe, der Node-Autoscaler die Maschinenanzahl — alle lesen dieselben Resource Requests, ohne sich abzustimmen" width="800" height="440"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Drei Controller, drei Objekte, ein gemeinsamer Input und null Koordination.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Was jede Ebene tatsächlich ändert
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Ändert&lt;/th&gt;
&lt;th&gt;Lebt in&lt;/th&gt;
&lt;th&gt;Liest&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HPA&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Replica-Anzahl&lt;/td&gt;
&lt;td&gt;Kubernetes-Kern-API&lt;/td&gt;
&lt;td&gt;Metrics API, Requests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;VPA&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CPU-/Memory-Requests&lt;/td&gt;
&lt;td&gt;Add-on-CRD&lt;/td&gt;
&lt;td&gt;Metrics API, Historie, OOM-Events&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Node-Autoscaler&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Anzahl Maschinen&lt;/td&gt;
&lt;td&gt;Add-on + Cloud-API&lt;/td&gt;
&lt;td&gt;Ausstehende Pods, Requests&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Nur HPA gehört zum Lieferumfang von Kubernetes. VPA ist eine separate Installation mit drei eigenen Komponenten. Node-Autoscaling braucht eine Cloud-Anbieter-Integration. Diese Asymmetrie zählt bei der Fehlersuche: Zwei der drei haben Sie selbst hinzugefügt.&lt;/p&gt;
&lt;h2&gt;
  
  
  HPA: Die Formel ist einfacher als gedacht
&lt;/h2&gt;

&lt;p&gt;Der Controller läuft in einer Schleife — standardmäßig alle 15 Sekunden — und rechnet:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;desiredReplicas = ceil[currentReplicas × ( currentMetricValue / desiredMetricValue )]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;p&gt;Das ist die ganze Idee. Aktueller Wert doppelt so hoch wie das Ziel? Doppelte Replica-Zahl. Halb so hoch? Halbieren.&lt;/p&gt;

&lt;p&gt;Drei Eigenschaften dieser Formel verursachen die meisten Überraschungen im Betrieb.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Auslastung wird gegen Requests gemessen, nicht gegen Limits.&lt;/strong&gt; Mit &lt;code&gt;averageUtilization: 60&lt;/code&gt; sagen Sie: „Halte den Durchschnittsverbrauch bei 60% dessen, was die Pods angefordert haben.“ Der Request ist der Nenner. Deshalb sind Requests kein bloßer Scheduling-Hinweis — sie sind die Kalibrierung Ihres Autoscalers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kleine Änderungen werden übersprungen.&lt;/strong&gt; Liegt das Verhältnis nahe genug bei 1,0, passiert nichts. Die Standardtoleranz beträgt clusterweit 10%. Ein Workload bei 105% seines Ziels skaliert nicht — und kein Event erklärt die Untätigkeit. Kubernetes 1.35 hat ein &lt;code&gt;tolerance&lt;/code&gt;-Feld pro HPA als Beta ergänzt, sodass Sie es für einen einzelnen Workload verschärfen können:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;
&lt;span class="na"&gt;behavior&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;scaleUp&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

    &lt;span class="na"&gt;tolerance&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.05&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;p&gt;Vorher ging das nur über das Flag &lt;code&gt;--horizontal-pod-autoscaler-tolerance&lt;/code&gt; am Controller Manager — mit Wirkung auf jeden Workload im Cluster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bei mehreren Metriken gewinnt das Maximum.&lt;/strong&gt; Geben Sie CPU, Memory und eine eigene Queue-Metrik an, berechnet HPA aus jeder eine gewünschte Replica-Zahl und nimmt die größte. Ein ODER, keine Mischung. Eine zusätzliche Metrik kann Ihren Workload nur vergrößern.&lt;/p&gt;

&lt;h2&gt;
  
  
  Der stille Fehler: kein Request, kein Autoscaling
&lt;/h2&gt;

&lt;p&gt;Das ist die häufigste Ursache für ein totes HPA und verdient einen eigenen Abschnitt — wegen der &lt;em&gt;Art&lt;/em&gt;, wie es scheitert.&lt;/p&gt;

&lt;p&gt;Fehlt einem Container im Pod der relevante Resource Request, ist die CPU-Auslastung für diesen Pod undefiniert, und der Autoscaler unternimmt für diese Metrik nichts.&lt;/p&gt;

&lt;p&gt;Kein Fehler. Kein Warn-Event. &lt;code&gt;kubectl get hpa&lt;/code&gt; zeigt das Objekt an. In der Spalte &lt;code&gt;TARGETS&lt;/code&gt; steht &lt;code&gt;&amp;lt;unknown&amp;gt;&lt;/code&gt; — leicht zu lesen als „sammelt noch Metriken“ statt als „dauerhaft kaputt“.&lt;/p&gt;

&lt;p&gt;Die Behebung ist trivial, sobald man es weiß. Das Herausfinden ist der teure Teil:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Terminal window&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
kubectl get hpa &lt;span class="nt"&gt;-A&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; custom-columns&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;

NS:.metadata.namespace,NAME:.metadata.name,TARGETS:.status.currentMetrics
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;p&gt;Was nach einigen Minuten keine aktuellen Metriken zeigt, wärmt sich nicht auf. Es ist falsch konfiguriert.&lt;/p&gt;

&lt;h2&gt;
  
  
  Der zweite stille Fehler: Ihr Sidecar verwässert das Signal
&lt;/h2&gt;

&lt;p&gt;HPA summiert den Ressourcenverbrauch über alle Container im Pod. Die Dokumentation weist ausdrücklich darauf hin, dass dies den Verbrauch einzelner Container nicht abbildet — ein Container kann heißlaufen, während der Pod-Durchschnitt entspannt aussieht und HPA nie hochskaliert.&lt;/p&gt;

&lt;p&gt;Service Meshes und Logging-Sidecars machen das zum Regelfall. Ein Anwendungscontainer bei 95% seines Requests, gepaart mit einem untätigen Sidecar bei 5%, ergibt einen unauffälligen Durchschnitt.&lt;/p&gt;

&lt;p&gt;Seit Kubernetes 1.30 gibt es dafür eine stabile Lösung — auf einen benannten Container skalieren statt auf den Pod:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;
&lt;span class="na"&gt;metrics&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ContainerResource&lt;/span&gt;

    &lt;span class="na"&gt;containerResource&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cpu&lt;/span&gt;

      &lt;span class="na"&gt;container&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application&lt;/span&gt;

      &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Utilization&lt;/span&gt;

        &lt;span class="na"&gt;averageUtilization&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;60&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;p&gt;Eine Feinheit: Benennen Sie diesen Container um, müssen Sie das HPA &lt;em&gt;vor&lt;/em&gt; dem Rollout auf beide Namen einstellen — sonst wird die Empfehlung mitten im Rollout blind.&lt;/p&gt;

&lt;h2&gt;
  
  
  Schnell hoch, langsam runter — mit Absicht
&lt;/h2&gt;

&lt;p&gt;Das Standardverhalten ist bewusst asymmetrisch, und Missverständnisse darüber produzieren viele falsche Fehlermeldungen.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Stabilisierungsfenster&lt;/th&gt;
&lt;th&gt;Ratenbegrenzung&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Hochskalieren&lt;/td&gt;
&lt;td&gt;0 Sekunden&lt;/td&gt;
&lt;td&gt;100% der Replicas oder 4 Pods je 15s, je nachdem was größer ist&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Herunterskalieren&lt;/td&gt;
&lt;td&gt;300 Sekunden&lt;/td&gt;
&lt;td&gt;100% je 15s, nach dem Fenster&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Hochskalieren erfolgt sofort. Beim Herunterskalieren betrachtet der Algorithmus alle Empfehlungen der letzten fünf Minuten und nimmt die &lt;strong&gt;höchste&lt;/strong&gt; — ein gleitendes Maximum, das verhindert, dass Pods entfernt werden, die kurz darauf wieder gebraucht würden.&lt;/p&gt;

&lt;p&gt;Wenn also jemand meldet, „das HPA skaliert nicht herunter“, arbeitet es meist exakt wie entworfen und die Person schaut auf ein Fünf-Minuten-Fenster. Wenn Sie es wirklich schneller brauchen:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;
&lt;span class="na"&gt;behavior&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;scaleDown&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

    &lt;span class="na"&gt;stabilizationWindowSeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;60&lt;/span&gt;

    &lt;span class="na"&gt;policies&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Percent&lt;/span&gt;

        &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;

        &lt;span class="na"&gt;periodSeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;60&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;p&gt;Auch im Deployment lauert eine Falle. Behalten Sie &lt;code&gt;spec.replicas&lt;/code&gt; in einem Manifest, das ein HPA verwaltet, setzt jedes &lt;code&gt;kubectl apply&lt;/code&gt; die Zahl auf den Wert aus der Datei zurück — und das HPA zieht sie wieder hin. Genau dieser Kampf sieht auf dem Dashboard wie Flattern aus. Entfernen Sie das Feld, sobald das HPA den Workload besitzt.&lt;/p&gt;

&lt;h2&gt;
  
  
  VPA: anderes Problem, andere Fehlerart
&lt;/h2&gt;

&lt;p&gt;Der VerticalPodAutoscaler beantwortet eine Frage, die HPA nicht kann: Wie groß sollte jeder Pod sein? Er besteht aus drei Komponenten — einem &lt;strong&gt;Recommender&lt;/strong&gt; , der Verbrauchshistorie, Spitzen und OOM-Events auswertet, einem &lt;strong&gt;Updater&lt;/strong&gt; , der Änderungen anwendet, und einem &lt;strong&gt;Admission-Controller-Webhook&lt;/strong&gt; , der die empfohlenen Requests in neue Pods injiziert.&lt;/p&gt;

&lt;p&gt;Der Update-Modus ist die eigentliche Entscheidung:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Modus&lt;/th&gt;
&lt;th&gt;Verhalten&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Off&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Nur empfehlen. Nichts wird angewendet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Initial&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Requests bei Pod-Erstellung setzen, danach nie wieder.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Recreate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pods evakuieren, wenn Requests von der Empfehlung abweichen.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;InPlaceOrRecreate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Wenn möglich in-place ändern, sonst evakuieren.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;InPlace&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;In-place ändern, nie evakuieren — stattdessen aufschieben und erneut versuchen.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Auto&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Seit VPA 1.4.0 veraltet. Alias für &lt;code&gt;Recreate&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Beginnen Sie mit &lt;code&gt;Off&lt;/code&gt;. Das ist für sich genommen wertvoll: Der Recommender schreibt Zielwert, untere und obere Schranke nach &lt;code&gt;.status.recommendation&lt;/code&gt; — ein kostenloses Rightsizing-Audit ohne Produktionsrisiko.&lt;/p&gt;

&lt;h2&gt;
  
  
  Die große Änderung 2026 — und ein Widerspruch in der Doku
&lt;/h2&gt;

&lt;p&gt;Jahrelang lautete der ehrliche Einwand gegen VPA, vertikales Skalieren bedeute, den Pod zu töten. &lt;strong&gt;In-Place Pod Resize ist seit Kubernetes 1.35 stable&lt;/strong&gt; und standardmäßig aktiv. CPU und Memory eines laufenden Containers lassen sich jetzt ändern:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Terminal window&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
kubectl patch pod my-pod &lt;span class="nt"&gt;--subresource&lt;/span&gt; resize &lt;span class="nt"&gt;--patch&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;

  &lt;span class="s1"&gt;'{"spec":{"containers":[{"name":"app",

     "resources":{"requests":{"cpu":"800m"},"limits":{"cpu":"800m"}}}]}}'&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;p&gt;Eine Policy je Ressource steuert, ob ein Neustart nötig ist — bei Memory meist ja, weil die wenigsten Runtimes ihren Heap spontan verkleinern:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;
&lt;span class="na"&gt;resizePolicy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;resourceName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cpu&lt;/span&gt;

    &lt;span class="na"&gt;restartPolicy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;NotRequired&lt;/span&gt; &lt;span class="c1"&gt;# Standard&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;resourceName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;memory&lt;/span&gt;

    &lt;span class="na"&gt;restartPolicy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;RestartContainer&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;p&gt;&lt;strong&gt;Hier muss ich etwas kennzeichnen.&lt;/strong&gt; Die Kubernetes-Dokumentation widerspricht sich, ob VPA das nutzen kann. Die Autoscaling-Übersichtsseite hält fest, VPA unterstütze In-Place-Resizing ab 1.36 nicht. Die VPA-Seite dokumentiert &lt;code&gt;InPlaceOrRecreate&lt;/code&gt; und &lt;code&gt;InPlace&lt;/code&gt; vollständig und vermerkt, &lt;code&gt;InPlace&lt;/code&gt; sei Alpha in VPA 1.7.0 und erfordere Kubernetes 1.33+ mit dem Gate &lt;code&gt;InPlacePodVerticalScaling&lt;/code&gt; sowie &lt;code&gt;InPlace&lt;/code&gt;-Gates auf Updater und Admission Controller.&lt;/p&gt;

&lt;p&gt;Die VPA-Seite wurde später überarbeitet, die Übersicht ist also vermutlich veraltet. Auflösen ließ sich das aus der Doku allein nicht — prüfen Sie Ihre installierte VPA-Version und testen Sie außerhalb der Produktion, bevor Sie jemandem neustartfreies Rightsizing versprechen.&lt;/p&gt;

&lt;p&gt;Unabhängig vom Modus wichtig: &lt;strong&gt;Ein Resize kann die QoS-Klasse des Pods nicht ändern.&lt;/strong&gt; Ein Guaranteed-Pod muss danach weiter Requests gleich Limits haben. Ein Burstable-Pod kann nicht zu Guaranteed werden. Windows-Pods werden gar nicht unterstützt. Passt ein Resize nicht auf den Node, erhält der Pod die Condition &lt;code&gt;PodResizePending&lt;/code&gt; mit &lt;code&gt;reason: Infeasible&lt;/code&gt; — darauf sollten Sie alarmieren, denn sonst sagt es Ihnen nichts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Warum HPA und VPA sich in die Quere kommen
&lt;/h2&gt;

&lt;p&gt;Setzen Sie beide auf CPU an und folgen Sie der Arithmetik.&lt;/p&gt;

&lt;p&gt;HPA berechnet die Auslastung als &lt;code&gt;Verbrauch / Request&lt;/code&gt;. Die gesamte Aufgabe von VPA ist es, &lt;code&gt;Request&lt;/code&gt; zu ändern.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;VPA beobachtet niedrigen Verbrauch und senkt den Request.&lt;/li&gt;
&lt;li&gt;Dieselbe unveränderte Anwendung zeigt nun deutlich höhere Auslastung — der Nenner ist geschrumpft.&lt;/li&gt;
&lt;li&gt;HPA sieht die Auslastung über dem Ziel und fügt Replicas hinzu.&lt;/li&gt;
&lt;li&gt;Die Last verteilt sich auf mehr Pods, der Verbrauch pro Pod sinkt.&lt;/li&gt;
&lt;li&gt;VPA beobachtet niedrigen Verbrauch und senkt den Request erneut.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Kein Controller ist defekt. Beide bewegen Zähler und Nenner desselben Bruchs, ohne voneinander zu wissen.&lt;/p&gt;

&lt;p&gt;Kombinationen, die in der Praxis funktionieren:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;VPA auf Memory, HPA auf CPU.&lt;/strong&gt; Verschiedene Ressourcen, kein gemeinsamer Bruch. Die verbreitetste Paarung.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VPA im Modus &lt;code&gt;Off&lt;/code&gt;.&lt;/strong&gt; Empfehlungen gehen an einen Menschen oder eine Pipeline, nicht an den laufenden Workload.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VPA per &lt;code&gt;controlledResources&lt;/code&gt; eingegrenzt&lt;/strong&gt; , sodass es die Ressource von HPA nie anfasst:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;
&lt;span class="na"&gt;resourcePolicy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;containerPolicies&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;containerName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application"&lt;/span&gt;

      &lt;span class="na"&gt;controlledResources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;memory"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

      &lt;span class="na"&gt;controlledValues&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;RequestsOnly&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;p&gt;&lt;code&gt;controlledValues: RequestsOnly&lt;/code&gt; verdient eine Anmerkung. Der Standard ist &lt;code&gt;RequestsAndLimits&lt;/code&gt; — dabei skaliert das Limit proportional mit, um Ihr Verhältnis von Request zu Limit zu wahren. Haben Sie bewusst einen großen Abstand für Burst-Reserven gesetzt, wandert dieser Abstand mit. Das kann genau richtig sein — oder Ihre Limits still weit über das Gewollte hinauswachsen lassen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fauiwroid5vads49pclm2.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fauiwroid5vads49pclm2.webp" alt="Die Rückkopplung zwischen HPA und VPA auf derselben CPU-Ressource: VPA senkt den Request, die gemessene Auslastung steigt, HPA fügt Replicas hinzu, der Verbrauch pro Pod sinkt, VPA senkt den Request erneut" width="800" height="427"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Nichts ist kaputt. Beide Controller bearbeiten korrekt gegenüberliegende Hälften desselben Bruchs.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Die Node-Ebene: Provisioning und Konsolidierung
&lt;/h2&gt;

&lt;p&gt;Unter beiden Pod-Autoscalern sitzt der Node-Autoscaler, der zwei Dinge tut, welche die Kubernetes-Doku inzwischen ausdrücklich benennt:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Provisioning&lt;/strong&gt; — Nodes hinzufügen, damit ausstehende Pods geplant werden können. Früher Scale-up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Konsolidierung&lt;/strong&gt; — unterausgelastete Nodes entfernen. Früher Scale-down.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Zwei Implementierungen werden von der SIG Autoscaling getragen, und der Unterschied liegt nicht wirklich in der Skalierungsqualität:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Cluster Autoscaler&lt;/th&gt;
&lt;th&gt;Karpenter&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Node-Typen&lt;/td&gt;
&lt;td&gt;Vorab konfigurierte Node-Gruppen&lt;/td&gt;
&lt;td&gt;Aus Constraints automatisch bestimmt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Umfang&lt;/td&gt;
&lt;td&gt;Nur Node-Autoscaling&lt;/td&gt;
&lt;td&gt;Kompletter Node-Lebenszyklus&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Erneuerung / Upgrade&lt;/td&gt;
&lt;td&gt;Nein&lt;/td&gt;
&lt;td&gt;Ja — Nodes werden nach fester Laufzeit neu erstellt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud-Anbieter&lt;/td&gt;
&lt;td&gt;Viele, auch kleinere&lt;/td&gt;
&lt;td&gt;Wenige — AWS, Azure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auslieferung&lt;/td&gt;
&lt;td&gt;Integrationen im Kubernetes-Projekt&lt;/td&gt;
&lt;td&gt;Als Bibliothek für Anbieter veröffentlicht&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Cluster Autoscaler fragt: „Welche meiner konfigurierten Gruppen passt zu diesen ausstehenden Pods?“ Karpenter fragt: „Welche Maschine sollte für diese Pods existieren?“ — und übernimmt anschließend auch die Verantwortung, sie wieder außer Dienst zu stellen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Der dritte stille Fehler: Konsolidierung ignoriert die reale Nutzung
&lt;/h2&gt;

&lt;p&gt;Dieser kostet am meisten Geld und folgt direkt aus dem gemeinsamen Input.&lt;/p&gt;

&lt;p&gt;Konsolidierung berücksichtigt wie Provisioning ausschließlich die Resource Requests der Pods — nicht die reale Nutzung.&lt;/p&gt;

&lt;p&gt;Ein Node, dessen Pods 90% der Kapazität anfordern und tatsächlich 5% verbrauchen, ist für den Autoscaler ein voll belegter Node. Er wird nie zurückgegeben. Ihre Dashboards zeigen ein nahezu untätiges Cluster, Ihre Rechnung ein volles, und kein Controller meldet dazu etwas — aus Sicht des Schedulers ist ja alles in Ordnung.&lt;/p&gt;

&lt;p&gt;Deshalb ist Rightsizing eine &lt;strong&gt;Voraussetzung&lt;/strong&gt; für Kosteneffizienz auf Node-Ebene und keine spätere Zusatzoptimierung. Die Kubernetes-Doku sagt es deutlich: Requests korrekt zu setzen ist für die Kosteneffizienz genauso wichtig wie die Node-Auslastung selbst.&lt;/p&gt;

&lt;p&gt;Eine verwandte Warnung: &lt;strong&gt;Setzen Sie VPA nicht auf DaemonSet-Pods ein, wenn Sie Node-Autoscaling nutzen.&lt;/strong&gt; Der Autoscaler muss vorhersagen, was DaemonSet-Pods auf einem hypothetischen neuen Node verbrauchen werden, um dessen nutzbare Kapazität zu schätzen. Ein VPA, das diese Requests laufend ändert, macht die Vorhersage unzuverlässig — und falsche Vorhersagen ergeben falsche Skalierungsentscheidungen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wo KEDA hineinpasst
&lt;/h2&gt;

&lt;p&gt;HPA skaliert auf Ressourcenauslastung, ein &lt;em&gt;nachlaufendes&lt;/em&gt; Signal — die CPU steigt erst, wenn Arbeit bereits angekommen ist und sich staut. Für queue-getriebene Workloads ist das die falsche Richtung.&lt;/p&gt;

&lt;p&gt;KEDA, ein CNCF-graduiertes Projekt, skaliert auf die Ereignisquelle selbst: Nachrichten in einer Queue, Lag auf einem Topic, wartende Zeilen. Es deckt auch den Fall ab, den CPU gar nicht ausdrücken kann — auf null skalieren, wenn die Queue leer ist. Der &lt;code&gt;Cron&lt;/code&gt;-Scaler übernimmt geplantes Skalieren, die ehrliche Antwort für vorhersehbare Tagesmuster, bei denen Reagieren schlechter ist als Wissen.&lt;/p&gt;

&lt;p&gt;KEDA ersetzt HPA nicht. Es erzeugt und steuert eines.&lt;/p&gt;

&lt;h2&gt;
  
  
  Eine funktionierende Reihenfolge
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Requests bewusst setzen.&lt;/strong&gt; Alles andere liest sie. Raten korrumpiert hier alle drei Ebenen gleichzeitig.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VPA im Modus &lt;code&gt;Off&lt;/code&gt; installieren&lt;/strong&gt; und eine Woche beobachten lassen. Vergleichen Sie &lt;code&gt;.status.recommendation&lt;/code&gt; mit dem, was Sie angefordert haben. Die Lücke ist Ihr reales Rightsizing-Potenzial.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Requests korrigieren&lt;/strong&gt; auf Basis dieser Daten — von Hand oder über die Pipeline. Node-Konsolidierung beginnt zu wirken, sobald Requests die Realität abbilden.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HPA ergänzen&lt;/strong&gt; auf der Metrik, die Ihre Last abbildet. Bei Sidecars &lt;code&gt;ContainerResource&lt;/code&gt; verwenden.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HPA und VPA von derselben Ressource fernhalten.&lt;/strong&gt; Memory-VPA mit CPU-HPA ist die sichere Standardpaarung.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node-Autoscaling zuletzt aktivieren.&lt;/strong&gt; Es verstärkt, was Ihre Requests aussagen — zutreffend oder nicht.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auf &lt;code&gt;PodResizePending&lt;/code&gt; mit &lt;code&gt;reason: Infeasible&lt;/code&gt; alarmieren&lt;/strong&gt; , wenn Sie In-Place-Resize nutzen, und auf HPA &lt;code&gt;ScalingActive: false&lt;/code&gt;. Beides sind sonst stille Fehler.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Der Punkt
&lt;/h2&gt;

&lt;p&gt;„Kubernetes-Autoscaling einschalten“ gibt es nicht. Es gibt drei Controller an drei verschiedenen Objekten, die sich über nichts abstimmen außer über die Resource Requests, die Sie geschrieben haben.&lt;/p&gt;

&lt;p&gt;Jede Fehlerart in diesem Artikel führt auf dieselbe Wurzel zurück: Ein Controller hat einen Request gelesen, ihm geglaubt und korrekt auf schlechter Information gehandelt. HPA skaliert nicht, weil ein Request fehlt. HPA flattert, weil VPA den Request darunter verändert. Nodes konsolidieren nie, weil Requests ein Cluster beschreiben, das es nicht gibt.&lt;/p&gt;

&lt;p&gt;Autoscaling macht die Dimensionierung nicht zum Problem von jemand anderem. Es macht sie zum einzigen Problem.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Weiterlesen:&lt;/strong&gt; Zur Ebene, in der diese Controller laufen, siehe &lt;a href="https://www.alekseialeinikov.com/de/blog/topics/devops/platform-engineering-auf-kubernetes-2026" rel="noopener noreferrer"&gt;Platform Engineering auf Kubernetes&lt;/a&gt;. Wenn Sie zuerst eine Distribution wählen, siehe &lt;a href="https://www.alekseialeinikov.com/de/blog/topics/devops/k3s-vs-k0s-vs-microk8s-vs-rke2-2026-vergleich" rel="noopener noreferrer"&gt;k3s vs k0s vs MicroK8s vs RKE2&lt;/a&gt;. Zum Abwägen zwischen verwaltet und selbstverwaltet auf GKE siehe &lt;a href="https://www.alekseialeinikov.com/de/blog/topics/cloud/gke-autopilot-vs-standard-vergleich-2026" rel="noopener noreferrer"&gt;GKE Autopilot vs Standard&lt;/a&gt;. Um durchzusetzen, dass Requests überhaupt gesetzt sind, siehe &lt;a href="https://www.alekseialeinikov.com/de/blog/topics/security/opa-vs-kyverno-2026-kubernetes-policy-engine-vergleich" rel="noopener noreferrer"&gt;OPA vs Kyverno&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quellen:&lt;/strong&gt; &lt;a href="https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/" rel="noopener noreferrer"&gt;Horizontal Pod Autoscaling&lt;/a&gt;, &lt;a href="https://kubernetes.io/docs/concepts/workloads/autoscaling/vertical-pod-autoscale/" rel="noopener noreferrer"&gt;Vertical Pod Autoscaling&lt;/a&gt; (überarbeitet am 31. Mai 2026), &lt;a href="https://kubernetes.io/docs/concepts/workloads/autoscaling/" rel="noopener noreferrer"&gt;Autoscaling Workloads&lt;/a&gt;, &lt;a href="https://kubernetes.io/docs/concepts/cluster-administration/node-autoscaling/" rel="noopener noreferrer"&gt;Node Autoscaling&lt;/a&gt; und &lt;a href="https://kubernetes.io/docs/tasks/configure-pod-container/resize-container-resources/" rel="noopener noreferrer"&gt;Resize CPU and Memory Resources assigned to Containers&lt;/a&gt;, sämtlich Kubernetes-Dokumentation, CC BY 4.0.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ursprünglich veröffentlicht auf &lt;a href="https://www.alekseialeinikov.com/de/blog/topics/devops/kubernetes-autoscaling-2026-hpa-vpa-cluster-autoscaler-vergleich" rel="noopener noreferrer"&gt;alekseialeinikov.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>kubernetesautoscalin</category>
      <category>hpakubernetes</category>
      <category>horizontalpodautosca</category>
      <category>verticalpodautoscale</category>
    </item>
    <item>
      <title>Kubernetes Autoscaling: Three Controllers That Do Not Talk to Each Other</title>
      <dc:creator>Aleksei Aleinikov</dc:creator>
      <pubDate>Wed, 26 Aug 2026 10:00:00 +0000</pubDate>
      <link>https://dev.to/aleksei_aleinikov/kubernetes-autoscaling-three-controllers-that-do-not-talk-to-each-other-58m8</link>
      <guid>https://dev.to/aleksei_aleinikov/kubernetes-autoscaling-three-controllers-that-do-not-talk-to-each-other-58m8</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0m0y534ki73398dlvhi5.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0m0y534ki73398dlvhi5.webp" alt="Kubernetes Autoscaling: Three Controllers That Do Not Talk to Each Other" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most teams install all three Kubernetes autoscalers and assume they add up to a system. They do not. HPA, VPA and the node autoscaler are three independent controllers with no shared state and no negotiation protocol.&lt;/p&gt;

&lt;p&gt;What they do share is an input: &lt;strong&gt;resource requests&lt;/strong&gt;. Every one of them reads requests to make decisions. None of them read what your application actually uses, except indirectly. Get requests wrong and all three degrade at once — quietly, without a single error event.&lt;/p&gt;

&lt;p&gt;This is a tour of the mechanics that actually decide whether your cluster scales or just thrashes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flyv0x9noh486t45yahem.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flyv0x9noh486t45yahem.webp" alt="The three Kubernetes autoscaling layers — HPA changing replica count, VPA changing Pod size, and the node autoscaler changing machine count — all reading the same resource requests with no coordination between them" width="800" height="440"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Three controllers, three different objects, one shared input and zero coordination.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  What Each Layer Actually Changes
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Changes&lt;/th&gt;
&lt;th&gt;Lives in&lt;/th&gt;
&lt;th&gt;Reads&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HPA&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Replica count&lt;/td&gt;
&lt;td&gt;Core Kubernetes API&lt;/td&gt;
&lt;td&gt;Metrics API, requests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;VPA&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CPU/memory requests&lt;/td&gt;
&lt;td&gt;Add-on CRD&lt;/td&gt;
&lt;td&gt;Metrics API, history, OOM events&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Node autoscaler&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Number of machines&lt;/td&gt;
&lt;td&gt;Add-on + cloud API&lt;/td&gt;
&lt;td&gt;Pending Pods, requests&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The HPA is the only one that ships with Kubernetes. VPA is a separate install with three of its own components. Node autoscaling requires a cloud provider integration. That asymmetry matters when you are debugging: two of the three are things you added.&lt;/p&gt;
&lt;h2&gt;
  
  
  HPA: The Formula Is Simpler Than You Think
&lt;/h2&gt;

&lt;p&gt;The controller runs on a loop — every 15 seconds by default — and computes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;desiredReplicas = ceil[currentReplicas × ( currentMetricValue / desiredMetricValue )]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;p&gt;That is the whole idea. Current metric double the target? Double the replicas. Half the target? Halve them.&lt;/p&gt;

&lt;p&gt;Three things about this formula cause most production surprises.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Utilization is measured against requests, not limits.&lt;/strong&gt; When you set &lt;code&gt;averageUtilization: 60&lt;/code&gt;, you are saying “keep average usage at 60% of what the Pods requested.” The request is the denominator. This is why requests are not just a scheduling hint — they are the calibration of your autoscaler.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The controller skips small changes.&lt;/strong&gt; If the ratio is close enough to 1.0 it does nothing. The default tolerance is 10%, cluster-wide. A workload sitting at 105% of its target will not scale, and there is no event explaining the inaction. Kubernetes 1.35 added a per-HPA &lt;code&gt;tolerance&lt;/code&gt; field in beta, so you can now tighten it for one workload:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;
&lt;span class="na"&gt;behavior&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;scaleUp&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

    &lt;span class="na"&gt;tolerance&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.05&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;p&gt;Before that, changing it meant a &lt;code&gt;--horizontal-pod-autoscaler-tolerance&lt;/code&gt; flag on the controller manager, affecting every workload in the cluster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multiple metrics take the maximum.&lt;/strong&gt; Specify CPU and memory and a custom queue-depth metric, and the HPA computes a desired replica count from each and picks the largest. It is an OR, not a blend. Adding a metric can only make your workload bigger.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Silent Failure: No Request, No Autoscaling
&lt;/h2&gt;

&lt;p&gt;This is the single most common broken-HPA cause, and it deserves its own section because of &lt;em&gt;how&lt;/em&gt; it fails.&lt;/p&gt;

&lt;p&gt;If a container in the Pod does not have the relevant resource request set, CPU utilization for that Pod is undefined, and the autoscaler takes no action for that metric.&lt;/p&gt;

&lt;p&gt;No error. No warning event. &lt;code&gt;kubectl get hpa&lt;/code&gt; shows the object exists. The &lt;code&gt;TARGETS&lt;/code&gt; column shows &lt;code&gt;&amp;lt;unknown&amp;gt;&lt;/code&gt;, which is easy to read as “still gathering metrics” rather than “permanently broken.”&lt;/p&gt;

&lt;p&gt;The fix is trivial once you know. Finding out is the expensive part:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Terminal window&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
kubectl get hpa &lt;span class="nt"&gt;-A&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; custom-columns&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;

NS:.metadata.namespace,NAME:.metadata.name,TARGETS:.status.currentMetrics
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;p&gt;Anything showing no current metrics after a few minutes is not warming up. It is misconfigured.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Second Silent Failure: Your Sidecar Is Diluting the Signal
&lt;/h2&gt;

&lt;p&gt;HPA sums resource usage across all containers in the Pod. The docs are explicit that this may not represent individual container usage — a single container can run hot while the Pod average stays comfortable, and the HPA never scales out.&lt;/p&gt;

&lt;p&gt;Service meshes and logging sidecars make this routine. An application container at 95% of its request paired with an idle sidecar at 5% averages to something that looks fine.&lt;/p&gt;

&lt;p&gt;Since Kubernetes 1.30 there is a stable fix — scale on one named container instead of the Pod:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;
&lt;span class="na"&gt;metrics&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ContainerResource&lt;/span&gt;

    &lt;span class="na"&gt;containerResource&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cpu&lt;/span&gt;

      &lt;span class="na"&gt;container&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application&lt;/span&gt;

      &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Utilization&lt;/span&gt;

        &lt;span class="na"&gt;averageUtilization&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;60&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;p&gt;One caveat worth knowing: if you rename that container, update the HPA to track both names &lt;em&gt;before&lt;/em&gt; rolling out the workload change, otherwise the recommendation goes blind mid-rollout.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scale Up Fast, Scale Down Slow — On Purpose
&lt;/h2&gt;

&lt;p&gt;The default behaviour is deliberately asymmetric, and misreading it produces a lot of false bug reports.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Stabilization window&lt;/th&gt;
&lt;th&gt;Rate limit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Scale up&lt;/td&gt;
&lt;td&gt;0 seconds&lt;/td&gt;
&lt;td&gt;100% of replicas or 4 Pods per 15s, whichever is larger&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scale down&lt;/td&gt;
&lt;td&gt;300 seconds&lt;/td&gt;
&lt;td&gt;100% per 15s, after the window&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Scale-up is immediate. Scale-down looks at all recommendations from the past five minutes and takes the &lt;strong&gt;highest&lt;/strong&gt; one — a rolling maximum that stops the autoscaler from removing Pods it will need again moments later.&lt;/p&gt;

&lt;p&gt;So when someone reports “the HPA is not scaling down,” the answer is usually that it is working exactly as designed and they are watching a five-minute window. If you genuinely need it faster:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;
&lt;span class="na"&gt;behavior&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;scaleDown&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

    &lt;span class="na"&gt;stabilizationWindowSeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;60&lt;/span&gt;

    &lt;span class="na"&gt;policies&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Percent&lt;/span&gt;

        &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;

        &lt;span class="na"&gt;periodSeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;60&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;p&gt;There is also a trap in how you deploy. If you keep &lt;code&gt;spec.replicas&lt;/code&gt; in a manifest that an HPA is managing, every &lt;code&gt;kubectl apply&lt;/code&gt; resets the count to whatever is in the file — and the HPA pulls it back. That fight is what thrashing looks like on a dashboard. Remove the field from the manifest once the HPA owns the workload.&lt;/p&gt;

&lt;h2&gt;
  
  
  VPA: Different Problem, Different Failure Mode
&lt;/h2&gt;

&lt;p&gt;The VerticalPodAutoscaler answers a question HPA cannot: how big should each Pod be? It runs three components — a &lt;strong&gt;recommender&lt;/strong&gt; that analyses usage history, peaks and OOM events, an &lt;strong&gt;updater&lt;/strong&gt; that applies changes, and an &lt;strong&gt;admission controller webhook&lt;/strong&gt; that injects the recommended requests into new Pods.&lt;/p&gt;

&lt;p&gt;The update mode is the whole decision:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;Behaviour&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Off&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Recommend only. Nothing is applied.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Initial&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Set requests at Pod creation, never again.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Recreate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Evict Pods when requests drift from recommendation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;InPlaceOrRecreate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Resize in place if possible, evict if not.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;InPlace&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Resize in place, never evict — defer and retry instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Auto&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Deprecated since VPA 1.4.0. Alias for &lt;code&gt;Recreate&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Start at &lt;code&gt;Off&lt;/code&gt;. It is genuinely useful on its own: the recommender writes a target, a lower bound and an upper bound into &lt;code&gt;.status.recommendation&lt;/code&gt;, which is a free rightsizing audit with no production risk.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Big 2026 Change — and a Documentation Contradiction
&lt;/h2&gt;

&lt;p&gt;For years the honest objection to VPA was that vertical scaling meant killing the Pod. &lt;strong&gt;In-place Pod resize reached stable in Kubernetes 1.35&lt;/strong&gt; and is enabled by default. You can now change CPU and memory on a running container:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Terminal window&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
kubectl patch pod my-pod &lt;span class="nt"&gt;--subresource&lt;/span&gt; resize &lt;span class="nt"&gt;--patch&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;

  &lt;span class="s1"&gt;'{"spec":{"containers":[{"name":"app",

     "resources":{"requests":{"cpu":"800m"},"limits":{"cpu":"800m"}}}]}}'&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;p&gt;Per-resource policy controls whether a restart is needed — and memory usually still needs one, because most runtimes cannot shrink their heap on demand:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;
&lt;span class="na"&gt;resizePolicy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;resourceName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cpu&lt;/span&gt;

    &lt;span class="na"&gt;restartPolicy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;NotRequired&lt;/span&gt; &lt;span class="c1"&gt;# default&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;resourceName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;memory&lt;/span&gt;

    &lt;span class="na"&gt;restartPolicy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;RestartContainer&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;p&gt;&lt;strong&gt;Here I have to flag something.&lt;/strong&gt; The Kubernetes documentation contradicts itself on whether VPA can use this. The autoscaling overview page states that as of 1.36 VPA does not support resizing Pods in place. The VPA page documents &lt;code&gt;InPlaceOrRecreate&lt;/code&gt; and &lt;code&gt;InPlace&lt;/code&gt; in full, noting &lt;code&gt;InPlace&lt;/code&gt; is alpha in VPA 1.7.0 and needs Kubernetes 1.33+ with the &lt;code&gt;InPlacePodVerticalScaling&lt;/code&gt; gate plus &lt;code&gt;InPlace&lt;/code&gt; gates on the VPA updater and admission controller.&lt;/p&gt;

&lt;p&gt;The VPA page was revised more recently, so the overview is most likely stale. But I could not resolve this from the docs alone, and neither can you — check your installed VPA version and test in a non-production cluster before promising anyone restart-free rightsizing.&lt;/p&gt;

&lt;p&gt;Worth knowing regardless of mode: &lt;strong&gt;a resize cannot change the Pod’s QoS class.&lt;/strong&gt; A Guaranteed Pod must keep requests equal to limits after the resize. A Burstable Pod cannot become Guaranteed. Windows Pods are not supported at all. If a resize does not fit the node, the Pod gets a &lt;code&gt;PodResizePending&lt;/code&gt; condition with &lt;code&gt;reason: Infeasible&lt;/code&gt; — a condition to alert on, because nothing else will tell you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why HPA and VPA Fight
&lt;/h2&gt;

&lt;p&gt;Now put the two together on CPU and follow the arithmetic.&lt;/p&gt;

&lt;p&gt;HPA computes utilization as &lt;code&gt;usage / request&lt;/code&gt;. VPA’s entire job is to change &lt;code&gt;request&lt;/code&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;VPA observes low usage and lowers the request.&lt;/li&gt;
&lt;li&gt;The same unchanged application now shows much higher utilization — the denominator shrank.&lt;/li&gt;
&lt;li&gt;HPA sees utilization above target and adds replicas.&lt;/li&gt;
&lt;li&gt;Load spreads across more Pods, so per-Pod usage drops.&lt;/li&gt;
&lt;li&gt;VPA observes low usage and lowers the request again.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Neither controller is malfunctioning. They are moving the numerator and denominator of the same fraction with no knowledge of each other.&lt;/p&gt;

&lt;p&gt;Combinations that work in practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;VPA on memory, HPA on CPU.&lt;/strong&gt; Different resources, no shared fraction. The most common production pairing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VPA in &lt;code&gt;Off&lt;/code&gt; mode.&lt;/strong&gt; Recommendations feed a human or a pipeline, not the live workload.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VPA scoped with &lt;code&gt;controlledResources&lt;/code&gt;&lt;/strong&gt; so it never touches the resource HPA scales on:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;
&lt;span class="na"&gt;resourcePolicy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;containerPolicies&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;containerName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application"&lt;/span&gt;

      &lt;span class="na"&gt;controlledResources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;memory"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

      &lt;span class="na"&gt;controlledValues&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;RequestsOnly&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;p&gt;&lt;code&gt;controlledValues: RequestsOnly&lt;/code&gt; is worth calling out. The default is &lt;code&gt;RequestsAndLimits&lt;/code&gt;, which scales the limit proportionally to preserve your request-to-limit ratio. If you have deliberately set a wide gap between request and limit for burst headroom, the default will maintain that gap as it moves — which may be exactly what you want, or may quietly grow your limits far beyond what you intended.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fauiwroid5vads49pclm2.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fauiwroid5vads49pclm2.webp" alt="The feedback loop between HPA and VPA on the same CPU resource: VPA lowers the request, measured utilization rises, HPA adds replicas, per-Pod usage falls, and VPA lowers the request again" width="800" height="427"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Nothing is broken. Both controllers are correctly editing opposite halves of the same fraction.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Node Layer: Provisioning and Consolidation
&lt;/h2&gt;

&lt;p&gt;Underneath both Pod-level autoscalers sits the node autoscaler, which does two things the Kubernetes docs now name explicitly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Provisioning&lt;/strong&gt; — add nodes so pending Pods can schedule. Formerly called scale-up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consolidation&lt;/strong&gt; — remove underutilised nodes. Formerly called scale-down.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two implementations are sponsored by SIG Autoscaling, and the difference is not really about scaling quality:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Cluster Autoscaler&lt;/th&gt;
&lt;th&gt;Karpenter&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Node shapes&lt;/td&gt;
&lt;td&gt;Pre-configured node groups&lt;/td&gt;
&lt;td&gt;Auto-provisioned from constraints&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scope&lt;/td&gt;
&lt;td&gt;Node autoscaling only&lt;/td&gt;
&lt;td&gt;Full node lifecycle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Node refresh / upgrade&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes — recreates nodes after a set lifetime&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud providers&lt;/td&gt;
&lt;td&gt;Many, including smaller ones&lt;/td&gt;
&lt;td&gt;Fewer — AWS, Azure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delivery&lt;/td&gt;
&lt;td&gt;Integrations in the Kubernetes project&lt;/td&gt;
&lt;td&gt;Published as a library providers integrate&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Cluster Autoscaler asks “which of my configured groups fits these pending Pods?” Karpenter asks “what machine should exist for these pending Pods?” — and then also takes responsibility for retiring that machine later.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Third Silent Failure: Consolidation Ignores Real Usage
&lt;/h2&gt;

&lt;p&gt;This one costs the most money, and it follows directly from the shared-input problem.&lt;/p&gt;

&lt;p&gt;Consolidation, like provisioning, considers only Pod resource requests — not real resource usage.&lt;/p&gt;

&lt;p&gt;A node whose Pods request 90% of capacity and actually consume 5% is, to the autoscaler, a fully packed node. It will never be reclaimed. Your dashboards show a nearly idle cluster, your invoice shows a full one, and no controller emits an event about it, because from the scheduler’s point of view nothing is wrong.&lt;/p&gt;

&lt;p&gt;This is why rightsizing is a &lt;strong&gt;prerequisite&lt;/strong&gt; for node-level cost efficiency rather than a separate optimisation you get to later. The Kubernetes docs say it plainly: setting requests correctly matters as much to cost-effectiveness as node utilisation does.&lt;/p&gt;

&lt;p&gt;One related caution: &lt;strong&gt;do not run VPA on DaemonSet Pods when using node autoscaling.&lt;/strong&gt; The autoscaler has to predict what DaemonSet Pods will consume on a hypothetical new node in order to estimate its usable capacity. A VPA that keeps changing those requests makes the prediction unreliable, and wrong predictions produce wrong scaling decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where KEDA Fits
&lt;/h2&gt;

&lt;p&gt;HPA scales on resource utilization, which is a &lt;em&gt;lagging&lt;/em&gt; signal — CPU rises only after work has already arrived and started queueing. For queue-driven workloads, that is backwards.&lt;/p&gt;

&lt;p&gt;KEDA, a CNCF-graduated project, scales on the event source itself: messages in a queue, lag on a topic, rows pending. It also handles the case CPU cannot express at all — scaling to zero when the queue is empty. Its &lt;code&gt;Cron&lt;/code&gt; scaler covers scheduled scaling, which is the honest answer for predictable daily traffic patterns where reacting is strictly worse than knowing.&lt;/p&gt;

&lt;p&gt;KEDA does not replace HPA. It creates and drives one.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Working Order of Operations
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Set requests deliberately.&lt;/strong&gt; Everything else reads them. Guessing here corrupts all three layers at once.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install VPA in &lt;code&gt;Off&lt;/code&gt; mode&lt;/strong&gt; and let it observe for a week. Compare &lt;code&gt;.status.recommendation&lt;/code&gt; against what you actually requested. The gap is your real rightsizing opportunity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix requests&lt;/strong&gt; based on that data — by hand or through your pipeline. Node consolidation starts working the moment requests reflect reality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add HPA&lt;/strong&gt; on the metric that reflects your load. Use &lt;code&gt;ContainerResource&lt;/code&gt; if the Pod has sidecars.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep HPA and VPA off the same resource.&lt;/strong&gt; Memory-VPA with CPU-HPA is the default safe pairing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enable node autoscaling last.&lt;/strong&gt; It amplifies whatever your requests already say — accurate or not.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alert on &lt;code&gt;PodResizePending&lt;/code&gt; with &lt;code&gt;reason: Infeasible&lt;/code&gt;&lt;/strong&gt; if you use in-place resize, and on HPA &lt;code&gt;ScalingActive: false&lt;/code&gt;. Both are silent failures otherwise.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Point
&lt;/h2&gt;

&lt;p&gt;There is no such thing as “turning on Kubernetes autoscaling.” There are three controllers operating on three different objects, coordinating through nothing but the resource requests you wrote.&lt;/p&gt;

&lt;p&gt;Every failure mode in this article traces back to the same root: a controller read a request, believed it, and acted correctly on bad information. HPA does not scale because a request is missing. HPA thrashes because VPA is editing the request underneath it. Nodes never consolidate because requests describe a cluster that does not exist.&lt;/p&gt;

&lt;p&gt;Autoscaling does not make resource sizing someone else’s problem. It makes it the only problem.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Related reading:&lt;/strong&gt; for the layer these controllers run inside, see &lt;a href="https://www.alekseialeinikov.com/en/blog/topics/devops/platform-engineering-on-kubernetes-2026" rel="noopener noreferrer"&gt;platform engineering on Kubernetes&lt;/a&gt;. If you are choosing a distribution first, see &lt;a href="https://www.alekseialeinikov.com/en/blog/topics/devops/k3s-vs-k0s-vs-microk8s-vs-rke2-2026" rel="noopener noreferrer"&gt;k3s vs k0s vs MicroK8s vs RKE2&lt;/a&gt;. For the managed-versus-self-managed trade-off on GKE, see &lt;a href="https://www.alekseialeinikov.com/en/blog/topics/cloud/gke-autopilot-vs-standard-2026" rel="noopener noreferrer"&gt;GKE Autopilot vs Standard&lt;/a&gt;. To enforce that requests are actually set, see &lt;a href="https://www.alekseialeinikov.com/en/blog/topics/security/opa-vs-kyverno-2026-kubernetes-policy-engine" rel="noopener noreferrer"&gt;OPA vs Kyverno&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sources:&lt;/strong&gt; &lt;a href="https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/" rel="noopener noreferrer"&gt;Horizontal Pod Autoscaling&lt;/a&gt;, &lt;a href="https://kubernetes.io/docs/concepts/workloads/autoscaling/vertical-pod-autoscale/" rel="noopener noreferrer"&gt;Vertical Pod Autoscaling&lt;/a&gt; (revised 31 May 2026), &lt;a href="https://kubernetes.io/docs/concepts/workloads/autoscaling/" rel="noopener noreferrer"&gt;Autoscaling Workloads&lt;/a&gt;, &lt;a href="https://kubernetes.io/docs/concepts/cluster-administration/node-autoscaling/" rel="noopener noreferrer"&gt;Node Autoscaling&lt;/a&gt; and &lt;a href="https://kubernetes.io/docs/tasks/configure-pod-container/resize-container-resources/" rel="noopener noreferrer"&gt;Resize CPU and Memory Resources assigned to Containers&lt;/a&gt;, all Kubernetes documentation, CC BY 4.0.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.alekseialeinikov.com/en/blog/topics/devops/kubernetes-autoscaling-2026-hpa-vpa-cluster-autoscaler" rel="noopener noreferrer"&gt;alekseialeinikov.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>kubernetesautoscalin</category>
      <category>hpakubernetes</category>
      <category>horizontalpodautosca</category>
      <category>verticalpodautoscale</category>
    </item>
    <item>
      <title>Was wirklich in eine Landing Zone gehört — und was ohne Grund hineingeschoben wird</title>
      <dc:creator>Aleksei Aleinikov</dc:creator>
      <pubDate>Tue, 25 Aug 2026 12:00:00 +0000</pubDate>
      <link>https://dev.to/aleksei_aleinikov/was-wirklich-in-eine-landing-zone-gehort-und-was-ohne-grund-hineingeschoben-wird-324c</link>
      <guid>https://dev.to/aleksei_aleinikov/was-wirklich-in-eine-landing-zone-gehort-und-was-ohne-grund-hineingeschoben-wird-324c</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F66t15c1cpnf92wgchzw9.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F66t15c1cpnf92wgchzw9.webp" alt="Was wirklich in eine Landing Zone gehört — und was ohne Grund hineingeschoben wird" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fragen Sie fünf Ingenieure, was eine Landing Zone ist, und Sie bekommen fünf Inventarlisten. Eine enthält die CI/CD-Pipeline. Eine den Monitoring-Stack. Eine besteht darauf, dass nichts fertig ist, solange die FinOps-Dashboards nicht laufen.&lt;/p&gt;

&lt;p&gt;Die Anbieter helfen wenig weiter. Azure dokumentiert acht Design-Bereiche, Google nennt vier Kernelemente, und AWS definiert den Begriff in einem einzigen Satz, der das Netzwerk komplett auslässt.&lt;/p&gt;

&lt;p&gt;Alle beschreiben etwas Reales. Nur nicht dasselbe.&lt;/p&gt;

&lt;p&gt;Die brauchbare Definition ist keine Komponentenliste, sondern diese: &lt;strong&gt;Eine Landing Zone ist die Menge der Entscheidungen, die Sie nicht mehr zurücknehmen können, sobald Workloads darauf laufen.&lt;/strong&gt; Alles andere ist ein Roadmap-Punkt, der zum Blocker befördert wurde.&lt;/p&gt;

&lt;h2&gt;
  
  
  Azure, AWS und Google Landing Zones sind sich beim Kern einig
&lt;/h2&gt;

&lt;p&gt;Das interessante Indiz: Unabhängig entstandene Frameworks mit unterschiedlicher Terminologie und unterschiedlichen Produkten kommen inhaltlich am selben Punkt heraus.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google&lt;/strong&gt; nennt vier Kernelemente, die für eine Landing Zone entworfen werden müssen: Identitätsbereitstellung, Ressourcenhierarchie, Netzwerk und Sicherheitskontrollen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microsofts Cloud Adoption Framework&lt;/strong&gt; teilt Azure Landing Zones in acht Design-Bereiche in zwei Gruppen. Umgebungsbereiche: Azure-Abrechnung und Tenant, Identitäts- und Zugriffsverwaltung, Ressourcenorganisation, Netzwerktopologie und Konnektivität. Compliance-Bereiche: Sicherheit, Management, Governance sowie Plattformautomatisierung und DevOps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS&lt;/strong&gt; definiert eine Landing Zone als gut architektierte Multi-Account-Umgebung auf Basis von Sicherheits- und Compliance-Best-Practices — als unternehmensweiten Container für Ihre Organisationseinheiten, Konten, Benutzer und weiteren Ressourcen.&lt;/p&gt;

&lt;p&gt;Acht gegen vier gegen einen Satz sieht nach Uneinigkeit aus. Stellt man sie nebeneinander, ist es keine:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Substanz&lt;/th&gt;
&lt;th&gt;Google&lt;/th&gt;
&lt;th&gt;Microsoft&lt;/th&gt;
&lt;th&gt;AWS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Wer Sie sind&lt;/td&gt;
&lt;td&gt;Identitätsbereitstellung&lt;/td&gt;
&lt;td&gt;Identitäts- und Zugriffsverwaltung&lt;/td&gt;
&lt;td&gt;IAM-Identity-Center-Verzeichnis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wie Ressourcen angeordnet sind&lt;/td&gt;
&lt;td&gt;Ressourcenhierarchie&lt;/td&gt;
&lt;td&gt;Ressourcenorganisation&lt;/td&gt;
&lt;td&gt;Organizations-OUs, Account Factory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wie Pakete fließen&lt;/td&gt;
&lt;td&gt;Netzwerk&lt;/td&gt;
&lt;td&gt;Netzwerktopologie und Konnektivität&lt;/td&gt;
&lt;td&gt;&lt;em&gt;nicht Teil der Definition&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Was erzwungen wird&lt;/td&gt;
&lt;td&gt;Sicherheitskontrollen&lt;/td&gt;
&lt;td&gt;Sicherheit, Governance&lt;/td&gt;
&lt;td&gt;Controls: preventive, detective, proactive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wie es ausgerollt wird&lt;/td&gt;
&lt;td&gt;(Best Practice: IaC + GitOps)&lt;/td&gt;
&lt;td&gt;Plattformautomatisierung und DevOps&lt;/td&gt;
&lt;td&gt;Account Factory, CloudFormation StackSets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wie es betrieben wird&lt;/td&gt;
&lt;td&gt;(zusätzliches Element)&lt;/td&gt;
&lt;td&gt;Management&lt;/td&gt;
&lt;td&gt;Dashboard, Drift-Erkennung&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kaufmännischer Rahmen&lt;/td&gt;
&lt;td&gt;(Voraussetzung: Organisation + Abrechnungskonto)&lt;/td&gt;
&lt;td&gt;Abrechnung und Tenant&lt;/td&gt;
&lt;td&gt;Management-Konto, Organizations&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Microsoft erhebt zu erstklassigen Bereichen, was Google unter Voraussetzungen und Best Practices ablegt. Das ist eine Dokumentationsentscheidung, keine architektonische Meinungsverschiedenheit.&lt;/p&gt;

&lt;p&gt;AWS ist der wirklich abweichende Fall, und der lohnt einen Moment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Die AWS Landing Zone hat einen anderen Zuschnitt
&lt;/h2&gt;

&lt;p&gt;AWS fasst den Begriff enger als die beiden anderen. Eine Control-Tower-Landing-Zone liefert Ihnen einen Root, eine Security-OU mit den Konten Log Archive und Audit, optional eine Sandbox-OU, ein IAM-Identity-Center-Verzeichnis und einen Satz Controls, die organisationsweit greifen. Das Netzwerk steht nicht auf dieser Liste. Kein Adressplan, kein Konnektivitätsdesign, kein Segmentierungsmodell — das bleibt Ihre Aufgabe und läuft separat.&lt;/p&gt;

&lt;p&gt;Diese Asymmetrie hat eine praktische Folge: &lt;strong&gt;Eine zwischen Clouds kopierte Landing-Zone-Checkliste führt in die Irre.&lt;/strong&gt; Wer als Azure-Architekt einem AWS-Team „die Landing-Zone-Anforderungen“ übergibt, überspezifiziert Konten und unterspezifiziert VPCs. Umgekehrt gilt dasselbe.&lt;/p&gt;

&lt;p&gt;Der zweite Unterschied ist die Zeitangabe. AWS nennt für Control Tower weniger als eine Stunde. Google sagt, Entwurf und Bereitstellung könnten mehrere Wochen dauern. Beides stimmt, weil Verschiedenes gemessen wird: Control Tower &lt;em&gt;rollt eine fertige Meinung aus&lt;/em&gt;, während Googles Leitfaden &lt;em&gt;den Prozess beschreibt, sich eine eigene zu bilden&lt;/em&gt;. Passt die Meinung von AWS zu Ihrer Organisation, haben Sie den teuren Teil legitim übersprungen. Passt sie nicht, ist die eingesparte Stunde nicht die relevante Zahl.&lt;/p&gt;

&lt;p&gt;Und Tempo kauft keine Umkehrbarkeit. Die AWS-Dokumentation ist da erfreulich direkt:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;these cannot be renamed later, and existing accounts cannot be added for security and logging after initial launch&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Eine Entscheidung über Namen und Einbindung der geteilten Konten, getroffen in der ersten Stunde, mit der Sie dauerhaft leben. Dem Umkehrbarkeitstest ist gleichgültig, wie schnell das Deployment war.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqenjzpbe5y8a1x30ff41.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqenjzpbe5y8a1x30ff41.webp" alt="Die vier unumkehrbaren Landing-Zone-Entscheidungen — Identität, Ressourcenhierarchie, Netzadressierung und Sicherheitsgrenzen — gegenüber der aufschiebbaren Schicht aus Monitoring, Kostenkontrolle, Backup und DR, API- und Cluster-Management" width="800" height="480"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Vier Entscheidungen, die man einmal trifft, und eine Schicht, die man jahrelang ergänzt.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Es gibt keine Standard-Landing-Zone, und Google sagt das selbst
&lt;/h2&gt;

&lt;p&gt;Bevor Sie irgendeine Landing-Zone-Checkliste übernehmen, lesen Sie diesen Satz aus Googles Architecture Center:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The diagram above is only an example, because there is no single or standard implementation of a landing zone.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Das Design hängt ab von Branche, Organisationsstruktur, Sicherheits- und Compliance-Anforderungen, den zu migrierenden Workloads, der vorhandenen Infrastruktur sowie dem Standort von Unternehmen und Kunden.&lt;/p&gt;

&lt;p&gt;Das ist auch kaufmännisch relevant. Wenn ein Partner oder ein Blogbeitrag &lt;em&gt;die&lt;/em&gt; Landing Zone als festes Lieferobjekt präsentiert, verkauft man Ihnen eine Meinung mit Preisschild. Manchmal ist diese Meinung ausgezeichnet und der Kauf richtig. Aber Sie sollten wissen, dass Sie eine Meinung kaufen und keine Spezifikation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Der eigentliche Test: Lässt sich das später ändern?
&lt;/h2&gt;

&lt;p&gt;Hier ist der Filter, der die Diskussion sortiert. Fragen Sie zu jedem Kandidaten: &lt;strong&gt;Was kostet die Korrektur, wenn Workloads bereits laufen?&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Besteht den Test nicht — vor dem ersten Workload entscheiden
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Ressourcenhierarchie.&lt;/strong&gt; Ihre Struktur aus Organisation, Ordnern und Projekten bestimmt, wo Richtlinien greifen und wo Budgets zusammenlaufen. Projekte zwischen Ordnern zu verschieben ist möglich; eine Hierarchie unter laufenden Workloads neu zu bauen, während IAM und Organisationsrichtlinien daraus erben, ist ein Projekt, für das sich niemand meldet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Netz-Adressraum.&lt;/strong&gt; Die CIDR-Vergabe ist die klassische unumkehrbare Entscheidung. Überlappende Bereiche tauchen Jahre später auf, bei einer Übernahme oder einer Partneranbindung, und die Korrektur heißt Umadressierung der Produktion. Planen Sie auch für Regionen, die Sie noch nicht eröffnet haben.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Identitätsdomäne und Föderation.&lt;/strong&gt; Welches Verzeichnis maßgeblich ist, wie es synchronisiert, wie der Vertrauenspfad aussieht. Alles Weitere in Ihrem Sicherheitsmodell erbt daraus.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sicherheitsgrenzen.&lt;/strong&gt; Wo die Grenzen tatsächlich verlaufen — VPC-Service-Controls-Perimeter in Googles Beispielarchitektur, Netzsegmentierung, der Zuschnitt Ihrer Shared VPC. Sie bestimmen, was später überhaupt ausdrückbar ist.&lt;/p&gt;

&lt;h3&gt;
  
  
  Besteht den Test — ergänzen, wenn nötig
&lt;/h3&gt;

&lt;p&gt;Google listet diese ausdrücklich als Elemente jenseits des Kerns, zu ergänzen nach Geschäftsanforderung:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Monitoring und Logging&lt;/li&gt;
&lt;li&gt;Backup und Disaster Recovery&lt;/li&gt;
&lt;li&gt;Compliance-Werkzeuge&lt;/li&gt;
&lt;li&gt;Kosteneffizienz und -kontrolle&lt;/li&gt;
&lt;li&gt;API-Management&lt;/li&gt;
&lt;li&gt;Cluster-Management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keines davon zwingt Sie, irgendetwas neu zu bauen. Sie werden die meisten wollen, einige dringend. Das ist eine andere Aussage als „das Fundament ist ohne sie nicht fertig“.&lt;/p&gt;

&lt;h2&gt;
  
  
  Der am häufigsten überdimensionierte Punkt jedes Fundamentprojekts
&lt;/h2&gt;

&lt;p&gt;Dieser Punkt verdient einen eigenen Abschnitt, weil Googles Dokumentation etwas sagt, das die meisten Fundamentprojekte nicht glauben wollen:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;if your first workload does not require access to on-premises network resources, you could build connectivity to your on-premises environment later.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hybride Konnektivität — Interconnect, Direct Connect, ExpressRoute, der VPN-Rückfall, das Routing-Design, die Firewall-Change-Requests, die Warteschlange des Netzwerkteams — ist regelmäßig der längste Balken im Plan. Und sie ist für den ersten Workload häufig unnötig, weil dieser oft ein neuer, cloud-nativer, internetseitiger Dienst ist, der mit nichts im Rechenzentrum spricht.&lt;/p&gt;

&lt;p&gt;Sie nach dem ersten Deployment einzuplanen macht sie nicht optional. Es macht sie parallel statt blockierend.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ferqq2wkwbyywe7kiyyi8.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ferqq2wkwbyywe7kiyyi8.webp" alt="Reihenfolge einer Landing Zone: unumkehrbare Entscheidungen vor dem ersten Workload, hybride Konnektivität und Betriebswerkzeuge bewusst nachgelagert und parallel, sobald etwas läuft" width="799" height="413"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Die Reihenfolge zählt mehr als die Inventarliste. Am falschen Punkt zu blockieren kostet Monate.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Modular heißt: Die erste Version ist absichtlich falsch
&lt;/h2&gt;

&lt;p&gt;Googles Empfehlung enthält ein Eingeständnis, das zitiert gehört, weil es dem üblichen Projektzuschnitt widerspricht:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;because a landing zone is modular, your first iteration of a landing zone is often not your final version.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Und die praktische Anweisung dazu: das Anfangsdesign auf die Elemente ausrichten, die für die Migration der ersten Workloads nötig sind, und weitere Elemente später ergänzen.&lt;/p&gt;

&lt;p&gt;Vergleichen Sie das mit dem typischen Fundamentprogramm, das vollständig sein will, bevor irgendetwas läuft. Diese Programme überziehen — Google merkt an, die Bereitstellung könne „mehrere Wochen“ dauern und Projektmanagement sei unerlässlich, was in Dokumentationssprache &lt;em&gt;das verschiebt sich&lt;/em&gt; heißt — und liegen am Ende trotzdem daneben, weil jede Anforderung darin ohne echten Workload erraten wurde.&lt;/p&gt;

&lt;p&gt;Teams, die das gut machen, liefern ein bewusst unvollständiges Fundament, setzen einen echten Workload darauf und lassen diesen Workload sagen, was die zweite Iteration braucht.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wenn eine Landing Zone nicht reicht
&lt;/h2&gt;

&lt;p&gt;Gut zu wissen, bevor Sie ein einziges Design für einen sperrigen Workload verbiegen: Google unterstützt ausdrücklich &lt;strong&gt;mehr als eine Landing Zone&lt;/strong&gt; , wenn einzelne Workloads sehr abweichende Skalierungs- oder Compliance-Anforderungen haben.&lt;/p&gt;

&lt;p&gt;Teilbar: Identitäten, Abrechnung, Organisationsressource. Typischerweise unterschiedlich: Netzwerkaufbau, Deployment-Mechanismen, Richtlinien auf Ordnerebene.&lt;/p&gt;

&lt;p&gt;Wenn ein regulierter Workload das gesamte Design verformt, ist eine zweite Landing Zone womöglich günstiger als der Kompromiss. Sie kostet dauerhaft — also treffen Sie die Entscheidung bewusst.&lt;/p&gt;

&lt;h2&gt;
  
  
  Was tatsächlich schiefgeht
&lt;/h2&gt;

&lt;p&gt;Muster, die es zu benennen lohnt, weil sie Quartale kosten und nicht Sprints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Auf hybride Konnektivität warten&lt;/strong&gt; , die der erste Workload gar nicht nutzt. Der häufigste Terminkiller.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adressplanung verschieben&lt;/strong&gt; , weil „wir starten ja nur in einer Region“. Die Rechnung kommt bei der Übernahme, der Partneranbindung oder der zweiten Region.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Die Pipeline für das Fundament halten.&lt;/strong&gt; IaC und GitOps sind eine technische Best Practice für den Rollout der Landing Zone — wirklich wichtig, aber nicht dasselbe wie eine unumkehrbare Entscheidung.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Für erdachte Workloads bauen.&lt;/strong&gt; Ohne echten Dienst erratene Anforderungen sind Vermutungen mit einem Terraform-Modul daran.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Eine Landing-Zone-Checkliste zwischen Clouds kopieren.&lt;/strong&gt; Azure und Google zählen das Netzwerk zum Kern, AWS lässt es aus der Definition heraus. Ein zwischen Anbietern portiertes Anforderungsdokument überspezifiziert die eine Hälfte und lässt die andere still unter den Tisch fallen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;„Wir wollen das“ mit „ohne das können wir nicht starten“ verwechseln.&lt;/strong&gt; Monitoring ist essenziell. Und an einem Dienstag ergänzbar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Das falsche Team.&lt;/strong&gt; Googles Empfehlung verlangt Sicherheit, Identität, Netzwerk und Betrieb in einem Raum, mit einer Leitung, die die Plattform kennt. Eine nur vom Netzwerkteam entworfene Landing Zone sieht auch genau so aus.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Landing-Zone-Checkliste: acht Fragen vor dem Bau
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Schreiben Sie Ihre vier auf: Identitätsquelle, Ressourcenhierarchie, Adressplan, Sicherheitsgrenzen. Fehlt eine, haben Sie noch kein Fundament.&lt;/li&gt;
&lt;li&gt;Fragen Sie zu jedem weiteren Element, was es kostet, es in sechs Monaten zu ergänzen. Lautet die Antwort „wenig“, gehört es vom kritischen Pfad.&lt;/li&gt;
&lt;li&gt;Prüfen Sie, ob Ihr erster Workload wirklich Zugriff aufs Rechenzentrum braucht. Wenn nicht, entkoppeln Sie das Konnektivitätsprojekt.&lt;/li&gt;
&lt;li&gt;Planen Sie Adressraum für Regionen, die noch nicht offen sind. Jetzt kostenlos, später teuer.&lt;/li&gt;
&lt;li&gt;Auf AWS: Entscheiden Sie Namen und Einbindung der geteilten Konten vor dem Start — das ist dokumentiert dauerhaft — und planen Sie das Netzwerk separat, denn Control Tower nimmt Ihnen das nicht ab.&lt;/li&gt;
&lt;li&gt;Rollen Sie es als Code mit Pipeline aus — Googles eigene Best Practice — aber lassen Sie den Pipeline-Bau nicht zum Fundamentprojekt werden.&lt;/li&gt;
&lt;li&gt;Wählen Sie einen echten ersten Workload, bevor das Design fertig ist. Er findet die Lücken, die Ihr Dokument nicht kennt.&lt;/li&gt;
&lt;li&gt;Verformt ein Workload alles, kalkulieren Sie stattdessen eine zweite Landing Zone.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Der Punkt
&lt;/h2&gt;

&lt;p&gt;Eine Landing Zone ist kein Produkt, keine Checkliste und kein Partnerprojekt. Googles Dokumentation sagt unmissverständlich, dass es keine standardisierte Umsetzung gibt und die erste Version nicht die letzte sein soll. AWS baut Ihnen eine in einer Stunde — und händigt Ihnen dabei Entscheidungen aus, die es selbst als dauerhaft bezeichnet.&lt;/p&gt;

&lt;p&gt;Was sie tatsächlich ist: vier Entscheidungen, deren Rücknahme teuer ist, plus eine modulare Schicht, die Sie erweitern, solange die Plattform existiert. Ihre Anforderungen in diese beiden Töpfe zu sortieren, ist der größte Teil der Architekturarbeit — und die Projekte, die scheitern, sind fast immer die, die etwas Aufschiebbares auf den kritischen Pfad und etwas Dauerhaftes ins Backlog gelegt haben.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Weiterlesen:&lt;/strong&gt; Für die Schicht darüber siehe &lt;a href="https://www.alekseialeinikov.com/de/blog/topics/devops/platform-engineering-auf-kubernetes-2026" rel="noopener noreferrer"&gt;Platform Engineering auf Kubernetes&lt;/a&gt; und die &lt;a href="https://www.alekseialeinikov.com/de/blog/topics/architecture/secure-by-default-gke-referenzarchitektur-2026" rel="noopener noreferrer"&gt;Secure-by-Default-GKE-Referenzarchitektur&lt;/a&gt;. Zur Identitätsentscheidung in der Praxis siehe &lt;a href="https://www.alekseialeinikov.com/de/blog/topics/security/service-account-schluessel-abschaffen-workload-identity-federation-2026" rel="noopener noreferrer"&gt;Service-Account-Schlüssel abschaffen&lt;/a&gt;. Zum Resilienz-Element siehe &lt;a href="https://www.alekseialeinikov.com/de/blog/topics/cloud/backups-sind-kein-disaster-recovery-2026" rel="noopener noreferrer"&gt;Backups sind kein Disaster Recovery&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quellen:&lt;/strong&gt; &lt;a href="https://docs.cloud.google.com/architecture/landing-zones" rel="noopener noreferrer"&gt;Landing zone design in Google Cloud&lt;/a&gt; (zuletzt geprüft am 2. Januar 2026), &lt;a href="https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/landing-zone/design-areas" rel="noopener noreferrer"&gt;Azure landing zone design areas&lt;/a&gt; (Cloud Adoption Framework, aktualisiert Dezember 2025) sowie &lt;a href="https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html" rel="noopener noreferrer"&gt;What is AWS Control Tower&lt;/a&gt; und &lt;a href="https://docs.aws.amazon.com/controltower/latest/userguide/how-control-tower-works.html" rel="noopener noreferrer"&gt;How AWS Control Tower works&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ursprünglich veröffentlicht auf &lt;a href="https://www.alekseialeinikov.com/de/blog/topics/cloud/was-gehoert-in-eine-cloud-landing-zone-2026" rel="noopener noreferrer"&gt;alekseialeinikov.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>landingzone</category>
      <category>azurelandingzone</category>
      <category>awslandingzone</category>
      <category>cloudlandingzone</category>
    </item>
    <item>
      <title>What Actually Belongs in a Landing Zone — and What Gets Pushed Into One for No Reason</title>
      <dc:creator>Aleksei Aleinikov</dc:creator>
      <pubDate>Tue, 25 Aug 2026 12:00:00 +0000</pubDate>
      <link>https://dev.to/aleksei_aleinikov/what-actually-belongs-in-a-landing-zone-and-what-gets-pushed-into-one-for-no-reason-2b99</link>
      <guid>https://dev.to/aleksei_aleinikov/what-actually-belongs-in-a-landing-zone-and-what-gets-pushed-into-one-for-no-reason-2b99</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F66t15c1cpnf92wgchzw9.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F66t15c1cpnf92wgchzw9.webp" alt="What Actually Belongs in a Landing Zone — and What Gets Pushed Into One for No Reason" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ask five engineers what a landing zone is and you will get five inventories. Someone will include the CI/CD pipeline. Someone will include the monitoring stack. Someone will insist it is not done until the FinOps dashboards are live.&lt;/p&gt;

&lt;p&gt;The vendors are not much help either. Azure documents eight design areas, Google names four core elements, and AWS defines the term in a single sentence that leaves out networking entirely.&lt;/p&gt;

&lt;p&gt;They are all describing something real. They are not describing the same thing.&lt;/p&gt;

&lt;p&gt;The useful definition is not a list of components. It is this: &lt;strong&gt;a landing zone is the set of decisions you cannot reverse once workloads are running on top of them.&lt;/strong&gt; Everything else is a roadmap item that got promoted into a blocker.&lt;/p&gt;

&lt;h2&gt;
  
  
  Azure, AWS and Google Landing Zones Agree on the Core
&lt;/h2&gt;

&lt;p&gt;The interesting evidence is that frameworks built independently, with different terminology and different products, land on the same substance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google&lt;/strong&gt; names four core elements you must design for a landing zone: identity provisioning, resource hierarchy, network, and security controls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microsoft’s Cloud Adoption Framework&lt;/strong&gt; splits Azure landing zones into eight design areas across two groups. The environment areas: Azure billing and tenant, identity and access management, resource organisation, network topology and connectivity. The compliance areas: security, management, governance, and platform automation and DevOps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS&lt;/strong&gt; defines a landing zone as a well-architected, multi-account environment based on security and compliance best practices — the enterprise-wide container that holds your organizational units, accounts, users and other resources.&lt;/p&gt;

&lt;p&gt;Eight versus four versus one sentence looks like disagreement. Line them up and it is not:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Substance&lt;/th&gt;
&lt;th&gt;Google&lt;/th&gt;
&lt;th&gt;Microsoft&lt;/th&gt;
&lt;th&gt;AWS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Who you are&lt;/td&gt;
&lt;td&gt;Identity provisioning&lt;/td&gt;
&lt;td&gt;Identity and access management&lt;/td&gt;
&lt;td&gt;IAM Identity Center directory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How resources are arranged&lt;/td&gt;
&lt;td&gt;Resource hierarchy&lt;/td&gt;
&lt;td&gt;Resource organisation&lt;/td&gt;
&lt;td&gt;Organizations OUs, Account Factory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How packets move&lt;/td&gt;
&lt;td&gt;Network&lt;/td&gt;
&lt;td&gt;Network topology and connectivity&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Outside the definition&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What is enforced&lt;/td&gt;
&lt;td&gt;Security controls&lt;/td&gt;
&lt;td&gt;Security, Governance&lt;/td&gt;
&lt;td&gt;Controls: preventive, detective, proactive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How it gets deployed&lt;/td&gt;
&lt;td&gt;(Best practice: IaC + GitOps)&lt;/td&gt;
&lt;td&gt;Platform automation and DevOps&lt;/td&gt;
&lt;td&gt;Account Factory, CloudFormation StackSets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How it is run&lt;/td&gt;
&lt;td&gt;(Additional element)&lt;/td&gt;
&lt;td&gt;Management&lt;/td&gt;
&lt;td&gt;Dashboard, drift detection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Commercial setup&lt;/td&gt;
&lt;td&gt;(Prerequisite: org + billing account)&lt;/td&gt;
&lt;td&gt;Billing and tenant&lt;/td&gt;
&lt;td&gt;Management account, Organizations&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Microsoft promotes to first-class status what Google files under prerequisites and best practices. That is a documentation choice, not an architectural disagreement.&lt;/p&gt;

&lt;p&gt;AWS is the genuinely different one, and it is worth pausing on.&lt;/p&gt;

&lt;h2&gt;
  
  
  The AWS Landing Zone Is a Different Shape
&lt;/h2&gt;

&lt;p&gt;AWS scopes the word more narrowly than the other two. A Control Tower landing zone gives you a root, a Security OU containing Log Archive and Audit accounts, an optional Sandbox OU, an IAM Identity Center directory, and a set of controls applied across the organisation. Networking is not in that list. There is no address plan, no connectivity design, no segmentation model — those remain your problem, handled separately.&lt;/p&gt;

&lt;p&gt;That asymmetry has a practical consequence: &lt;strong&gt;a landing zone checklist copied from one cloud to another will mislead you.&lt;/strong&gt; An Azure architect handing an AWS team “the landing zone requirements” will over-specify accounts and under-specify VPCs. It runs the other way too.&lt;/p&gt;

&lt;p&gt;The second difference is the timeline claim. AWS says Control Tower builds a landing zone in less than an hour. Google says designing and deploying one can take multiple weeks. Both are accurate, because they are measuring different things: Control Tower &lt;em&gt;deploys a pre-made opinion&lt;/em&gt;, while Google’s guidance describes &lt;em&gt;the process of forming your own&lt;/em&gt;. If AWS’s opinion fits your organisation, you have skipped the expensive part legitimately. If it does not, the hour you saved is not the relevant number.&lt;/p&gt;

&lt;p&gt;And speed does not buy reversibility. AWS’s own documentation is refreshingly blunt about it:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;these cannot be renamed later, and existing accounts cannot be added for security and logging after initial launch&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is a shared-account naming and enrolment decision, made in the first hour, that you live with permanently. The reversibility test does not care how fast the deployment was.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqenjzpbe5y8a1x30ff41.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqenjzpbe5y8a1x30ff41.webp" alt="The four irreversible landing zone decisions — identity, resource hierarchy, network addressing and security boundaries — shown against the deferrable layer of monitoring, cost control, backup and DR, API management and cluster management" width="800" height="480"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Four decisions you make once, and a layer you can keep adding to for years.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  There Is No Standard Landing Zone, and Google Says So
&lt;/h2&gt;

&lt;p&gt;Before accepting anyone’s landing zone checklist, read this line from Google’s architecture centre:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The diagram above is only an example, because there is no single or standard implementation of a landing zone.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The design depends on your industry, your organisational structure, your security and compliance requirements, the workloads you are moving, your existing infrastructure and where your business and customers are.&lt;/p&gt;

&lt;p&gt;This matters commercially. If a partner or a blog post presents &lt;em&gt;the&lt;/em&gt; landing zone as a fixed deliverable, what you are being sold is an opinion with a price attached. Sometimes that opinion is excellent and buying it is the right call. But you should know you are buying an opinion, not a specification.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Test: Can You Change It Later?
&lt;/h2&gt;

&lt;p&gt;Here is the filter that sorts the argument. For each candidate element, ask: &lt;strong&gt;if we get this wrong, what does fixing it cost after workloads are live?&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Fails the test — decide before the first workload
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Resource hierarchy.&lt;/strong&gt; Your organisation, folder and project structure determines where policy attaches and where budgets aggregate. Moving projects between folders is possible; rebuilding a hierarchy under running workloads while IAM and org policies inherit from it is a project nobody volunteers for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Network address space.&lt;/strong&gt; CIDR allocation is the classic irreversible decision. Overlapping ranges surface years later when you acquire a company or connect a partner network, and the fix is re-addressing production. Decide the plan even for regions you have not opened yet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Identity domain and federation.&lt;/strong&gt; Which directory is authoritative, how it synchronises, what the trust path looks like. Everything else in your security model inherits from this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security perimeters.&lt;/strong&gt; Where the boundaries actually sit — VPC Service Controls perimeters in Google’s example architecture, network segmentation, the shape of your Shared VPC. These define what is even expressible later.&lt;/p&gt;

&lt;h3&gt;
  
  
  Passes the test — add it when you need it
&lt;/h3&gt;

&lt;p&gt;Google lists these explicitly as elements beyond the core, to be added according to business requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Monitoring and logging&lt;/li&gt;
&lt;li&gt;Backup and disaster recovery&lt;/li&gt;
&lt;li&gt;Compliance tooling&lt;/li&gt;
&lt;li&gt;Cost efficiency and control&lt;/li&gt;
&lt;li&gt;API management&lt;/li&gt;
&lt;li&gt;Cluster management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these require you to rebuild anything to introduce. You will want most of them, some of them urgently. That is a different statement from “the foundation is not finished without them.”&lt;/p&gt;

&lt;h2&gt;
  
  
  The Most Over-Scoped Item on Every Foundation Project
&lt;/h2&gt;

&lt;p&gt;This one deserves its own section, because Google’s documentation says something most foundation projects refuse to believe:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;if your first workload does not require access to on-premises network resources, you could build connectivity to your on-premises environment later.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hybrid connectivity — Interconnect, Direct Connect, ExpressRoute, the VPN fallback, the routing design, the firewall change requests, the network team’s queue — is routinely the longest pole in the tent. It is also frequently unnecessary for the first workload, which is often a new, cloud-native, internet-facing service that talks to nothing in the data centre.&lt;/p&gt;

&lt;p&gt;Sequencing it after the first deployment does not make it optional. It makes it parallel instead of blocking.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ferqq2wkwbyywe7kiyyi8.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ferqq2wkwbyywe7kiyyi8.webp" alt="Landing zone sequencing: irreversible decisions before the first workload, hybrid connectivity and operational tooling deliberately deferred to run in parallel once something is already deployed" width="799" height="413"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The order matters more than the inventory. Blocking on the wrong item costs months.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Modular Means Your First Version Is Wrong on Purpose
&lt;/h2&gt;

&lt;p&gt;Google’s guidance contains an admission worth quoting because it contradicts how these projects are usually run:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;because a landing zone is modular, your first iteration of a landing zone is often not your final version.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And the practical instruction that follows: centre the initial design on the elements required to migrate your first workloads, and plan to add other elements later.&lt;/p&gt;

&lt;p&gt;Compare that with the typical foundation programme, which sets out to be complete before anything runs. Those programmes overrun — Google notes deployment “can take multiple weeks” and that project management is essential, which is documentation-speak for &lt;em&gt;this slips&lt;/em&gt; — and they are still wrong at the end, because every requirement in them was guessed at without a real workload to test against.&lt;/p&gt;

&lt;p&gt;The teams that do this well ship a deliberately incomplete foundation, put one real workload on it, and let that workload tell them what the second iteration needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  When One Landing Zone Is Not Enough
&lt;/h2&gt;

&lt;p&gt;Worth knowing before you contort a single design to satisfy one awkward workload: Google explicitly supports running &lt;strong&gt;more than one landing zone&lt;/strong&gt; when some workloads have very different scalability or compliance requirements.&lt;/p&gt;

&lt;p&gt;What can be shared across them: identities, billing, and the organisation resource. What typically differs: network setup, deployment mechanisms, folder-level policies.&lt;/p&gt;

&lt;p&gt;If you have one regulated workload bending the entire design out of shape, a second landing zone may be cheaper than the compromise. It is a real ongoing cost, so make it a decision rather than an accident.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Actually Goes Wrong
&lt;/h2&gt;

&lt;p&gt;Patterns worth naming, because they cost quarters, not sprints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Blocking on hybrid connectivity&lt;/strong&gt; that the first workload does not use. The single most common schedule killer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deferring address planning&lt;/strong&gt; because “we’ll only use one region at first.” The bill arrives at the acquisition, or the partner integration, or the second region.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treating the pipeline as foundation.&lt;/strong&gt; IaC and GitOps are a technical best practice for deploying the landing zone — genuinely important, and not the same as a decision you cannot reverse.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Building for imagined workloads.&lt;/strong&gt; Requirements guessed without a real service are guesses with a Terraform module attached.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Copying a landing zone checklist between clouds.&lt;/strong&gt; Azure and Google put the network in the core; AWS leaves it out of the definition. A requirements document ported across vendors over-specifies one half and silently drops the other.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confusing “we want this” with “we cannot start without this.”&lt;/strong&gt; Monitoring is essential. It is also addable on a Tuesday.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assembling the wrong team.&lt;/strong&gt; Google’s guidance calls for security, identity, network and operations in one room with a lead who knows the platform. A landing zone designed only by the network team looks exactly like one.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Landing Zone Checklist: Seven Questions Before You Build
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Write down your four: identity source, resource hierarchy, address plan, security boundaries. If any is undecided, you do not have a foundation yet.&lt;/li&gt;
&lt;li&gt;For every other proposed element, ask what it costs to add in six months. If the answer is “not much,” take it off the critical path.&lt;/li&gt;
&lt;li&gt;Check whether your first workload actually needs on-premises access. If not, decouple the connectivity project.&lt;/li&gt;
&lt;li&gt;Plan address space for regions you have not opened. It is free now and expensive later.&lt;/li&gt;
&lt;li&gt;If you are on AWS, decide the shared-account names and enrolment before launch — that one is documented as permanent — and plan the network separately, because Control Tower will not do it for you.&lt;/li&gt;
&lt;li&gt;Deploy it as code with a pipeline — Google’s own best practice — but do not let building the pipeline become the foundation project.&lt;/li&gt;
&lt;li&gt;Pick a real first workload before finishing the design. It will find the gaps your document cannot.&lt;/li&gt;
&lt;li&gt;If one workload is distorting everything, price a second landing zone instead.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Point
&lt;/h2&gt;

&lt;p&gt;A landing zone is not a product, a checklist, or a partner engagement. Google’s documentation says outright there is no standard implementation, and that the first version is not meant to be the last. AWS will build you one in an hour and still hand you decisions it tells you are permanent.&lt;/p&gt;

&lt;p&gt;What it actually is: four decisions that are expensive to unwind, plus a modular layer you will extend for as long as the platform exists. Sorting your requirements into those two buckets is most of the architecture work — and the projects that fail are almost always the ones that put a deferrable item on the critical path and a permanent one in the backlog.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Related reading:&lt;/strong&gt; for the layer that sits on top, see &lt;a href="https://www.alekseialeinikov.com/en/blog/topics/devops/platform-engineering-on-kubernetes-2026" rel="noopener noreferrer"&gt;platform engineering on Kubernetes&lt;/a&gt; and the &lt;a href="https://www.alekseialeinikov.com/en/blog/topics/architecture/secure-by-default-gke-reference-architecture-2026" rel="noopener noreferrer"&gt;secure-by-default GKE reference architecture&lt;/a&gt;. For the identity decision in practice, see &lt;a href="https://www.alekseialeinikov.com/en/blog/topics/security/kill-service-account-keys-workload-identity-federation-2026" rel="noopener noreferrer"&gt;killing service account keys with Workload Identity Federation&lt;/a&gt;. For the resilience element, see &lt;a href="https://www.alekseialeinikov.com/en/blog/topics/cloud/backups-are-not-disaster-recovery-2026" rel="noopener noreferrer"&gt;backups are not disaster recovery&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sources:&lt;/strong&gt; &lt;a href="https://docs.cloud.google.com/architecture/landing-zones" rel="noopener noreferrer"&gt;Landing zone design in Google Cloud&lt;/a&gt; (last reviewed 2 January 2026), &lt;a href="https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/landing-zone/design-areas" rel="noopener noreferrer"&gt;Azure landing zone design areas&lt;/a&gt; (Cloud Adoption Framework, updated December 2025), and &lt;a href="https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html" rel="noopener noreferrer"&gt;What is AWS Control Tower&lt;/a&gt; plus &lt;a href="https://docs.aws.amazon.com/controltower/latest/userguide/how-control-tower-works.html" rel="noopener noreferrer"&gt;How AWS Control Tower works&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.alekseialeinikov.com/en/blog/topics/cloud/what-belongs-in-a-cloud-landing-zone-2026" rel="noopener noreferrer"&gt;alekseialeinikov.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>landingzone</category>
      <category>azurelandingzone</category>
      <category>awslandingzone</category>
      <category>cloudlandingzone</category>
    </item>
    <item>
      <title>Wazuh vs Microsoft Sentinel vs Google SecOps: Das SIEM, das Sie wählen, ist die Rechnung, die Sie bekommen</title>
      <dc:creator>Aleksei Aleinikov</dc:creator>
      <pubDate>Mon, 24 Aug 2026 12:00:00 +0000</pubDate>
      <link>https://dev.to/aleksei_aleinikov/wazuh-vs-microsoft-sentinel-vs-google-secops-das-siem-das-sie-wahlen-ist-die-rechnung-die-sie-387k</link>
      <guid>https://dev.to/aleksei_aleinikov/wazuh-vs-microsoft-sentinel-vs-google-secops-das-siem-das-sie-wahlen-ist-die-rechnung-die-sie-387k</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr6w6nihsy5fbvsyfu9s9.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr6w6nihsy5fbvsyfu9s9.webp" alt="Wazuh vs Microsoft Sentinel vs Google SecOps: Das SIEM, das Sie wählen, ist die Rechnung, die Sie bekommen" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Die meisten SIEM-Vergleiche sind Feature-Tabellen. Sie sind auch nutzlos, weil die Funktionen konvergieren und die Preismodelle nicht.&lt;/p&gt;

&lt;p&gt;Wazuh, Microsoft Sentinel und Google SecOps nehmen alle Logs auf, erkennen alle Bedrohungen und stehen alle im Zentrum eines Security-Operations-Workflows. Was sie trennt, ist, &lt;strong&gt;was jedes von ihnen zählt&lt;/strong&gt; — und diese Wahl entscheidet still darüber, was Ihr Team zu loggen bereit ist, und damit, was Sie um drei Uhr nachts untersuchen können.&lt;/p&gt;

&lt;p&gt;Hier sind die drei Zähler, aus der Anbieterdokumentation, geprüft im August 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sentinel zählt Ihre Gigabyte
&lt;/h2&gt;

&lt;p&gt;Microsoft Sentinel rechnet nach dem aufgenommenen Datenvolumen ab, bepreist nach der Stufe, in der die Daten landen.&lt;/p&gt;

&lt;p&gt;Die &lt;strong&gt;Analytics-Stufe&lt;/strong&gt; kennt zwei Modi:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pay-as-you-go&lt;/strong&gt; — der Standard, basierend auf dem gespeicherten Datenvolumen. Microsoft misst ein GB hier als 10⁹ Bytes; anders als bei S3 sind das dezimale Gigabyte.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commitment Tiers&lt;/strong&gt; — vorab gekaufte Kapazität ab &lt;strong&gt;100 GB pro Tag&lt;/strong&gt; zu einem vergünstigten effektiven Satz. Nutzung darüber hinaus wird zum selben effektiven Satz berechnet, nicht zum Pay-as-you-go-Preis.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Die &lt;strong&gt;ersten 90 Tage Aufbewahrung sind enthalten&lt;/strong&gt;. Danach zahlen Sie die Log-Analytics-Preise.&lt;/p&gt;

&lt;p&gt;Ein Vorbehalt zu den Zahlen in diesem Artikel: Microsoft hält die tatsächlichen Preise pro GB auf der Preisseite und im Kostenrechner fest, nicht in der Abrechnungsdokumentation, und sie variieren nach Region und Commitment Tier. Dokumentiert ist — und architektonisch entscheidend — die &lt;em&gt;Struktur&lt;/em&gt; weiter unten. Für den für Sie geltenden Satz rechnen Sie Ihr Volumen durch den &lt;a href="https://microsoft.com/en-us/security/pricing/microsoft-sentinel/cost-estimator" rel="noopener noreferrer"&gt;Sentinel-Kostenrechner&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Neu ist zudem eine &lt;strong&gt;Data-Lake-Stufe&lt;/strong&gt; , die vier Dinge getrennt misst: Aufnahme, Verarbeitung, Speicherung und Abfragen. Der Speicherwert wird mit einer festen &lt;strong&gt;Kompressionsrate von 6:1&lt;/strong&gt; berechnet — 600 GB Rohdaten werden als 100 GB abgerechnet. Abfragen dagegen kosten pro GB &lt;strong&gt;unkomprimiert&lt;/strong&gt; gescannter Daten. Beide Angaben stehen in der Doku nebeneinander und werden beim Schätzen leicht verwechselt.&lt;/p&gt;

&lt;p&gt;Eine wirklich nützliche Menge an Quellen ist kostenlos: Azure-Activity-Logs, Sentinel Health, Office-365-Audit-Logs für SharePoint, Exchange und Teams sowie Sicherheitswarnungen der Defender-Familie. Der Vorbehalt ist scharf — die &lt;strong&gt;Warnungen sind kostenlos, die Rohlogs hinter mehreren dieser Produkte nicht&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Die Falle in den Commitment Tiers
&lt;/h3&gt;

&lt;p&gt;Sie können eine Stufe jederzeit erhöhen. Senken können Sie sie &lt;strong&gt;nur alle 31 Tage&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Diese Asymmetrie sollte man einplanen. Legen Sie sich auf ein Niveau fest, das Ihr Logvolumen nicht hält — weil eine laute Quelle abgeschaltet wurde oder eine Migration endete — zahlen Sie diese Kapazität den Rest des Monats.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ein Datum für den Kalender
&lt;/h3&gt;

&lt;p&gt;Nach dem &lt;strong&gt;31. März 2027&lt;/strong&gt; wird Microsoft Sentinel im Azure-Portal nicht mehr unterstützt und ist nur noch im Microsoft-Defender-Portal verfügbar. Wenn Ihre Runbooks, Schulungsunterlagen oder Automatisierungen auf Azure-Portal-Pfade verweisen, ist das eine terminierte Migrationsaufgabe, keine optionale.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F22o0bql6pmavk451v4du.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F22o0bql6pmavk451v4du.webp" alt="Drei SIEM-Preiszähler im Vergleich: Microsoft Sentinel rechnet aufgenommene Gigabyte pro Tag ab, Google SecOps verkauft Pakete mit Obergrenzen für Detection-Regeln, und Wazuh rechnet Agenten ab oder gar nichts, wenn selbst gehostet" width="800" height="467"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Dieselbe Aufgabe, drei verschiedene Zähler. Was ein Anbieter zählt, wird zu dem, wogegen Ihre Architektur optimiert.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Google SecOps zählt Ihre Detection-Regeln
&lt;/h2&gt;

&lt;p&gt;Google veröffentlicht drei Pakete und &lt;strong&gt;überhaupt keine Preise&lt;/strong&gt;. Bei jeder Stufe steht “contact sales for pricing”.&lt;/p&gt;

&lt;p&gt;Öffentlich ist die Form der Grenzen, und sie ist ungewöhnlich: Die Obergrenzen sind in &lt;strong&gt;Detection-Regeln&lt;/strong&gt; ausgedrückt, nicht in Gigabyte.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Standard&lt;/th&gt;
&lt;th&gt;Enterprise&lt;/th&gt;
&lt;th&gt;Enterprise Plus&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Single-Event-Regeln&lt;/td&gt;
&lt;td&gt;1.000&lt;/td&gt;
&lt;td&gt;2.000&lt;/td&gt;
&lt;td&gt;3.500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-Event-Regeln&lt;/td&gt;
&lt;td&gt;75&lt;/td&gt;
&lt;td&gt;125&lt;/td&gt;
&lt;td&gt;200&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Umgebungen&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;unbegrenzt&lt;/td&gt;
&lt;td&gt;unbegrenzt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hot-Retention&lt;/td&gt;
&lt;td&gt;12 Monate&lt;/td&gt;
&lt;td&gt;12 Monate&lt;/td&gt;
&lt;td&gt;12 Monate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UEBA&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;ja&lt;/td&gt;
&lt;td&gt;ja&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini in SecOps&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;ja&lt;/td&gt;
&lt;td&gt;ja&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Applied Threat Intelligence&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Mandiant, VirusTotal, Google&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Alle drei enthalten &lt;strong&gt;12 Monate Hot-Retention&lt;/strong&gt; , über 700 Parser und über 300 SOAR-Integrationen. Enterprise Plus ergänzt fortgeschrittenes Data-Pipeline-Management, 12 Monate Routing an ein anderes Ziel zur Unterstützung von SIEM-Migrationen sowie kostenlosen BigQuery-Speicher für UDM-Exporte.&lt;/p&gt;

&lt;p&gt;Zwei Beobachtungen, eine günstige und eine nicht.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Für Google:&lt;/strong&gt; Zwölf Monate Hot-Retention als Standard sind eine andere Haltung als 90 Tage inklusive und danach monatliche Zahlung. Wenn Ihre Compliance oder Ihre Vorfallszeiträume ein Jahr durchsuchbarer Daten voraussetzen, ist das ein struktureller Unterschied, kein Rabatt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gegen Google:&lt;/strong&gt; Ohne Vertriebsgespräch lässt sich kein Budget modellieren. Für ein Plattformteam, das drei Optionen in einer Tabelle vergleichen will, ist “contact sales” selbst ein Kostenfaktor — Wochen Beschaffung, bevor überhaupt klar ist, ob die Option je infrage kam.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wazuh zählt Ihre Agenten — oder nichts
&lt;/h2&gt;

&lt;p&gt;Wazuh ist der Open-Source-Vertreter, und seine Bepreisung teilt sich sauber in zwei Hälften.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Selbst gehostet&lt;/strong&gt; kostet keine Lizenzgebühr. Das ist wirklich kostenlos in dem Sinn, dass die Software nichts kostet, und wirklich nicht kostenlos in dem Sinn, dass Sie nun einen Indexer-Cluster betreiben, dessen Speicher mit jeder angebundenen Logquelle wächst — plus Upgrades, plus Kapazitätsplanung, plus die Person, die das versteht.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wazuh Cloud&lt;/strong&gt; startet bei &lt;strong&gt;571 $ pro Monat&lt;/strong&gt; für die Small-Stufe: bis zu 100 aktive Agenten, ein Monat indizierte Aufbewahrung und drei Monate Archivaufbewahrung, mit Standard-Support. Größere Stufen skalieren von dort. Die Plattform ist PCI-DSS- und SOC-2-zertifiziert, mit 14-tägiger Testphase.&lt;/p&gt;

&lt;p&gt;Schauen Sie genau auf diesen Zähler, denn er ist der entscheidende Teil: Wazuh Cloud zählt &lt;strong&gt;aktive Agenten und Aufbewahrungsfenster&lt;/strong&gt; , nicht aufgenommene Gigabyte. Ein gesprächiger Endpunkt kostet so viel wie ein stiller.&lt;/p&gt;

&lt;p&gt;Das dreht den Anreiz komplett um. Unter Sentinel erhöht eine ausführliche Audit-Richtlinie auf einem Server Ihre Rechnung. Unter Wazuh Cloud nicht.&lt;/p&gt;

&lt;h2&gt;
  
  
  Der Vergleich, auf den es ankommt
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fluimbofu5o924si92x7a.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fluimbofu5o924si92x7a.webp" alt="Wie jedes SIEM-Preismodell das Teamverhalten verändert: Volumenpreise drängen zum Filtern von Logs, Agentenpreise zur Begrenzung der Endpunktabdeckung, Regel-Obergrenzen zur Konsolidierung von Detections und Selbsthosting verlagert Kosten in Ingenieurszeit" width="800" height="480"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Jeder Zähler erzeugt ein Verhalten. Die Frage ist, ob Sie mit diesem Verhalten im Ernstfall leben können.&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Wazuh&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Microsoft Sentinel&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Google SecOps&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Zähler&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agenten (Cloud) oder nichts (selbst gehostet)&lt;/td&gt;
&lt;td&gt;GB pro Tag&lt;/td&gt;
&lt;td&gt;Paketstufe + Regel-Limits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Einstiegspreis&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0 $ selbst gehostet; 571 $/Mo Cloud&lt;/td&gt;
&lt;td&gt;Pay-as-you-go pro GB&lt;/td&gt;
&lt;td&gt;nicht veröffentlicht&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bindung&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;monatliche Stufen&lt;/td&gt;
&lt;td&gt;ab 100 GB/Tag, Senkung alle 31 Tage&lt;/td&gt;
&lt;td&gt;jährlich, über Vertrieb&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Enthaltene Aufbewahrung&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1 Monat indiziert, 3 Monate Archiv (Small)&lt;/td&gt;
&lt;td&gt;90 Tage&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;12 Monate hot&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Detection-Limits&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;keine&lt;/td&gt;
&lt;td&gt;keine&lt;/td&gt;
&lt;td&gt;1.000–3.500 Regeln je Stufe&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sie betreiben&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;alles (selbst gehostet)&lt;/td&gt;
&lt;td&gt;nichts&lt;/td&gt;
&lt;td&gt;nichts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Preistransparenz&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;öffentlich&lt;/td&gt;
&lt;td&gt;öffentlich&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Vertrieb kontaktieren&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Der Teil, den niemand in den Vergleich schreibt
&lt;/h2&gt;

&lt;p&gt;Ein Volumenzähler erzeugt einen perversen Anreiz, und man sollte ihn klar benennen: &lt;strong&gt;Je besser Ihr Logging, desto höher Ihre Rechnung.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Aktivieren Sie ausführliches Audit-Logging auf einem Domain Controller, bewegt sich die Rechnung. Binden Sie eine laute, aber gelegentlich entscheidende Quelle an — DNS-Abfragelogs etwa oder Prozesserstellungs-Events — fragt jemand aus dem Controlling nach dem Warum. Die rationale Teamreaktion ist Filtern: Debug-Level senken, laute Quellen samplen, Anbindung verschieben.&lt;/p&gt;

&lt;p&gt;Jede dieser Entscheidungen bleibt unsichtbar bis zum Vorfall. Dann stellt sich die fehlende Telemetrie als genau das heraus, was die Untersuchung gebraucht hätte, und niemand erinnert sich, dass es eine Budgetentscheidung von vor acht Monaten war.&lt;/p&gt;

&lt;p&gt;Das ist kein Argument dagegen, dass Pro-GB-Preise legitim sind. Es ist ein Argument dafür, den Zähler als &lt;strong&gt;architektonische Randbedingung&lt;/strong&gt; zu behandeln:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wirklich hochwertige Sicherheitstelemetrie in die teure Analytics-Stufe leiten, wo die Detections laufen.&lt;/li&gt;
&lt;li&gt;Volumenstarke, geringwertige Daten in einer günstigeren Stufe halten, die Sie im Bedarfsfall trotzdem durchsuchen können — Sentinels Lake-Stufe existiert genau dafür, und Googles Enterprise-Plus-Paket enthält Routing an ein anderes Ziel.&lt;/li&gt;
&lt;li&gt;Aufschreiben, welche Quellen Sie &lt;em&gt;nicht&lt;/em&gt; aufgenommen haben, und warum. Dieses Dokument werden Sie beim ersten ernsten Vorfall sehen wollen.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Die Wahl
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Nehmen Sie Sentinel&lt;/strong&gt; , wenn Sie ohnehin ein Microsoft-Security-Haus sind. Die kostenlosen Datenquellen — Office-365-Audit-Logs, Defender-Warnungen, Azure Activity — sind ein realer wirtschaftlicher Vorteil, den kein Wettbewerber für diesen Bestand erreicht, und das Defender-Portal ist erkennbar die Richtung, in die Microsoft geht.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nehmen Sie Google SecOps&lt;/strong&gt; , wenn Aufbewahrungstiefe und Detection-Qualität mehr zählen als planbare Budgets. Zwölf Monate Hot-Daten als Standard sind eine andere Betriebshaltung, und die Mandiant-Intelligence in Enterprise Plus lässt sich nicht selbst zusammenbauen. Kalkulieren Sie die Beschaffungszeit ein.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nehmen Sie Wazuh&lt;/strong&gt; , wenn Sie die Ingenieurskapazität haben und den Zähler loswerden wollen. Selbst gehostet, keine Lizenzkosten, keine Pro-GB-Angst, volle Kontrolle über die Aufbewahrung. Sie tauschen eine Softwarerechnung gegen eine Betriebsrechnung — ein guter Tausch für manche Teams und ein schlechter für Teams ohne Plattformfunktion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Und prüfen Sie den Zähler gegen Ihre eigene Form.&lt;/strong&gt; Wenige Endpunkte mit riesigen Logs? Volumenpreise sind Ihr Feind. Zehntausende stille Endpunkte? Agentenpreise sind es. Komplexe Korrelationslogik? Dann sind die Regel-Obergrenzen die Randbedingung, vor der Sie niemand gewarnt hat.&lt;/p&gt;

&lt;h2&gt;
  
  
  Eine kurze Checkliste
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Messen Sie Ihr aktuelles tägliches Logvolumen in GB und Ihre Endpunktzahl. Sie brauchen beide Zahlen, weil verschiedene Anbieter jeweils eine davon abrechnen.&lt;/li&gt;
&lt;li&gt;Listen Sie Ihre Quellen nach Wert, nicht nach Volumen. Die teure Stufe ist für die wertvollen.&lt;/li&gt;
&lt;li&gt;Prüfen Sie, welche Ihrer Quellen auf der erwogenen Plattform kostenlos sind — bei Microsoft-Beständen auf Sentinel kann das ein großer Anteil sein.&lt;/li&gt;
&lt;li&gt;Modellieren Sie die Aufbewahrung ausdrücklich: 90 Tage inklusive ist ein ganz anderes Budget als 12 Monate inklusive.&lt;/li&gt;
&lt;li&gt;Wenn Sie ein Commitment Tier erwägen, modellieren Sie den Monat, in dem Ihr Volumen &lt;em&gt;sinkt&lt;/em&gt;. Senken geht nur alle 31 Tage.&lt;/li&gt;
&lt;li&gt;Für Google: Beginnen Sie das Vertriebsgespräch früh — was man nicht bepreisen kann, kann man nicht bewerten.&lt;/li&gt;
&lt;li&gt;Schreiben Sie auf, welche Quellen Sie nicht aufgenommen haben. Prüfen Sie diese Liste nach jedem Vorfall.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Der eigentliche Punkt
&lt;/h2&gt;

&lt;p&gt;Jeder SIEM-Anbieter wird Ihnen sagen, seine Plattform erkenne mehr mit weniger Aufwand. Sie konkurrieren mit denselben Detections, denselben Integrationen, zunehmend denselben KI-Assistenten.&lt;/p&gt;

&lt;p&gt;Wirklich unterscheiden sie sich darin, was sie zählen — und was sie zählen, wird zu dem, wogegen Ihr Team optimiert. Ein Pro-Gigabyte-Zähler erzeugt eine Organisation, die Logs filtert. Ein Agentenzähler erzeugt eine, die die Endpunktabdeckung begrenzt. Eine Regel-Obergrenze erzeugt eine, die Detections zu wenigen, breiteren Regeln zusammenfasst.&lt;/p&gt;

&lt;p&gt;Wählen Sie die Randbedingung, mit der Sie leben können, und gestalten Sie bewusst um sie herum — statt sie auf einer Rechnung zu entdecken.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Weiterlesen:&lt;/strong&gt; Was überhaupt in ein SIEM fließt, steht in &lt;a href="https://www.alekseialeinikov.com/de/blog/topics/security/falco-in-produktion-runtime-security-ohne-alarm-flut-2026" rel="noopener noreferrer"&gt;Falco in Produktion&lt;/a&gt; und &lt;a href="https://www.alekseialeinikov.com/de/blog/topics/security/eigenes-cspm-auf-gcp-security-command-center-vs-open-source-2026" rel="noopener noreferrer"&gt;Eigenes CSPM auf GCP&lt;/a&gt;. Dieselbe Ökonomie beim Speicher: &lt;a href="https://www.alekseialeinikov.com/de/blog/topics/cloud/cloudflare-r2-vs-s3-egress-kosten-2026" rel="noopener noreferrer"&gt;Was Egress wirklich kostet&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quellen:&lt;/strong&gt; Alle Angaben stammen aus der Anbieterdokumentation, geprüft im August 2026 — &lt;a href="https://learn.microsoft.com/en-us/azure/sentinel/billing" rel="noopener noreferrer"&gt;Microsoft Sentinel Billing&lt;/a&gt; (Stand Juni 2026), die Produktseite &lt;a href="https://cloud.google.com/security/products/security-operations" rel="noopener noreferrer"&gt;Google Security Operations&lt;/a&gt; und &lt;a href="https://wazuh.com/cloud/" rel="noopener noreferrer"&gt;Wazuh Cloud&lt;/a&gt;. Preise ändern sich; prüfen Sie vor jeder Budgetzusage.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ursprünglich veröffentlicht auf &lt;a href="https://www.alekseialeinikov.com/de/blog/topics/security/siem-preise-wazuh-vs-sentinel-vs-google-secops-2026" rel="noopener noreferrer"&gt;alekseialeinikov.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>siem</category>
      <category>wazuh</category>
      <category>microsoftsentinel</category>
      <category>googlesecops</category>
    </item>
    <item>
      <title>Wazuh vs Microsoft Sentinel vs Google SecOps: The SIEM You Pick Is the Bill You Get</title>
      <dc:creator>Aleksei Aleinikov</dc:creator>
      <pubDate>Mon, 24 Aug 2026 12:00:00 +0000</pubDate>
      <link>https://dev.to/aleksei_aleinikov/wazuh-vs-microsoft-sentinel-vs-google-secops-the-siem-you-pick-is-the-bill-you-get-1j0c</link>
      <guid>https://dev.to/aleksei_aleinikov/wazuh-vs-microsoft-sentinel-vs-google-secops-the-siem-you-pick-is-the-bill-you-get-1j0c</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr6w6nihsy5fbvsyfu9s9.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr6w6nihsy5fbvsyfu9s9.webp" alt="Wazuh vs Microsoft Sentinel vs Google SecOps: The SIEM You Pick Is the Bill You Get" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most SIEM comparisons are feature tables. They are also useless, because the features converge and the pricing models do not.&lt;/p&gt;

&lt;p&gt;Wazuh, Microsoft Sentinel and Google SecOps all ingest logs, all detect threats, all sit at the centre of a security operations workflow. What separates them is &lt;strong&gt;what each one counts&lt;/strong&gt; — and that choice quietly determines what your team is willing to log, which determines what you can investigate at 3am.&lt;/p&gt;

&lt;p&gt;Here are the three meters, from vendor documentation checked in August 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sentinel Counts Your Gigabytes
&lt;/h2&gt;

&lt;p&gt;Microsoft Sentinel bills on the volume of data ingested, priced by the tier the data lands in.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;analytics tier&lt;/strong&gt; has two modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pay-as-you-go&lt;/strong&gt; — the default, based on data volume stored. Note that Microsoft measures a GB as 10⁹ bytes here; unlike S3, these are decimal gigabytes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commitment tiers&lt;/strong&gt; — pre-purchased capacity starting at &lt;strong&gt;100 GB per day&lt;/strong&gt; , at a discounted effective rate. Usage beyond your commitment is billed at that same effective rate rather than at pay-as-you-go.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Retention of the &lt;strong&gt;first 90 days is included&lt;/strong&gt;. Beyond that you pay Log Analytics retention prices.&lt;/p&gt;

&lt;p&gt;One caveat about the numbers in this article: Microsoft keeps the actual per-GB rates on its pricing page and cost estimator rather than in the billing documentation, and they vary by region and commitment tier. What is documented — and what actually shapes your architecture — is the &lt;em&gt;structure&lt;/em&gt; below. Run your own volume through the &lt;a href="https://microsoft.com/en-us/security/pricing/microsoft-sentinel/cost-estimator" rel="noopener noreferrer"&gt;Sentinel cost estimator&lt;/a&gt; for the rate that applies to you.&lt;/p&gt;

&lt;p&gt;There is now also a &lt;strong&gt;data lake tier&lt;/strong&gt; , which meters four things separately: ingestion, data processing, storage and query. The storage figure is calculated on a fixed &lt;strong&gt;6:1 compression ratio&lt;/strong&gt; — retain 600 GB of raw data and you are billed for 100 GB. Queries, however, are charged per GB of &lt;strong&gt;uncompressed&lt;/strong&gt; data scanned. Those two facts sit next to each other in the docs and are easy to conflate when estimating.&lt;/p&gt;

&lt;p&gt;A genuinely useful set of sources is free: Azure Activity logs, Sentinel Health, Office 365 audit logs covering SharePoint, Exchange and Teams, and security alerts from the Defender family. The caveat is sharp — the &lt;strong&gt;alerts are free, the raw logs behind several of those products are not&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The trap in commitment tiers
&lt;/h3&gt;

&lt;p&gt;You can raise a commitment tier at any time. You can &lt;strong&gt;lower it only once every 31 days&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That asymmetry is worth planning around. Commit at a level your log volume does not sustain — because a noisy source got switched off, or a migration finished — and you are locked into paying for that capacity for the rest of the month.&lt;/p&gt;

&lt;h3&gt;
  
  
  One date to put in the calendar
&lt;/h3&gt;

&lt;p&gt;After &lt;strong&gt;31 March 2027&lt;/strong&gt; , Microsoft Sentinel will no longer be supported in the Azure portal and will be available only in the Microsoft Defender portal. If your runbooks, training material or automation reference Azure portal paths, that is a dated migration task, not an optional one.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F22o0bql6pmavk451v4du.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F22o0bql6pmavk451v4du.webp" alt="Three SIEM pricing meters compared: Microsoft Sentinel billing gigabytes ingested per day, Google SecOps selling packages capped by detection rule counts, and Wazuh billing agent counts or nothing at all when self-hosted" width="800" height="467"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Same job, three different meters. What each vendor counts is what your architecture will optimise against.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Google SecOps Counts Your Detection Rules
&lt;/h2&gt;

&lt;p&gt;Google publishes three packages and &lt;strong&gt;no prices at all&lt;/strong&gt;. Every tier says “contact sales for pricing.”&lt;/p&gt;

&lt;p&gt;What is public is the shape of the limits, and it is unusual: the ceilings are expressed in &lt;strong&gt;detection rules&lt;/strong&gt; , not gigabytes.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Standard&lt;/th&gt;
&lt;th&gt;Enterprise&lt;/th&gt;
&lt;th&gt;Enterprise Plus&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Single-event rules&lt;/td&gt;
&lt;td&gt;1,000&lt;/td&gt;
&lt;td&gt;2,000&lt;/td&gt;
&lt;td&gt;3,500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-event rules&lt;/td&gt;
&lt;td&gt;75&lt;/td&gt;
&lt;td&gt;125&lt;/td&gt;
&lt;td&gt;200&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Environments&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hot retention&lt;/td&gt;
&lt;td&gt;12 months&lt;/td&gt;
&lt;td&gt;12 months&lt;/td&gt;
&lt;td&gt;12 months&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UEBA&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini in SecOps&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Applied Threat Intelligence&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Mandiant, VirusTotal, Google&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All three include &lt;strong&gt;12 months of hot data retention&lt;/strong&gt; , 700+ parsers and 300+ SOAR integrations. Enterprise Plus adds advanced data pipeline management, 12 months of routing to another destination to support SIEM migrations, and free BigQuery storage for UDM exports.&lt;/p&gt;

&lt;p&gt;Two observations, one favourable and one not.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In Google’s favour:&lt;/strong&gt; twelve months of hot retention as standard is a different posture from 90 days included and pay-per-month afterwards. If your compliance regime or your incident timelines assume a year of searchable data, that is a meaningful structural difference rather than a discount.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Against:&lt;/strong&gt; you cannot model a budget without a sales call. For a platform team trying to compare three options in a spreadsheet, “contact sales” is itself a cost — it is weeks of procurement before you know whether the option was ever viable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wazuh Counts Your Agents, or Nothing
&lt;/h2&gt;

&lt;p&gt;Wazuh is the open-source entry, and its pricing splits cleanly in two.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Self-hosted&lt;/strong&gt; carries no licence fee. That is genuinely free in the sense that the software costs nothing, and genuinely not free in the sense that you now run an indexer cluster whose storage grows with every log source you onboard — plus upgrades, plus capacity planning, plus the engineer who understands it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wazuh Cloud&lt;/strong&gt; starts at &lt;strong&gt;$571 per month&lt;/strong&gt; for the Small tier: up to 100 active agents, one month of indexed data retention and three months of archive retention, with standard support. Larger tiers scale up from there. The platform is PCI DSS and SOC 2 certified, with a 14-day free trial.&lt;/p&gt;

&lt;p&gt;Look closely at that meter, because it is the important part: Wazuh Cloud counts &lt;strong&gt;active agents and retention windows&lt;/strong&gt; , not gigabytes ingested. A chatty endpoint costs the same as a quiet one.&lt;/p&gt;

&lt;p&gt;That inverts the incentive completely. Under Sentinel, a verbose audit policy on one server increases your bill. Under Wazuh Cloud, it does not.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Comparison That Matters
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fluimbofu5o924si92x7a.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fluimbofu5o924si92x7a.webp" alt="How each SIEM pricing model changes team behaviour: volume pricing pushes teams to filter logs, agent pricing pushes them to limit endpoint coverage, rule-count limits push them to consolidate detections, and self-hosting pushes cost into engineering time" width="800" height="480"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Every meter creates a behaviour. The question is whether that behaviour is one you can live with during an incident.&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Wazuh&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Microsoft Sentinel&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Google SecOps&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Meter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agents (cloud) or nothing (self-hosted)&lt;/td&gt;
&lt;td&gt;GB ingested per day&lt;/td&gt;
&lt;td&gt;Package tier + rule limits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Entry price&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0 self-hosted; $571/mo cloud&lt;/td&gt;
&lt;td&gt;Pay-as-you-go per GB&lt;/td&gt;
&lt;td&gt;Not published&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Commitment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Monthly tiers&lt;/td&gt;
&lt;td&gt;From 100 GB/day, lower once per 31 days&lt;/td&gt;
&lt;td&gt;Annual, via sales&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Included retention&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1 month indexed, 3 months archive (Small)&lt;/td&gt;
&lt;td&gt;90 days&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;12 months hot&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Detection limits&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None imposed&lt;/td&gt;
&lt;td&gt;None imposed&lt;/td&gt;
&lt;td&gt;1,000–3,500 rules by tier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;You operate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Everything (self-hosted)&lt;/td&gt;
&lt;td&gt;Nothing&lt;/td&gt;
&lt;td&gt;Nothing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Price transparency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Public&lt;/td&gt;
&lt;td&gt;Public&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Contact sales&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The Part Nobody Puts in the Comparison
&lt;/h2&gt;

&lt;p&gt;A volume meter creates a perverse incentive, and it is worth naming plainly: &lt;strong&gt;the better your logging, the higher your bill.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Enable verbose audit logging on a domain controller and the invoice moves. Onboard a noisy but occasionally crucial source — DNS query logs, say, or process creation events — and someone in finance asks why. The rational team response is to filter: drop the debug level, sample the high-volume source, postpone onboarding.&lt;/p&gt;

&lt;p&gt;Every one of those decisions is invisible until an incident. Then the missing telemetry turns out to be exactly the thing the investigation needed, and nobody remembers that it was a budget decision made eight months earlier.&lt;/p&gt;

&lt;p&gt;This is not an argument that per-GB pricing is illegitimate. It is an argument that the meter is an &lt;strong&gt;architectural constraint&lt;/strong&gt; , and should be treated like one:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Route genuinely high-value security telemetry into the expensive analytics tier where detections run.&lt;/li&gt;
&lt;li&gt;Keep high-volume, low-value data in a cheaper tier you can still search when you need it — Sentinel’s lake tier exists precisely for this, and Google’s Enterprise Plus package includes routing to another destination.&lt;/li&gt;
&lt;li&gt;Write down which sources you chose &lt;em&gt;not&lt;/em&gt; to ingest, and why. That document is what you will want during your first serious incident.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Choosing
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Choose Sentinel&lt;/strong&gt; if you are already a Microsoft security shop. The free data sources — Office 365 audit logs, Defender alerts, Azure Activity — are a real economic advantage that no competitor can match for that estate, and the Defender portal consolidation is where Microsoft is clearly heading.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose Google SecOps&lt;/strong&gt; if retention depth and detection quality matter more than budget predictability. Twelve months of hot data as standard is a genuinely different operating posture, and the Mandiant intelligence in Enterprise Plus is not something you can assemble yourself. Budget the procurement time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose Wazuh&lt;/strong&gt; if you have the engineering capacity and want the meter off. Self-hosted, no licence cost, no per-GB anxiety, complete control of retention. You are trading a software bill for an operational one — which is a good trade for some teams and a terrible one for teams without a platform function.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And check the meter against your own shape.&lt;/strong&gt; Few endpoints producing enormous logs? Volume pricing is your enemy. Tens of thousands of quiet endpoints? Agent pricing is. Complex correlation logic? Rule ceilings are the constraint nobody warned you about.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Short Checklist
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Measure your current daily log volume in GB and your endpoint count. You need both numbers, because different vendors bill each one.&lt;/li&gt;
&lt;li&gt;List your sources by value, not by volume. The expensive tier is for the valuable ones.&lt;/li&gt;
&lt;li&gt;Check which of your sources are free on the platform you are considering — for Microsoft estates on Sentinel this can be a large fraction.&lt;/li&gt;
&lt;li&gt;Model retention explicitly: 90 days included is a very different budget from 12 months included.&lt;/li&gt;
&lt;li&gt;If you are considering a commitment tier, model the month your volume &lt;em&gt;drops&lt;/em&gt;. You can only lower it once every 31 days.&lt;/li&gt;
&lt;li&gt;For Google, start the sales conversation early — you cannot evaluate what you cannot price.&lt;/li&gt;
&lt;li&gt;Write down the sources you decided not to ingest. Review that list after every incident.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Real Point
&lt;/h2&gt;

&lt;p&gt;Every SIEM vendor will tell you their platform detects more with less effort. They are competing on the same detections, the same integrations, increasingly the same AI assistants.&lt;/p&gt;

&lt;p&gt;Where they genuinely differ is in what they count — and what they count becomes what your team optimises against. A per-gigabyte meter produces an organisation that filters logs. An agent meter produces one that limits endpoint coverage. A rule ceiling produces one that consolidates detections into fewer, broader rules.&lt;/p&gt;

&lt;p&gt;Pick the constraint you can live with, then design around it deliberately, instead of discovering it in an invoice.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Related reading:&lt;/strong&gt; for what goes into a SIEM in the first place, see &lt;a href="https://www.alekseialeinikov.com/en/blog/topics/security/falco-production-runtime-security-without-alert-fatigue-2026" rel="noopener noreferrer"&gt;Falco for production runtime security&lt;/a&gt; and &lt;a href="https://www.alekseialeinikov.com/en/blog/topics/security/build-your-own-cspm-gcp-security-command-center-vs-open-source-2026" rel="noopener noreferrer"&gt;build your own CSPM&lt;/a&gt;. For the same economics applied to storage, see &lt;a href="https://www.alekseialeinikov.com/en/blog/topics/cloud/cloudflare-r2-vs-s3-egress-costs-2026" rel="noopener noreferrer"&gt;what egress actually costs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sources:&lt;/strong&gt; all figures come from vendor documentation checked in August 2026 — &lt;a href="https://learn.microsoft.com/en-us/azure/sentinel/billing" rel="noopener noreferrer"&gt;Microsoft Sentinel billing&lt;/a&gt; (updated June 2026), the &lt;a href="https://cloud.google.com/security/products/security-operations" rel="noopener noreferrer"&gt;Google Security Operations&lt;/a&gt; product page, and &lt;a href="https://wazuh.com/cloud/" rel="noopener noreferrer"&gt;Wazuh Cloud&lt;/a&gt;. Prices change; verify before committing a budget.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.alekseialeinikov.com/en/blog/topics/security/siem-pricing-wazuh-vs-sentinel-vs-google-secops-2026" rel="noopener noreferrer"&gt;alekseialeinikov.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>siem</category>
      <category>wazuh</category>
      <category>microsoftsentinel</category>
      <category>googlesecops</category>
    </item>
    <item>
      <title>Cloudflare R2 vs S3: Was Egress wirklich kostet (und wo R2 stattdessen abrechnet)</title>
      <dc:creator>Aleksei Aleinikov</dc:creator>
      <pubDate>Fri, 21 Aug 2026 12:00:00 +0000</pubDate>
      <link>https://dev.to/aleksei_aleinikov/cloudflare-r2-vs-s3-was-egress-wirklich-kostet-und-wo-r2-stattdessen-abrechnet-1p7l</link>
      <guid>https://dev.to/aleksei_aleinikov/cloudflare-r2-vs-s3-was-egress-wirklich-kostet-und-wo-r2-stattdessen-abrechnet-1p7l</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk7unpay5l282lt90dsnp.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk7unpay5l282lt90dsnp.webp" alt="Cloudflare R2 vs S3: Was Egress wirklich kostet (und wo R2 stattdessen abrechnet)" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Die Rechnung für Objektspeicher handelt selten vom Speichern.&lt;/p&gt;

&lt;p&gt;Sehen Sie sich eine große S3-Rechnung an: Die Gigabyte, die Sie aufbewahren, sind oft die kleinere Hälfte. Die größere Hälfte sind die Gigabyte, die Sie &lt;em&gt;versenden&lt;/em&gt; — und dieser Posten leistet etwas, das kein anderer leistet: Er macht das Weggehen teuer. Ein Datensatz, dessen Umzug Sie sich nicht leisten können, liegt nicht einfach irgendwo. Er wird dort festgehalten.&lt;/p&gt;

&lt;p&gt;Cloudflare R2 greift genau diesen Posten an, indem es nichts dafür berechnet. Das ist die Schlagzeile, sie stimmt — und sie ist nicht die ganze Geschichte. Hier ist, was beide Seiten tatsächlich abrechnen, mit Zahlen aus der Dokumentation der Anbieter, geprüft im August 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  Warum es Egress überhaupt gibt
&lt;/h2&gt;

&lt;p&gt;Bytes zu speichern ist günstig und wird weiter günstiger. Bytes über die Netzgrenze eines Anbieters zu bewegen ist der Punkt, an dem die Kostenkurve aufhört zu fallen — und an dem die Preismacht sitzt.&lt;/p&gt;

&lt;p&gt;Die Asymmetrie ist der verräterische Teil. Bei S3 ist &lt;strong&gt;eingehender Datenverkehr aus dem Internet kostenlos&lt;/strong&gt;. Ausgehender nicht. Kostenlos sind ebenfalls Daten zwischen Buckets derselben Region, Daten von S3 zu einem AWS-Dienst in derselben Region und Daten zu CloudFront. Ihre Daten hineinzubekommen kostet nichts; sie irgendwohin zu bekommen, das nicht AWS ist, kostet pro Gigabyte.&lt;/p&gt;

&lt;p&gt;Das ist keine Verschwörung — Bandbreite kostet wirklich Geld — aber die Form bedeutet, dass der Zähler am schnellsten läuft, wenn Sie Ihre Daten anderswo verwenden.&lt;/p&gt;

&lt;h2&gt;
  
  
  Die Schlagzeilenzahlen
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;S3&lt;/strong&gt; stellt die ersten &lt;strong&gt;100 GB pro Monat&lt;/strong&gt; ausgehenden Internetverkehrs kostenlos, aggregiert über alle AWS-Dienste und Regionen (außer China und GovCloud). Danach zahlen Sie pro Gigabyte, abhängig von Region und Volumen. AWS’ eigene Dokumentation nennt in einem Beispiel zu Multi-Region Access Points &lt;strong&gt;0,09 $ pro GB&lt;/strong&gt; für die Übertragung aus Europa (Irland) ins Internet.&lt;/p&gt;

&lt;p&gt;Regionsübergreifende Übertragung ist günstiger, aber weiterhin bepreist: AWS nennt &lt;strong&gt;0,01 $/GB&lt;/strong&gt; von N. Virginia nach Ohio und &lt;strong&gt;0,02 $/GB&lt;/strong&gt; von Oregon nach N. Virginia.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;R2&lt;/strong&gt; berechnet &lt;strong&gt;0 $ für Egress&lt;/strong&gt; auf jeder Speicherklasse. Cloudflares Fußnote zieht die Grenze präzise: Egress direkt aus R2 — über die Workers-API, die S3-kompatible API oder &lt;code&gt;r2.dev&lt;/code&gt;-Domains — löst keine Übertragungsgebühr aus. Hängen Sie andere kostenpflichtige Dienste an den Bucket, können diese abrechnen.&lt;/p&gt;

&lt;p&gt;Bei 5 TB monatlichem Egress aus Irland — bequem innerhalb der ersten Preisstufe — sind das rund &lt;strong&gt;450 $ auf einer einzigen Zeile&lt;/strong&gt; , bevor überhaupt jemand etwas gespeichert hat.&lt;/p&gt;

&lt;p&gt;Widerstehen Sie der Versuchung, das einfach hochzurechnen. AWS wendet &lt;strong&gt;Volumenstufen&lt;/strong&gt; an und hält fest, dass diese Stufen die aggregierte Nutzung des ausgehenden Datenverkehrs über alle AWS-Dienste hinweg berücksichtigen. Der überall zitierte Gigabyte-Preis gilt nur für die erste Stufe; spätere Gigabyte kosten weniger. Eine flache Multiplikation über 50 TB überschätzt die Rechnung — die Richtung stimmt, die Summe nicht.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F76srimni96ylwi4radd2.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F76srimni96ylwi4radd2.webp" alt="Anatomie einer S3- und einer R2-Rechnung im Vergleich: Speicher, Operationen und Egress, wobei Egress bei S3 bepreist und bei R2 kostenlos ist, während R2 das Gewicht auf Class-A- und Class-B-Operationen verlagert" width="800" height="480"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Dieselbe Last, zwei Zähler. R2 entfernt die Egress-Zeile und verlagert das Gewicht auf Operationen.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Was R2 stattdessen abrechnet
&lt;/h2&gt;

&lt;p&gt;R2 ist nicht kostenlos. Es verschiebt den Zähler von ausgehenden Bytes auf Operationen, und bei manchen Lasten läuft dieser Zähler schnell.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Standard&lt;/th&gt;
&lt;th&gt;Infrequent Access&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Speicher&lt;/td&gt;
&lt;td&gt;0,015 $ / GB-Monat&lt;/td&gt;
&lt;td&gt;0,01 $ / GB-Monat&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class-A-Operationen&lt;/td&gt;
&lt;td&gt;4,50 $ / Million&lt;/td&gt;
&lt;td&gt;9,00 $ / Million&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class-B-Operationen&lt;/td&gt;
&lt;td&gt;0,36 $ / Million&lt;/td&gt;
&lt;td&gt;0,90 $ / Million&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Datenabruf&lt;/td&gt;
&lt;td&gt;keiner&lt;/td&gt;
&lt;td&gt;0,01 $ / GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Egress&lt;/td&gt;
&lt;td&gt;kostenlos&lt;/td&gt;
&lt;td&gt;kostenlos&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Das Freikontingent umfasst 10 GB-Monat Speicher, 1 Million Class-A- und 10 Millionen Class-B-Operationen pro Monat — &lt;strong&gt;nur Standard&lt;/strong&gt; , nicht Infrequent Access.&lt;/p&gt;

&lt;p&gt;Die Aufteilung zählt mehr als die Tarife:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Class A&lt;/strong&gt; (teuer, verändernd): &lt;code&gt;PutObject&lt;/code&gt;, &lt;code&gt;CopyObject&lt;/code&gt;, &lt;code&gt;ListObjects&lt;/code&gt;, &lt;code&gt;ListBuckets&lt;/code&gt;, &lt;code&gt;PutBucket&lt;/code&gt;, die gesamte Multipart-Familie, Lifecycle-Übergänge und &lt;code&gt;PutBucket*&lt;/code&gt;-Konfigurationsaufrufe.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Class B&lt;/strong&gt; (günstig, lesend): &lt;code&gt;GetObject&lt;/code&gt;, &lt;code&gt;HeadObject&lt;/code&gt;, &lt;code&gt;HeadBucket&lt;/code&gt;, &lt;code&gt;UsageSummary&lt;/code&gt;, &lt;code&gt;GetBucket*&lt;/code&gt;-Aufrufe.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kostenlos&lt;/strong&gt; : &lt;code&gt;DeleteObject&lt;/code&gt;, &lt;code&gt;DeleteBucket&lt;/code&gt;, &lt;code&gt;AbortMultipartUpload&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Beachten Sie: &lt;strong&gt;Auflisten ist Class A.&lt;/strong&gt; Ein Job, der bei jedem Durchlauf einen Bucket auflistet, zahlt den teuren Tarif für etwas, das sich wie Lesen anfühlt.&lt;/p&gt;

&lt;p&gt;Cloudflares eigenes Asset-Hosting-Beispiel macht den Punkt besser als jedes Argument. 100.000 Dateien à durchschnittlich 100 KB, 10 Millionen Lesevorgänge pro Tag:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Nutzung&lt;/th&gt;
&lt;th&gt;Abgerechnet&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Speicher&lt;/td&gt;
&lt;td&gt;100.000 × 100 KB&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;0,00 $&lt;/strong&gt; (im Freikontingent)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class A&lt;/td&gt;
&lt;td&gt;100.000 Schreibvorgänge&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;0,00 $&lt;/strong&gt; (im Freikontingent)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class B&lt;/td&gt;
&lt;td&gt;300 Millionen Lesevorgänge&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;104,40 $&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gesamt&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;104,40 $&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Speicher: nichts. Egress: nichts. Die gesamte Rechnung besteht aus Leseoperationen. Wer zu R2 migriert und eine von Gigabyte dominierte Rechnung erwartet, wird von einer Rechnung überrascht, die von Anfragen dominiert wird.&lt;/p&gt;

&lt;h2&gt;
  
  
  Das Kleingedruckte, das die Summe bewegt
&lt;/h2&gt;

&lt;p&gt;Die Grundpreise sind der einfache Teil. Diese Klauseln verändern, was Sie tatsächlich zahlen — und sie schneiden in beide Richtungen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvwi3vy3s1sq19328oj54.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvwi3vy3s1sq19328oj54.webp" alt="Fünf Abrechnungsdetails, die Objektspeicher verteuern: binäre Gigabyte bei S3, LIST zum PUT-Tarif, Gebühren für Bytes nach einem Verbindungsabbruch, Aufrundung auf die nächste Abrechnungseinheit bei R2 sowie Mindestgröße und Mindestdauer" width="799" height="493"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Nichts davon steht im Grundpreis. Alles davon steht auf der Rechnung.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;S3 misst in binären Gigabyte.&lt;/strong&gt; AWS hält ausdrücklich fest, dass die S3-Speichernutzung in binären GB berechnet wird, wobei 1 GB 2³⁰ Bytes entspricht — ein Gibibyte. Wer sein Budget mit dezimalen Gigabyte kalkuliert hat, liegt um rund 7,4 % daneben, bevor irgendetwas anderes passiert.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Egress ist gestuft, und die Stufen gelten kontoweit.&lt;/strong&gt; Der genannte Gigabyte-Preis gilt nur für die erste Stufe. AWS merkt an, dass die Preisstufen die aggregierte Nutzung des ausgehenden Datenverkehrs über alle AWS-Dienste hinweg berücksichtigen — Ihre S3-Rechnung hängt also davon ab, was CloudFront, EC2 und alles andere in diesem Monat hinausgeschickt haben. Das schneidet in beide Richtungen: Schätzungen mit einem einzigen Satz fallen zu hoch aus, und die Zuordnung pro Dienst ist schwieriger, als sie aussieht.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LIST wird bei S3 zum PUT-Tarif abgerechnet.&lt;/strong&gt; Nicht zum GET-Tarif. AWS schreibt es direkt: “LIST requests for any storage class are charged at the same rate as S3 Standard PUT, COPY, and POST requests.” Sich durch einen großen Bucket zu blättern ist keine günstige Leseoperation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ein Verbindungsabbruch kann mehr kosten, als Sie erhalten haben.&lt;/strong&gt; Das ist zweimal Lesen wert. AWS dokumentiert: Fordern Sie ein 10-GB-Objekt an und brechen nach 2 GB ab, versucht S3 den Stream zu stoppen, schafft das aber nicht sofort — abgerechnet werden können 3 GB. Clients, die Downloads aggressiv abbrechen, zahlen für Bytes, die niemand konsumiert hat.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;R2 rundet auf die nächste Abrechnungseinheit auf.&lt;/strong&gt; Cloudflares Beispiele: Eine Million und eine Operation wird als &lt;strong&gt;zwei Millionen&lt;/strong&gt; abgerechnet; 1,1 GB-Monat als &lt;strong&gt;2 GB-Monat&lt;/strong&gt;. Bei kleinen Konten ist diese Rundung anteilig brutal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mindestwerte beißen auf beiden Seiten.&lt;/strong&gt; S3 Standard-IA und One Zone-IA haben eine mindestens abgerechnete Objektgröße von &lt;strong&gt;128 KB&lt;/strong&gt; und 30 Tage Mindestdauer; Glacier-Stufen liegen bei 90 oder 180 Tagen und ergänzen 40 KB Metadaten je archiviertem Objekt. R2s Infrequent Access trägt eine &lt;strong&gt;Mindestdauer von 30 Tagen&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unautorisierte Anfragen sind bei R2 kostenlos.&lt;/strong&gt; Cloudflare hält fest, dass keine Gebühren anfallen, wenn dem Aufrufer die Berechtigung fehlt (HTTP 401). Gut zu wissen, wenn Ihr Bucket öffentlich adressierbar ist und Rauschen anzieht.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wenn Infrequent Access mehr kostet als Standard
&lt;/h2&gt;

&lt;p&gt;Die deutlichste Falle in R2s Preisliste ist die eigene günstigere Stufe. Cloudflare veröffentlicht beide Beispiele nebeneinander.&lt;/p&gt;

&lt;p&gt;1.000 Objekte à 1 GB schreiben und jedes im Monat 1.000-mal lesen:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Standard&lt;/strong&gt; : 14,85 $ gesamt (990 abrechenbare GB-Monate nach Freikontingent; Operationen im Freikontingent)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infrequent Access&lt;/strong&gt; : &lt;strong&gt;29,90 $&lt;/strong&gt; gesamt&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;IA kostet das Doppelte. Die Mechanik: IA hat kein Freikontingent, die Class-A-Operationen kosten das Doppelte, die Class-B das 2,5-Fache, der Abruf kommt mit 0,01 $/GB hinzu, und die Mindestdauer von 30 Tagen bedeutet, dass fünf Tage Speicherung trotzdem 1.000 GB-Monate abrechnen statt 167.&lt;/p&gt;

&lt;p&gt;Daraus folgt die Regel: &lt;strong&gt;Infrequent Access ist eine Wette darauf, dass Sie die Daten nicht lesen.&lt;/strong&gt; Verlieren Sie die Wette, zahlen Sie mehr als mit Standard.&lt;/p&gt;

&lt;h2&gt;
  
  
  Was der EU Data Act verändert hat
&lt;/h2&gt;

&lt;p&gt;Die Verordnung (EU) 2023/2854 — der Data Act — trat am 11. Januar 2024 in Kraft und &lt;strong&gt;gilt seit dem 12. September 2025&lt;/strong&gt;. Zu ihren Maßnahmen gehören Regeln, die Kunden einen wirksamen Wechsel zwischen Anbietern von Datenverarbeitungsdiensten ermöglichen sollen, ausdrücklich mit dem Ziel, den EU-Cloud-Markt zu öffnen.&lt;/p&gt;

&lt;p&gt;Interessant ist, wie sich das in einer Preisliste niederschlägt. Auf der S3-Preisseite von AWS steht inzwischen:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;EU customers may request reduced data transfer rates for eligible use cases under the European Data Act. Please contact AWS Customer Support for more information.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Lesen Sie genau. Die Erleichterung existiert, und sie ist &lt;strong&gt;eine Anfrage, die Sie stellen müssen&lt;/strong&gt; , für &lt;strong&gt;geeignete&lt;/strong&gt; Anwendungsfälle, über den &lt;strong&gt;Support&lt;/strong&gt;. Es ist keine Tarifänderung, die Ihrem Konto zugewiesen wird, weil Sie in der EU sitzen.&lt;/p&gt;

&lt;p&gt;Das ist die praktische Form der Regulierung heute: Der Lock-in-Mechanismus ist verhandelbar geworden, nicht abwesend. Wer aus der EU heraus eine Migration weg von AWS plant, für den ist das Öffnen dieses Support-Tickets ein konkreter, datierbarer Schritt im Plan — keine Fußnote.&lt;/p&gt;

&lt;h2&gt;
  
  
  Also welches
&lt;/h2&gt;

&lt;p&gt;Die Entscheidung lautet nicht “was ist billiger”, sondern &lt;strong&gt;welcher Zähler zu Ihrem Verkehr passt&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;R2 gewinnt klar, wenn Bytes die Cloud verlassen.&lt;/strong&gt; Öffentliche Asset-Auslieferung, Medien, Downloads, Backups, die von Systemen außerhalb von AWS gezogen werden — alles, was in Menge ins offene Internet geht. Dafür wurde R2 gebaut, und die Zahlen sind nicht knapp.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;S3 bleibt sinnvoll, wenn Bytes nie hinausgehen.&lt;/strong&gt; Sind Ihre Konsumenten EC2, Lambda, Athena oder Glue in derselben Region, zahlen Sie bereits null Egress. Diese Last zu R2 zu migrieren, um an einer Zeile zu sparen, die Ihnen nicht berechnet wird, ist Bewegung ohne Fortschritt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zählen Sie Operationen, bevor Sie sich festlegen.&lt;/strong&gt; Eine Last mit vielen kleinen Objekten und hoher Anfragerate kann bei R2 mehr kosten, als sie an Egress spart. Cloudflares eigenes 104,40-$-Beispiel besteht vollständig aus Operationen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prüfen Sie, was Sie verlieren.&lt;/strong&gt; R2 spricht die S3-API, aber “S3-kompatibel” ist nicht “S3-identisch”. Verifizieren Sie vor einer Migration die konkreten Funktionen, von denen Ihr Stack abhängt, statt Gleichwertigkeit anzunehmen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Migrationswerkzeuge sind kostenlos, größtenteils.&lt;/strong&gt; Cloudflares Super Slurper (Massenkopie) und Sippy (inkrementell, Migration beim Lesen) kosten nichts — Sie zahlen nur die Class-A-Operationen, die sie gegen Ihren R2-Bucket erzeugen. Ihr &lt;em&gt;Quell&lt;/em&gt;-Bucket kann Ihnen die Lesevorgänge und den Egress auf dem Weg hinaus trotzdem berechnen, was die letzte Ironie der ganzen Anordnung ist: Das Weggehen kostet Egress.&lt;/p&gt;

&lt;h2&gt;
  
  
  Eine Checkliste vor dem Umzug
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Ziehen Sie den tatsächlichen Egress des letzten Monats in GB aus dem Cost Explorer — keine Schätzung.&lt;/li&gt;
&lt;li&gt;Zählen Sie Ihre Anfragen, getrennt nach Schreiben/Auflisten (Class A) und Lesen (Class B). Multiplizieren Sie mit R2s Tarifen.&lt;/li&gt;
&lt;li&gt;Prüfen Sie, wie viel Ihres Verkehrs AWS-intern in derselben Region bleibt. Dieser Teil ist bereits kostenlos und gewinnt nichts.&lt;/li&gt;
&lt;li&gt;Messen Sie den Speicher in binären und dezimalen Gigabyte neu, damit Sie Gleiches mit Gleichem vergleichen.&lt;/li&gt;
&lt;li&gt;Nutzt ein Bucket IA oder Glacier, prüfen Sie Mindestdauer und Mindestobjektgröße, bevor Sie irgendetwas umlagern.&lt;/li&gt;
&lt;li&gt;Sitzen Sie in der EU, eröffnen Sie das AWS-Support-Ticket zu den Data-Act-Übertragungstarifen — holen Sie sich die Zahl schriftlich, bevor Sie die Migration durchrechnen.&lt;/li&gt;
&lt;li&gt;Budgetieren Sie die einmaligen Kosten der Migration selbst: Lesevorgänge plus Egress auf der Quellseite.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Der eigentliche Punkt
&lt;/h2&gt;

&lt;p&gt;Egress-Preise sind keine Bandbreitengebühr. Sie sind der Mechanismus, der gespeicherte Daten in gehaltene Kunden verwandelt — weshalb ein Wettbewerber, der genau diese Zeile angreift, immer Aufmerksamkeit bekommen würde, und weshalb irgendwann auch eine Regulierungsbehörde hinsah.&lt;/p&gt;

&lt;p&gt;Aber “kostenloser Egress” ist eine Aussage über eine Zeile einer Rechnung, nicht über die Rechnung. Cloudflare berechnet Operationen, rundet auf und bestraft die falsche Speicherklasse genauso konsequent wie AWS. Der Anbieter hat gewechselt; die Notwendigkeit, das Kleingedruckte zu lesen, nicht.&lt;/p&gt;

&lt;p&gt;Rechnen Sie Ihre eigene Last gegen beide Zähler. Für ein Medien-CDN lautet die Antwort anders als für eine Analytics-Pipeline, die us-east-1 nie verlässt — und wer etwas anderes behauptet, zitiert einen Grundpreis.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Weiterlesen:&lt;/strong&gt; Wie Daten überhaupt beweglich bleiben, steht in &lt;a href="https://www.alekseialeinikov.com/de/blog/topics/cloud/backups-sind-kein-disaster-recovery-2026" rel="noopener noreferrer"&gt;Backups sind kein Disaster Recovery&lt;/a&gt; und &lt;a href="https://www.alekseialeinikov.com/de/blog/topics/architecture/sovereign-by-design-eine-souveraene-plattform-auf-kubernetes-bauen-2026" rel="noopener noreferrer"&gt;Sovereign by Design&lt;/a&gt;. Zur Analytics-Seite der Speicherökonomie siehe &lt;a href="https://www.alekseialeinikov.com/de/blog/topics/data/bigquery-vs-snowflake-2026-ehrlicher-vergleich" rel="noopener noreferrer"&gt;BigQuery vs Snowflake&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quellen:&lt;/strong&gt; Alle Zahlen stammen aus der Anbieterdokumentation, geprüft im August 2026 — &lt;a href="https://developers.cloudflare.com/r2/pricing/" rel="noopener noreferrer"&gt;Cloudflare R2 Pricing&lt;/a&gt; (Stand 7. August 2026), &lt;a href="https://aws.amazon.com/s3/pricing/" rel="noopener noreferrer"&gt;Amazon S3 Pricing&lt;/a&gt; und die &lt;a href="https://digital-strategy.ec.europa.eu/en/policies/data-act" rel="noopener noreferrer"&gt;Data-Act-Seite&lt;/a&gt; der Europäischen Kommission. Tarife ändern sich; prüfen Sie vor jeder Budgetzusage die Kalkulatoren der Anbieter.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ursprünglich veröffentlicht auf &lt;a href="https://www.alekseialeinikov.com/de/blog/topics/cloud/cloudflare-r2-vs-s3-egress-kosten-2026" rel="noopener noreferrer"&gt;alekseialeinikov.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cloudflarer2</category>
      <category>r2preise</category>
      <category>s3preise</category>
      <category>egressgebuehren</category>
    </item>
    <item>
      <title>Cloudflare R2 vs S3: What Egress Actually Costs You (and Where R2 Bills Instead)</title>
      <dc:creator>Aleksei Aleinikov</dc:creator>
      <pubDate>Fri, 21 Aug 2026 12:00:00 +0000</pubDate>
      <link>https://dev.to/aleksei_aleinikov/cloudflare-r2-vs-s3-what-egress-actually-costs-you-and-where-r2-bills-instead-37eb</link>
      <guid>https://dev.to/aleksei_aleinikov/cloudflare-r2-vs-s3-what-egress-actually-costs-you-and-where-r2-bills-instead-37eb</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk7unpay5l282lt90dsnp.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk7unpay5l282lt90dsnp.webp" alt="Cloudflare R2 vs S3: What Egress Actually Costs You (and Where R2 Bills Instead)" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The bill for object storage is rarely about storage.&lt;/p&gt;

&lt;p&gt;Look at a large S3 invoice and the gigabytes you keep are often the smaller half. The larger half is the gigabytes you &lt;em&gt;send&lt;/em&gt; — and that line item does something no other line item does: it makes leaving expensive. A dataset you can’t afford to move isn’t just stored somewhere. It’s held there.&lt;/p&gt;

&lt;p&gt;Cloudflare R2 attacks that specific line by charging nothing for it. That’s the headline, it’s true, and it’s not the whole story. Here is what each side actually bills, with the numbers from both vendors’ own documentation, checked in August 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Egress Exists at All
&lt;/h2&gt;

&lt;p&gt;Storing bytes is cheap and getting cheaper. Moving bytes across a provider’s network edge is where the cost curve stops falling and where the pricing power sits.&lt;/p&gt;

&lt;p&gt;The asymmetry is the tell. On S3, &lt;strong&gt;data in from the internet is free&lt;/strong&gt;. Data out is not. So is data between buckets in the same region, data from S3 to any AWS service in the same region, and data out to CloudFront. Getting your data in costs nothing; getting it out to anywhere that isn’t AWS costs per gigabyte.&lt;/p&gt;

&lt;p&gt;That’s not a conspiracy — bandwidth genuinely costs money — but the shape of it means the meter runs hardest precisely when you use your data somewhere else.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Headline Numbers
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;S3&lt;/strong&gt; gives you the first &lt;strong&gt;100 GB per month&lt;/strong&gt; of data transfer out to the internet free, aggregated across all AWS services and regions (excluding China and GovCloud). After that, you pay per gigabyte at a rate that varies by region and volume. AWS’s own documentation, in a Multi-Region Access Point example, quotes &lt;strong&gt;$0.09 per GB&lt;/strong&gt; for transfer out from Europe (Ireland) to the internet.&lt;/p&gt;

&lt;p&gt;Cross-region transfer is cheaper but still metered: AWS quotes &lt;strong&gt;$0.01/GB&lt;/strong&gt; from N. Virginia to Ohio and &lt;strong&gt;$0.02/GB&lt;/strong&gt; from Oregon to N. Virginia.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;R2&lt;/strong&gt; charges &lt;strong&gt;$0 for egress&lt;/strong&gt; on every storage class. Cloudflare’s footnote defines the boundary precisely: egressing directly from R2 — through the Workers API, the S3-compatible API, or &lt;code&gt;r2.dev&lt;/code&gt; domains — incurs no data transfer charge. If you attach other metered services to the bucket, those services may bill you.&lt;/p&gt;

&lt;p&gt;At 5 TB of monthly egress from Ireland — comfortably inside the first pricing tier — that is roughly &lt;strong&gt;$450 on one line&lt;/strong&gt; , before anyone has stored anything.&lt;/p&gt;

&lt;p&gt;Resist the urge to scale that up by multiplication. AWS applies &lt;strong&gt;volume tiers&lt;/strong&gt; , and states that rate tiers take into account your aggregate data transfer out across all AWS services. The per-gigabyte figure everyone quotes is the first tier; later gigabytes cost less. A flat multiplication across 50 TB overstates the bill — the direction is right, the total is not.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F76srimni96ylwi4radd2.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F76srimni96ylwi4radd2.webp" alt="Side-by-side anatomy of an S3 bill and an R2 bill showing storage, operations and egress components, with egress metered on S3 and free on R2 while R2 shifts the weight onto Class A and Class B operations" width="800" height="480"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The same workload, two meters. R2 removes the egress line and puts more weight on operations.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What R2 Bills Instead
&lt;/h2&gt;

&lt;p&gt;R2 is not free. It moves the meter from bytes-out to operations, and for some workloads that meter runs fast.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Standard storage:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Standard&lt;/th&gt;
&lt;th&gt;Infrequent Access&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Storage&lt;/td&gt;
&lt;td&gt;$0.015 / GB-month&lt;/td&gt;
&lt;td&gt;$0.01 / GB-month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class A operations&lt;/td&gt;
&lt;td&gt;$4.50 / million&lt;/td&gt;
&lt;td&gt;$9.00 / million&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class B operations&lt;/td&gt;
&lt;td&gt;$0.36 / million&lt;/td&gt;
&lt;td&gt;$0.90 / million&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data retrieval&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;$0.01 / GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Egress&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The free tier covers 10 GB-month of storage, 1 million Class A and 10 million Class B operations per month — &lt;strong&gt;Standard only&lt;/strong&gt; , not Infrequent Access.&lt;/p&gt;

&lt;p&gt;The split matters more than the rates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Class A&lt;/strong&gt; (expensive, mutating): &lt;code&gt;PutObject&lt;/code&gt;, &lt;code&gt;CopyObject&lt;/code&gt;, &lt;code&gt;ListObjects&lt;/code&gt;, &lt;code&gt;ListBuckets&lt;/code&gt;, &lt;code&gt;PutBucket&lt;/code&gt;, the whole multipart family, lifecycle transitions, and &lt;code&gt;PutBucket*&lt;/code&gt; configuration calls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Class B&lt;/strong&gt; (cheap, reading): &lt;code&gt;GetObject&lt;/code&gt;, &lt;code&gt;HeadObject&lt;/code&gt;, &lt;code&gt;HeadBucket&lt;/code&gt;, &lt;code&gt;UsageSummary&lt;/code&gt;, &lt;code&gt;GetBucket*&lt;/code&gt; calls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free&lt;/strong&gt; : &lt;code&gt;DeleteObject&lt;/code&gt;, &lt;code&gt;DeleteBucket&lt;/code&gt;, &lt;code&gt;AbortMultipartUpload&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note that &lt;strong&gt;listing is Class A&lt;/strong&gt;. A job that lists a bucket on every iteration is paying the expensive rate for what feels like a read.&lt;/p&gt;

&lt;p&gt;Cloudflare’s own asset-hosting example makes the point better than any argument. Host 100,000 files averaging 100 KB, serve 10 million reads per day:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Usage&lt;/th&gt;
&lt;th&gt;Billed&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Storage&lt;/td&gt;
&lt;td&gt;100,000 × 100 KB&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;$0.00&lt;/strong&gt; (under free tier)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class A&lt;/td&gt;
&lt;td&gt;100,000 writes&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;$0.00&lt;/strong&gt; (under free tier)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class B&lt;/td&gt;
&lt;td&gt;300 million reads&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$104.40&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$104.40&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Storage: nothing. Egress: nothing. The entire bill is read operations. If you migrate to R2 expecting a bill dominated by gigabytes, you will be surprised by a bill dominated by requests.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Fine Print That Moves the Total
&lt;/h2&gt;

&lt;p&gt;Headline rates are the easy part. These are the clauses that change what you actually pay, and they cut both ways.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvwi3vy3s1sq19328oj54.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvwi3vy3s1sq19328oj54.webp" alt="Five billing details that inflate object storage costs: binary gigabytes on S3, LIST billed at PUT rate, charges for bytes sent after a dropped connection, R2 rounding usage up to the next billing unit, and minimum object size and duration rules" width="799" height="493"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;None of these appear in a headline rate. All of them appear on the invoice.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;S3 measures in binary gigabytes.&lt;/strong&gt; AWS states plainly that S3 storage usage is calculated in binary GB, where 1 GB is 2³⁰ bytes — a gibibyte. If you sized your budget with decimal gigabytes, you are off by about 7.4% before anything else happens.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Egress is tiered, and the tiers are account-wide.&lt;/strong&gt; The headline per-gigabyte rate applies to the first tier only. AWS notes that rate tiers take into account your aggregate usage for data transfer out across all AWS services — so your S3 bill depends on what CloudFront, EC2 and everything else sent out that month. This cuts both ways: it makes single-rate estimates too high, and it makes per-service attribution harder than it looks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LIST is billed at the PUT rate on S3.&lt;/strong&gt; Not the GET rate. AWS says so directly: “LIST requests for any storage class are charged at the same rate as S3 Standard PUT, COPY, and POST requests.” Paginating through a large bucket is not a cheap read operation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A dropped connection can cost more than you received.&lt;/strong&gt; This one is worth reading twice. AWS documents that if you request a 10 GB object and terminate after receiving 2 GB, S3 attempts to stop streaming but does not do so instantly — you may be billed for 3 GB. Clients that abort downloads aggressively pay for bytes nobody consumed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;R2 rounds up to the next billing unit.&lt;/strong&gt; Cloudflare’s examples: one million and one operations bills as &lt;strong&gt;two million&lt;/strong&gt; operations; 1.1 GB-month bills as &lt;strong&gt;2 GB-month&lt;/strong&gt;. On small accounts this rounding is proportionally brutal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Minimums bite on both sides.&lt;/strong&gt; S3 Standard-IA and One Zone-IA have a minimum billable object size of &lt;strong&gt;128 KB&lt;/strong&gt; and a 30-day minimum duration; Glacier tiers run 90 or 180 days and add 40 KB of metadata per archived object. R2’s Infrequent Access carries a &lt;strong&gt;30-day minimum duration&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unauthorized requests are free on R2.&lt;/strong&gt; Cloudflare states you are not charged for operations where the caller lacks permission (HTTP 401). Worth knowing if your bucket is publicly addressable and attracting noise.&lt;/p&gt;

&lt;h2&gt;
  
  
  When Infrequent Access Costs More Than Standard
&lt;/h2&gt;

&lt;p&gt;The clearest trap in R2’s pricing is its own cheaper tier. Cloudflare publishes both examples side by side.&lt;/p&gt;

&lt;p&gt;Write 1,000 objects of 1 GB, read each 1,000 times over the month:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Standard&lt;/strong&gt; : $14.85 total (990 billable GB-months after free tier; operations covered by free tier)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infrequent Access&lt;/strong&gt; : &lt;strong&gt;$29.90&lt;/strong&gt; total&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;IA is twice the price. The mechanics: IA has no free tier, its Class A operations cost double, its Class B cost 2.5×, retrieval adds $0.01/GB, and the 30-day minimum means storing objects for five days still bills 1,000 GB-months rather than 167.&lt;/p&gt;

&lt;p&gt;The rule that falls out: &lt;strong&gt;Infrequent Access is a bet that you will not read the data.&lt;/strong&gt; Break that bet and you pay more than you would have on Standard.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the EU Data Act Changed
&lt;/h2&gt;

&lt;p&gt;Regulation (EU) 2023/2854 — the Data Act — entered into force on 11 January 2024 and &lt;strong&gt;has applied since 12 September 2025&lt;/strong&gt;. Among its measures are rules letting customers switch effectively between providers of data-processing services, aimed explicitly at unlocking the EU cloud market.&lt;/p&gt;

&lt;p&gt;The interesting part is how that shows up in a price list. AWS’s S3 pricing page now carries this line:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;EU customers may request reduced data transfer rates for eligible use cases under the European Data Act. Please contact AWS Customer Support for more information.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Read it carefully. The relief exists, and it is &lt;strong&gt;a request you have to make&lt;/strong&gt; , for &lt;strong&gt;eligible&lt;/strong&gt; use cases, through &lt;strong&gt;support&lt;/strong&gt;. It is not a rate change applied to your account because you are in the EU.&lt;/p&gt;

&lt;p&gt;That is the practical shape of the regulation today: the lock-in mechanism is now negotiable rather than absent. If you are planning a migration out of AWS from the EU, opening that support case is a concrete, dated step in your plan — not a footnote.&lt;/p&gt;

&lt;h2&gt;
  
  
  So Which One
&lt;/h2&gt;

&lt;p&gt;The decision is not “which is cheaper.” It is &lt;strong&gt;which meter matches your traffic&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;R2 wins decisively when bytes leave the cloud.&lt;/strong&gt; Public asset delivery, media, downloads, backups pulled by systems outside AWS, anything served to the open internet at volume. This is the case R2 was built for and the numbers aren’t close.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;S3 stays sensible when bytes never leave.&lt;/strong&gt; If your consumers are EC2, Lambda, Athena or Glue in the same region, you are already paying zero egress. Migrating that workload to R2 to save on a line you aren’t being charged for is motion without progress.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Count operations before you commit.&lt;/strong&gt; A workload with many small objects and high request rates can cost more on R2 than the egress it saves. Cloudflare’s own $104.40 example is entirely operations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check what you lose.&lt;/strong&gt; R2 speaks the S3 API, but “S3-compatible” is not “S3-identical.” Before migrating, verify the specific features your stack depends on rather than assuming parity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Migration tooling is free, mostly.&lt;/strong&gt; Cloudflare’s Super Slurper (bulk copy) and Sippy (incremental, migrate-on-read) cost nothing to use — you pay only the Class A operations they generate against your R2 bucket. Your &lt;em&gt;source&lt;/em&gt; bucket may still bill you for the reads and the egress on the way out, which is the last irony of the whole arrangement: leaving costs egress.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Checklist Before You Move
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Pull last month’s actual egress in GB from Cost Explorer — not an estimate.&lt;/li&gt;
&lt;li&gt;Count your requests, split into writes/lists (Class A) and reads (Class B). Multiply by R2’s rates.&lt;/li&gt;
&lt;li&gt;Check how much of your traffic is same-region AWS-to-AWS. That part is already free and gains nothing.&lt;/li&gt;
&lt;li&gt;Re-measure storage in binary vs decimal gigabytes so you compare like with like.&lt;/li&gt;
&lt;li&gt;If any bucket uses IA or Glacier, check minimum-duration and minimum-object-size penalties before transitioning anything.&lt;/li&gt;
&lt;li&gt;If you are in the EU, open the AWS support case about Data Act transfer rates — get the number in writing before you model the migration.&lt;/li&gt;
&lt;li&gt;Budget the one-time cost of the migration itself: reads plus egress on the source side.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Real Point
&lt;/h2&gt;

&lt;p&gt;Egress pricing is not really a bandwidth charge. It is the mechanism that converts stored data into retained customers, which is why a competitor attacking exactly that line was always going to get attention — and why a regulator eventually did too.&lt;/p&gt;

&lt;p&gt;But “free egress” is a claim about one line on an invoice, not about the invoice. Cloudflare bills you for operations, rounds usage up, and penalises the wrong storage class just as firmly as AWS does. The provider changed; the need to read the fine print did not.&lt;/p&gt;

&lt;p&gt;Price your own workload against both meters. The answer is different for a media CDN and for an analytics pipeline that never leaves us-east-1, and anyone who tells you otherwise is quoting a headline rate.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Related reading:&lt;/strong&gt; on keeping data movable in the first place, see &lt;a href="https://www.alekseialeinikov.com/en/blog/topics/cloud/backups-are-not-disaster-recovery-2026" rel="noopener noreferrer"&gt;backups are not disaster recovery&lt;/a&gt; and &lt;a href="https://www.alekseialeinikov.com/en/blog/topics/architecture/sovereign-by-design-building-a-sovereign-platform-on-kubernetes-2026" rel="noopener noreferrer"&gt;sovereign by design&lt;/a&gt;. For the analytics side of storage economics, see &lt;a href="https://www.alekseialeinikov.com/en/blog/topics/data/bigquery-vs-snowflake-2026-honest-comparison" rel="noopener noreferrer"&gt;BigQuery vs Snowflake&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sources:&lt;/strong&gt; all figures come from vendor documentation checked in August 2026 — &lt;a href="https://developers.cloudflare.com/r2/pricing/" rel="noopener noreferrer"&gt;Cloudflare R2 pricing&lt;/a&gt; (updated 7 August 2026), &lt;a href="https://aws.amazon.com/s3/pricing/" rel="noopener noreferrer"&gt;Amazon S3 pricing&lt;/a&gt;, and the European Commission’s &lt;a href="https://digital-strategy.ec.europa.eu/en/policies/data-act" rel="noopener noreferrer"&gt;Data Act&lt;/a&gt; page. Rates change; verify against the vendor calculators before committing a budget.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.alekseialeinikov.com/en/blog/topics/cloud/cloudflare-r2-vs-s3-egress-costs-2026" rel="noopener noreferrer"&gt;alekseialeinikov.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cloudflarer2</category>
      <category>r2pricing</category>
      <category>s3pricing</category>
      <category>egressfees</category>
    </item>
    <item>
      <title>k3s vs k0s vs MicroK8s vs RKE2: Welches Kubernetes, wenn das volle nicht nötig ist</title>
      <dc:creator>Aleksei Aleinikov</dc:creator>
      <pubDate>Thu, 20 Aug 2026 12:00:00 +0000</pubDate>
      <link>https://dev.to/aleksei_aleinikov/k3s-vs-k0s-vs-microk8s-vs-rke2-welches-kubernetes-wenn-das-volle-nicht-notig-ist-17cg</link>
      <guid>https://dev.to/aleksei_aleinikov/k3s-vs-k0s-vs-microk8s-vs-rke2-welches-kubernetes-wenn-das-volle-nicht-notig-ist-17cg</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa9fcewir3eq7uxfy5s8y.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa9fcewir3eq7uxfy5s8y.webp" alt="k3s vs k0s vs MicroK8s vs RKE2: Welches Kubernetes, wenn das volle nicht nötig ist" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Jeder Vergleich leichtgewichtiger Kubernetes-Distributionen beginnt mit einer Tabelle von Speicherbedarfen — und jeder verfehlt damit den Kern.&lt;/p&gt;

&lt;p&gt;Die interessante Frage ist nicht, welche Distribution die kleinste ist. Sie lautet: &lt;strong&gt;Was hat jede weggelassen, und können Sie darauf verzichten?&lt;/strong&gt; Eine Kubernetes-Control-Plane hat eine feste Menge an Aufgaben; der Unterschied zwischen diesen vier Projekten liegt darin, welche dieser Aufgaben sie Ihnen überlassen, welche sie verstecken und zu welchen sie sich bewusst nicht äußern.&lt;/p&gt;

&lt;p&gt;Hier ist, was sie 2026 tatsächlich trennt — inklusive einer Änderung aus diesem Jahr, die die Standardwerte einer Distribution still umgeschrieben hat.&lt;/p&gt;

&lt;h2&gt;
  
  
  Zuerst: “Leichtgewichtig” bedeutet dreierlei
&lt;/h2&gt;

&lt;p&gt;Bevor man irgendetwas vergleicht, lohnt es sich, drei Behauptungen zu trennen, die ständig vermischt werden:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ein kleines Installationsartefakt.&lt;/strong&gt; k3s wird als einzelne Binärdatei unter 100 MB ausgeliefert. k0s ist eine selbstentpackende, statisch kompilierte Binärdatei mit eingebetteten Kubernetes-Komponenten.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Eine niedrige Speicheruntergrenze.&lt;/strong&gt; Wie wenig RAM die Control Plane braucht, bevor irgendein Workload darauf liegt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wenige mitgelieferte Komponenten.&lt;/strong&gt; Wie viel Cluster Sie bekommen, bevor Sie selbst etwas installieren.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Diese Ziele ziehen in verschiedene Richtungen. Eine Distribution, die Ingress-Controller, Load Balancer und Storage-Provisioner mitbringt, liefert schneller ein funktionierendes Cluster — und verbraucht dabei mehr Speicher. Wenn ein Projekt einen kleineren Fußabdruck als ein anderes behauptet, prüfen Sie, ob dasselbe Cluster gemessen wurde.&lt;/p&gt;

&lt;h2&gt;
  
  
  k3s — Batteries included, für den Edge optimiert
&lt;/h2&gt;

&lt;p&gt;k3s ist das, was die meisten meinen, wenn sie “leichtgewichtiges Kubernetes” sagen. Der Name ist ein Größenwitz: Kubernetes ist ein Zehn-Buchstaben-Wort, stilisiert als K8s, also ist etwas halb so Großes ein Fünf-Buchstaben-Wort, stilisiert als K3s. Es gibt keine Langform und keine offizielle Aussprache.&lt;/p&gt;

&lt;p&gt;Bemerkenswert ist, wie viel in dieser einen Binärdatei ankommt:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;containerd&lt;/strong&gt; als Container-Runtime&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flannel&lt;/strong&gt; als CNI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CoreDNS&lt;/strong&gt; als Cluster-DNS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Traefik&lt;/strong&gt; als Ingress-Controller&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ServiceLB&lt;/strong&gt; als Load-Balancer-Controller&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kube-router&lt;/strong&gt; für Network Policies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;local-path-provisioner&lt;/strong&gt; für persistente Volumes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spegel&lt;/strong&gt; , ein eingebetteter verteilter Container-Image-Registry-Spiegel&lt;/li&gt;
&lt;li&gt;Host-Werkzeuge wie iptables und socat&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Der vorletzte Punkt wiegt schwerer, als er aussieht. Spegel lässt Knoten Images voneinander ziehen, statt eine Registry zu kontaktieren — das ist der Unterschied zwischen einem funktionierenden Edge-Standort und einem hängenden Rollout, wenn die Anbindung dünn ist.&lt;/p&gt;

&lt;p&gt;Der Datastore ist die zweite Schlagzeile. k3s nutzt standardmäßig &lt;strong&gt;SQLite&lt;/strong&gt; statt etcd; etcd, MySQL und PostgreSQL stehen als Alternativen bereit. Für Hochverfügbarkeit betreiben Sie drei oder mehr Server mit eingebettetem etcd oder richten k3s auf eine externe Datenbank.&lt;/p&gt;

&lt;p&gt;Die Mindestanforderungen liegen bei 2 Kernen und 2 GB für einen Server, 1 Kern und 512 MB für einen Agent. Der veröffentlichte Sizing-Leitfaden ist nützlicher als die Minima: Ein Server mit 2 vCPU / 4 GB trägt bis zu 350 Agents, 4 vCPU / 8 GB bis zu 900, und ein Drei-Server-HA-Setup skaliert rund 50 % weiter — drei Server mit 4 vCPU / 8 GB erreichen etwa 1.200 Agents.&lt;/p&gt;

&lt;p&gt;Ein Hinweis aus der Dokumentation, der Homelab-Bauer erwischt: etcd ist schreibintensiv, und SD-Karten sowie eMMC halten die IO-Last nicht aus. Wer k3s mit eingebettetem etcd auf einem Raspberry Pi betreibt, sollte eine externe SSD verwenden.&lt;/p&gt;

&lt;h2&gt;
  
  
  k0s — Minimal aus Prinzip, und die einzige mit isolierter Control Plane
&lt;/h2&gt;

&lt;p&gt;k0s bezieht die Gegenposition und sagt das offen. Der dokumentierte Anspruch lautet, so wenige Add-ons wie möglich mitzuliefern, weil Dinge wie Ingress, Service Meshes und Storage “VERY opinionated” seien und das Nachziehen vieler gebündelter Add-ons bei Upstream-Releases sehr wartungsintensiv ist.&lt;/p&gt;

&lt;p&gt;Sie bekommen also den Kern — Konnectivity, CoreDNS, Metrics Server, containerd mit runc, Kube-router als Standard-CNI mit Calico als vorkonfigurierter Alternative — und keinen Ingress-Controller.&lt;/p&gt;

&lt;p&gt;Die architektonische Entscheidung, die k0s wirklich abhebt, ist diese: &lt;strong&gt;Auf den Controllern laufen standardmäßig weder Container-Engine noch Kubelet.&lt;/strong&gt; Die Control-Plane-Komponenten laufen als gewöhnliche Prozesse, überwacht von der k0s-Binärdatei selbst. Die praktische Folge: Ein Cluster-Nutzer &lt;em&gt;kann auf Controller-Knoten keine Workloads planen&lt;/em&gt; — Control-Plane-Isolation ist der Standard, nicht etwas, das man mit Taints konfiguriert.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr9pz21brqs6enrcrm9kg.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr9pz21brqs6enrcrm9kg.webp" alt="Anatomie von k3s, k0s, MicroK8s und RKE2 im direkten Vergleich: Paketierung, Standard-Datastore, Ausführung der Control-Plane-Komponenten, Standard-CNI und mitgelieferte Bestandteile" width="799" height="493"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Dieselbe Control Plane, vier verschiedene Verpackungen. Unterschiedlich ist, wo die Komponenten laufen und wie viel mitkommt.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Auch die Paketierung ist stärker, als sie zunächst wirkt. Die Binärdatei ist statisch kompiliert und hat außer dem Kernel keine Abhängigkeiten auf Betriebssystemebene: keine RPMs, keine Snaps, keine distributionsspezifische Paketierung. Die in der Doku genannte Motivation ist ein reales Betriebsproblem — wenn Kubernetes auf einem Host-OS läuft, das unabhängig aktualisiert wird, gehört niemandem die Lücke dazwischen. k0s schließt sie, indem es nicht vom Host abhängt.&lt;/p&gt;

&lt;p&gt;Die Anforderungen liegen bei 1 vCPU und 1 GB für einen Controller, 0,5 vCPU und 1 GB für einen Worker. Die gemessenen Zahlen sind ehrlicher als Minima: Ein Controller mit einem Worker und ohne Pods liegt bei etwa 510 MB, mit 20 Workern und 2.000 Pods bei rund 1 GB, mit 200 Workern und 20.000 Pods bei etwa 3,3 GB.&lt;/p&gt;

&lt;p&gt;Die Architekturen umfassen x86-64, ARM64 und ARMv7 sowie RISC-V — mit dem in der Doku genannten Vorbehalt, dass es für RISC-V keine vorkompilierten Binärdateien und keine CI-Abdeckung gibt. Windows-Unterstützung ist experimentell.&lt;/p&gt;
&lt;h3&gt;
  
  
  Das gemeinsame Geheimnis: beide laufen auf kine
&lt;/h3&gt;

&lt;p&gt;Ein Detail erklärt, warum sich k3s und k0s unter der Haube ähneln. Kubernetes unterstützt normalerweise nur etcd als Datastore. Beide Projekte umgehen das mit &lt;strong&gt;kine&lt;/strong&gt; , einem Shim, der die etcd-API in SQL übersetzt — und k0s übernimmt kine direkt aus dem k3s-Projekt.&lt;/p&gt;

&lt;p&gt;Deshalb können beide ein Einzelknoten-Cluster auf SQLite starten und später auf MySQL oder PostgreSQL wechseln. Es bedeutet aber auch, dass für beide derselbe Kompromiss gilt: SQLite ist eine einzelne Datei auf einem einzelnen Knoten. Hervorragend für eine Maschine — und kein hochverfügbarer Datastore.&lt;/p&gt;
&lt;h2&gt;
  
  
  MicroK8s — Das Workstation-Cluster, mit einer Meinung zur Paketierung
&lt;/h2&gt;

&lt;p&gt;MicroK8s ist Canonicals Distribution, und ihr prägendes Merkmal ist der Auslieferungsweg: Sie installiert sich als &lt;strong&gt;Snap&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Terminal window&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;snap &lt;span class="nb"&gt;install &lt;/span&gt;microk8s &lt;span class="nt"&gt;--classic&lt;/span&gt; &lt;span class="nt"&gt;--channel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1.35

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;p&gt;Diese eine Zeile ist tatsächlich der schnellste Weg zu einem Cluster auf einem Ubuntu-Laptop — und zugleich der Grund, warum MicroK8s in manchen Flotten ausscheidet. Wenn Ihre Produktionshosts kein snapd betreiben — und viele gehärtete, minimale oder nicht-Ubuntu-basierte Server-Images tun das nicht — ist das ein hartes Ausschlusskriterium, keine Unbequemlichkeit.&lt;/p&gt;

&lt;p&gt;Canonical gibt an, dass MicroK8s mit nur &lt;strong&gt;540 MB Arbeitsspeicher&lt;/strong&gt; läuft, empfiehlt aber 4 GB Speicher und 20 GB Festplatte für echte Workloads. Behandeln Sie die 540 MB als Untergrenze für ein leerlaufendes Cluster, nicht als Zusage für Ihre Anwendung.&lt;/p&gt;

&lt;p&gt;Zwei betriebliche Eigenheiten, die man vorher kennen sollte:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;kubectl ist namensraumgebunden.&lt;/strong&gt; MicroK8s bringt ein eigenes mit, aufgerufen als &lt;code&gt;microk8s kubectl&lt;/code&gt;, um Kollisionen mit einer bestehenden kubectl-Installation zu vermeiden. Die meisten legen sofort einen Alias an.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DNS ist standardmäßig aus.&lt;/strong&gt; MicroK8s liefert “the minimum of components for a pure, lightweight Kubernetes”, alles Weitere kommt über Add-ons:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Terminal window&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
microk8s &lt;span class="nb"&gt;enable &lt;/span&gt;dns

microk8s &lt;span class="nb"&gt;enable &lt;/span&gt;hostpath-storage

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;p&gt;Wer je zugesehen hat, wie ein frisches MicroK8s-Cluster einen Servicenamen nicht auflöst und etwas für kaputt hielt: Das ist der Grund. Es ist eine Designentscheidung, kein Fehler — aber die häufigste Überraschung in der ersten Stunde.&lt;/p&gt;

&lt;h3&gt;
  
  
  Besser als sein Ruf: die Hochverfügbarkeit
&lt;/h3&gt;

&lt;p&gt;MicroK8s wird meist als “Laptop-Cluster” abgelegt, was seine Clustering-Fähigkeiten untertreibt. &lt;strong&gt;Hochverfügbarkeit schaltet sich automatisch ein, sobald ein Cluster drei oder mehr Knoten hat&lt;/strong&gt; — es gibt keinen separaten HA-Modus zu konfigurieren.&lt;/p&gt;

&lt;p&gt;Dahinter steht &lt;strong&gt;dqlite&lt;/strong&gt; , und die Knotenrollen lohnen sich zu kennen, weil sie das Ausfallverhalten erklären:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;voters&lt;/strong&gt; replizieren die Datenbank und nehmen an der Leader-Wahl teil&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;standby&lt;/strong&gt; -Knoten replizieren die Datenbank, stimmen aber nicht ab&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;spare&lt;/strong&gt; -Knoten tun beides nicht und existieren, um befördert zu werden&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Die dokumentierten Zeiten sind erfreulich konkret: Verschwindet der Leader unsanft, dauert die Wahl eines neuen bis zu &lt;strong&gt;5 Sekunden&lt;/strong&gt; , und die Beförderung eines Nicht-Wählers zum Wähler bis zu &lt;strong&gt;30 Sekunden&lt;/strong&gt;. Jeder Knoten eines HA-MicroK8s-Clusters betreibt die Control Plane, sodass &lt;code&gt;microk8s&lt;/code&gt;-Befehle von überall im Cluster funktionieren.&lt;/p&gt;

&lt;h2&gt;
  
  
  RKE2 — Die, die ein Audit bestehen soll
&lt;/h2&gt;

&lt;p&gt;RKE2 ist SUSEs Distribution und der Ausreißer hier: Sie will gar nicht klein sein. Sie will vor einer Prüferin bestehen. Ihr zweiter Name sagt es deutlich — &lt;strong&gt;RKE Government&lt;/strong&gt; — und ihr erklärter Fokus ist Sicherheit und Compliance im Sektor der US-Bundesbehörden.&lt;/p&gt;

&lt;p&gt;Konkret heißt das:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Standardwerte und Konfigurationsoptionen, mit denen Cluster den &lt;strong&gt;CIS Kubernetes Benchmark v1.7 oder v1.8&lt;/strong&gt; mit minimalem Eingriff bestehen&lt;/li&gt;
&lt;li&gt;Unterstützung für &lt;strong&gt;FIPS-140-2&lt;/strong&gt; -Compliance&lt;/li&gt;
&lt;li&gt;CVE-Scans der Komponenten mit &lt;strong&gt;Trivy&lt;/strong&gt; in der Build-Pipeline&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Architektonisch ist RKE2 eine bewusste Mischung. Von k3s erbt es Bedienbarkeit und Deployment-Modell. Von RKE1 erbt es die enge Ausrichtung am Upstream-Kubernetes — und Ranchers Doku ist erfreulich direkt darin, warum das zählt: k3s weicht vom Upstream ab, um für Edge-Deployments zu optimieren, während RKE1 und RKE2 eng ausgerichtet bleiben.&lt;/p&gt;

&lt;p&gt;Auch die Control Plane läuft anders als bei allen anderen hier. RKE2 startet die Control-Plane-Komponenten als &lt;strong&gt;statische Pods, verwaltet vom Kubelet&lt;/strong&gt; , mit containerd als eingebetteter Runtime. Keine Docker-Abhängigkeit, anders als bei RKE1.&lt;/p&gt;

&lt;p&gt;Beim Netzwerk bringt RKE2 vier primäre CNI-Plugins mit — &lt;strong&gt;Canal ist der Standard&lt;/strong&gt; , dazu Cilium, Calico und Flannel sowie Multus als sekundäres Plugin. Eine Warnung aus der Doku verdient Wiederholung, weil man sie sonst teuer lernt: &lt;strong&gt;RKE2 unterstützt es nicht, das primäre CNI, das CNI-Backend oder die Cluster- und Service-CIDRs an einem laufenden Cluster zu ändern.&lt;/strong&gt; Ein späterer Wechsel ist ungetestet und kann verwaiste Interfaces und Routen hinterlassen; das dokumentierte Mittel ist, das Cluster neu zu bauen. Entscheiden Sie vor dem ersten Start.&lt;/p&gt;

&lt;p&gt;Ebenfalls neu in diesem Jahr: &lt;strong&gt;nftables-Unterstützung&lt;/strong&gt; , verfügbar ab den Releases vom Juli 2026 (v1.36.3+rke2r1, v1.35.7+rke2r1, v1.34.10+rke2r1) und weiterhin als experimentell markiert. Sie wird von kube-proxy und den meisten mitgelieferten CNIs unterstützt und pro Komponente aktiviert — &lt;code&gt;proxy-mode=nftables&lt;/code&gt; für kube-proxy plus eine &lt;code&gt;HelmChartConfig&lt;/code&gt; für das CNI.&lt;/p&gt;

&lt;h3&gt;
  
  
  Die Änderung von 2026: Ingress NGINX ist Geschichte
&lt;/h3&gt;

&lt;p&gt;Das ist das Neueste auf dieser Seite und leicht zu übersehen. &lt;strong&gt;Ingress NGINX hat im März 2026 sein Lebensende erreicht.&lt;/strong&gt; Als direkte Folge liefert &lt;strong&gt;RKE2 ab v1.36 Traefik als Standard-Ingress-Controller für neue Cluster&lt;/strong&gt; aus; für bestehende Cluster gibt es einen dokumentierten Migrationspfad.&lt;/p&gt;

&lt;p&gt;Wer sich gerade jetzt auf RKE2 festlegt, den wird dieses Detail später einholen: Cluster, die vor und nach v1.36 gebaut wurden, haben nicht denselben Ingress-Controller, und alle Helm-Werte, Annotationen oder &lt;code&gt;IngressClass&lt;/code&gt;-Verweise, die Sie gegen &lt;code&gt;nginx&lt;/code&gt; templatisiert haben, müssen überarbeitet werden. Annotationslastige NGINX-Konfigurationen lassen sich nicht sauber übertragen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Die Vergleichstabelle
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;k3s&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;k0s&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;MicroK8s&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;RKE2&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Getragen von&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SUSE / CNCF, Linux Foundation&lt;/td&gt;
&lt;td&gt;Mirantis / LF Projects&lt;/td&gt;
&lt;td&gt;Canonical&lt;/td&gt;
&lt;td&gt;SUSE Rancher&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Paketierung&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Einzelne Binärdatei &amp;lt;100 MB&lt;/td&gt;
&lt;td&gt;Einzelne statische, selbstentpackende Binärdatei&lt;/td&gt;
&lt;td&gt;Snap (&lt;code&gt;--classic&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Installer; Control Plane als statische Pods&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Standard-Datastore&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SQLite&lt;/td&gt;
&lt;td&gt;SQLite (ein Knoten), etcd (mehrere)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;dqlite&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;etcd&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Control Plane läuft als&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Komponenten in einem Prozess&lt;/td&gt;
&lt;td&gt;“Nackte” überwachte Prozesse&lt;/td&gt;
&lt;td&gt;Snap-Dienste&lt;/td&gt;
&lt;td&gt;Statische Pods unter dem Kubelet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Workloads auf der Control Plane&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ja&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Nein — standardmäßig isoliert&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ja&lt;/td&gt;
&lt;td&gt;Ja&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Standard-CNI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Flannel&lt;/td&gt;
&lt;td&gt;Kube-router&lt;/td&gt;
&lt;td&gt;Im Snap enthalten&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Canal&lt;/strong&gt; (Cilium, Calico, Flannel ebenfalls dabei)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ingress enthalten&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Traefik&lt;/td&gt;
&lt;td&gt;Keiner&lt;/td&gt;
&lt;td&gt;Add-on&lt;/td&gt;
&lt;td&gt;Traefik ab v1.36&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Upstream-Nähe&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Weicht für Edge ab&lt;/td&gt;
&lt;td&gt;100 % Upstream&lt;/td&gt;
&lt;td&gt;Upstream&lt;/td&gt;
&lt;td&gt;Eng ausgerichtet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;CIS via kube-bench&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;CIS v1.7/v1.8, FIPS 140-2, Trivy&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OS-Abhängigkeit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Kernel + cgroups&lt;/td&gt;
&lt;td&gt;Nur Kernel&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Benötigt snapd&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Standard-Linux&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dokumentiertes Minimum&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2 Kerne / 2 GB Server&lt;/td&gt;
&lt;td&gt;1 vCPU / 1 GB Controller&lt;/td&gt;
&lt;td&gt;540 MB Untergrenze, 4 GB empfohlen&lt;/td&gt;
&lt;td&gt;Nicht als einzelne Zahl veröffentlicht&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Auswählen: Distribution an die Randbedingung anpassen
&lt;/h2&gt;

&lt;p&gt;Vergessen Sie Ranglisten. Jede dieser vier ist die richtige Antwort auf eine bestimmte Frage.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm04f7scrb1vhg4spgyw7.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm04f7scrb1vhg4spgyw7.webp" alt="Entscheidungshilfe: regulierte Produktion und Audits zu RKE2, Edge-Standorte mit dünner Anbindung zu k3s, Flottenstandardisierung und Control-Plane-Isolation zu k0s, Ubuntu-Workstation-Entwicklung zu MicroK8s" width="800" height="480"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Beginnen Sie bei der Randbedingung, über die Sie nicht verhandeln können — nicht beim Speicherbedarf.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nehmen Sie RKE2, wenn ein Mensch dieses Cluster prüfen wird.&lt;/strong&gt; FIPS, CIS-Benchmark-Standardwerte und CVE-Scans in der Pipeline rüstet man an einer anderen Distribution nicht an einem Wochenende nach. Wenn “reguliert”, “Behörde” oder “unser Security-Team muss freigeben” in Ihren Anforderungen auftaucht, ist die Entscheidung bereits gefallen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nehmen Sie k3s, wenn das Cluster dort steht, wo Sie schwer hinkommen.&lt;/strong&gt; Entfernte Standorte, Einplatinencomputer, Air-Gapped-Installationen, CI-Runner. Mitgelieferter Ingress, Load Balancer und Storage-Klasse bedeuten weniger Teile zum Bereitstellen, und der eingebettete Registry-Spiegel hält einen Standort am Leben, wenn seine Anbindung es nicht tut.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nehmen Sie k0s, wenn Sie Ihre eigene Plattform über eine Flotte standardisieren.&lt;/strong&gt; Keine Host-OS-Abhängigkeit, Control-Plane-Isolation gratis, k0sctl fürs Lifecycle-Management und die bewusste Weigerung, Ihren Ingress für Sie auszuwählen. Wenn Sie ohnehin wissen, welches CNI und welchen Ingress Sie wollen, bleibt k0s Ihnen aus dem Weg — und die isolierte Control Plane ist eine echte Sicherheitseigenschaft, die Sie sonst mit Taints und Hoffnung durchsetzen müssten.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nehmen Sie MicroK8s, wenn das Cluster auf einer Ubuntu-Workstation lebt.&lt;/strong&gt; Für lokale Entwicklung, Demos und Lehre ist ein Snap-Befehl plus Add-on-Liste schwer zu schlagen. Prüfen Sie, ob snapd auf Ihren Servern akzeptabel ist, bevor Sie es weiter befördern.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Und minikube für nichts davon.&lt;/strong&gt; Es ist ein Entwicklungswerkzeug für ein Cluster auf der eigenen Maschine und gehört nicht in dieselbe Kategorie wie die vier oben — es ist nichts, was man an einen Standort ausrollt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Was häufig schiefgeht
&lt;/h2&gt;

&lt;p&gt;Ein paar Fehlermuster, die echte Zeit kosten:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Einzelknoten-k3s auf SQLite als Produktion behandeln.&lt;/strong&gt; Das ist eine Datei auf einer Maschine. Für alles mit Verfügbarkeitserwartung: drei Server mit eingebettetem etcd oder ein externer Datastore.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Veröffentlichte Speicherminima direkt vergleichen.&lt;/strong&gt; Sie werden unter verschiedenen Bedingungen und gegen verschiedene Komponentensätze gemessen. Ein nackter k0s-Controller und ein k3s-Server mit Traefik plus ServiceLB sind nicht dasselbe Cluster.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Annehmen, ARM sei gleich ARM.&lt;/strong&gt; k0s deckt ARM64 und ARMv7 ab und nennt RISC-V — ohne vorkompilierte Binärdateien und ohne CI-Abdeckung. Prüfen Sie die konkrete Architektur, nicht die Familie.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Eingebettetes etcd auf Flash-Speicher betreiben.&lt;/strong&gt; etcd ist schreibintensiv; SD-Karten und eMMC überleben das nicht. Nutzen Sie eine SSD.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Heute auf RKE2 gegen &lt;code&gt;nginx&lt;/code&gt; templatisieren.&lt;/strong&gt; Mit dem Lebensende von Ingress NGINX und Traefik als Standard ab v1.36 hat diese Annahme ein Ablaufdatum.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Planen, “das CNI später zu wechseln” bei RKE2.&lt;/strong&gt; Die Doku sagt klar, dass das Ändern des primären CNI, seines Backends oder der Cluster- und Service-CIDRs an einem laufenden Cluster nicht unterstützt wird. Diese Entscheidung fällt einmal, vor dem ersten Start.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Eine kurze Checkliste
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Schreiben Sie die Randbedingung auf, über die Sie nicht verhandeln können — Audit, Anbindung, Host-OS oder gar keine.&lt;/li&gt;
&lt;li&gt;Prüfen Sie, ob snapd auf den Zielhosts erlaubt ist. Das schließt MicroK8s in einem Schritt aus oder ein.&lt;/li&gt;
&lt;li&gt;Entscheiden Sie, ob Sie einen vorgegebenen Ingress wollen oder Ihren eigenen. Das trennt k3s und k0s klarer als jeder Benchmark.&lt;/li&gt;
&lt;li&gt;Wenn die Control Plane keine Workloads tragen darf: Nur k0s liefert das ohne Konfiguration.&lt;/li&gt;
&lt;li&gt;Für alles Hochverfügbare zuerst den Datastore planen: drei Server mit eingebettetem etcd oder eine externe Datenbank. SQLite ist eine Einzelknoten-Antwort.&lt;/li&gt;
&lt;li&gt;Wenn es RKE2 wird: Version festnageln und prüfen, auf welcher Seite von v1.36 Sie stehen, bevor Sie Ingress-Manifeste schreiben.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Das ehrliche Fazit
&lt;/h2&gt;

&lt;p&gt;Diese vier Distributionen konkurrieren nicht darum, die leichteste zu sein. Sie kodieren vier verschiedene Meinungen darüber, was ein Team selbst entscheiden sollte.&lt;/p&gt;

&lt;p&gt;k3s entscheidet das meiste für Sie und optimiert für Orte, an denen selten jemand vorbeischaut. k0s entscheidet fast nichts und übergibt Ihnen eine saubere, isolierte Basis. MicroK8s entscheidet die Paketierung und überlässt den Rest den Add-ons. RKE2 entscheidet die Sicherheitshaltung, weil in seinem Zielsektor nur diese Entscheidung zählt.&lt;/p&gt;

&lt;p&gt;Nehmen Sie die, deren Meinungen Sie ohnehin teilen. Das ist eine haltbarere Grundlage als ein Speicherbedarf, der sich mit dem nächsten Release ändert.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Weiterlesen:&lt;/strong&gt; Für die Schicht über diesen Clustern siehe &lt;a href="https://www.alekseialeinikov.com/de/blog/topics/devops/platform-engineering-auf-kubernetes-2026" rel="noopener noreferrer"&gt;Platform Engineering auf Kubernetes&lt;/a&gt; und &lt;a href="https://www.alekseialeinikov.com/de/blog/topics/devops/gitops-mit-argo-cd-automatisierte-kubernetes-deployments-2026" rel="noopener noreferrer"&gt;GitOps mit Argo CD&lt;/a&gt;. Zum Härten der gewählten Distribution siehe &lt;a href="https://www.alekseialeinikov.com/de/blog/topics/security/opa-vs-kyverno-2026-kubernetes-policy-engine-vergleich" rel="noopener noreferrer"&gt;OPA vs Kyverno&lt;/a&gt; und die &lt;a href="https://www.alekseialeinikov.com/de/blog/topics/architecture/secure-by-default-gke-referenzarchitektur-2026" rel="noopener noreferrer"&gt;Secure-by-Default-GKE-Referenzarchitektur&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quellen:&lt;/strong&gt; Alle Zahlen und Aussagen stammen aus der jeweiligen Projektdokumentation — &lt;a href="https://docs.k3s.io/" rel="noopener noreferrer"&gt;k3s-Doku&lt;/a&gt;, &lt;a href="https://docs.k3s.io/installation/requirements" rel="noopener noreferrer"&gt;k3s-Anforderungen&lt;/a&gt;, &lt;a href="https://docs.k0sproject.io/stable/" rel="noopener noreferrer"&gt;k0s-Doku&lt;/a&gt;, &lt;a href="https://docs.k0sproject.io/stable/architecture/" rel="noopener noreferrer"&gt;k0s-Architektur&lt;/a&gt;, &lt;a href="https://canonical.com/microk8s/docs/getting-started" rel="noopener noreferrer"&gt;MicroK8s Getting Started&lt;/a&gt; und &lt;a href="https://docs.rke2.io/" rel="noopener noreferrer"&gt;RKE2-Doku&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ursprünglich veröffentlicht auf &lt;a href="https://www.alekseialeinikov.com/de/blog/topics/devops/k3s-vs-k0s-vs-microk8s-vs-rke2-2026-vergleich" rel="noopener noreferrer"&gt;alekseialeinikov.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>k3s</category>
      <category>k0s</category>
      <category>microk8s</category>
      <category>rke2</category>
    </item>
    <item>
      <title>k3s vs k0s vs MicroK8s vs RKE2: Which Kubernetes to Install When You Don't Need the Full One</title>
      <dc:creator>Aleksei Aleinikov</dc:creator>
      <pubDate>Thu, 20 Aug 2026 12:00:00 +0000</pubDate>
      <link>https://dev.to/aleksei_aleinikov/k3s-vs-k0s-vs-microk8s-vs-rke2-which-kubernetes-to-install-when-you-dont-need-the-full-one-3nc6</link>
      <guid>https://dev.to/aleksei_aleinikov/k3s-vs-k0s-vs-microk8s-vs-rke2-which-kubernetes-to-install-when-you-dont-need-the-full-one-3nc6</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa9fcewir3eq7uxfy5s8y.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa9fcewir3eq7uxfy5s8y.webp" alt="k3s vs k0s vs MicroK8s vs RKE2: Which Kubernetes to Install When You Don't Need the Full One" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every comparison of lightweight Kubernetes distributions opens with a table of memory footprints, and every one of them misses the point.&lt;/p&gt;

&lt;p&gt;The interesting question is not which distribution is smallest. It is &lt;strong&gt;what each one decided to throw away, and whether you can live without it.&lt;/strong&gt; A Kubernetes control plane has a fixed set of jobs; the difference between these four projects is which of those jobs they hand to you, which they hide, and which they refuse to have an opinion about at all.&lt;/p&gt;

&lt;p&gt;Here is what actually separates them in 2026 — including a change that landed this year and quietly rewrote one distribution’s defaults.&lt;/p&gt;

&lt;h2&gt;
  
  
  First: “Lightweight” Means Three Different Things
&lt;/h2&gt;

&lt;p&gt;Before comparing anything, it is worth separating three claims that get blended together:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;A small install artifact.&lt;/strong&gt; k3s ships as a single binary under 100MB. k0s is a single self-extracting binary that embeds the Kubernetes components and is statically compiled.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A low memory floor.&lt;/strong&gt; How little RAM the control plane needs before you put any workload on it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Few bundled components.&lt;/strong&gt; How much of a cluster you get before you install anything yourself.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These pull in opposite directions. A distribution that bundles an ingress controller, a load balancer and a storage provisioner gives you a working cluster faster — and uses more memory doing it. When you see one project claim a lower footprint than another, check whether it is measuring the same cluster.&lt;/p&gt;

&lt;h2&gt;
  
  
  k3s — Batteries Included, Optimised for the Edge
&lt;/h2&gt;

&lt;p&gt;k3s is the one most people mean when they say “lightweight Kubernetes.” The name is a joke about size: Kubernetes is a ten-letter word stylised as K8s, so something half as big is a five-letter word stylised as K3s. There is no long form and no official pronunciation.&lt;/p&gt;

&lt;p&gt;What makes it distinctive is how much arrives in that single binary:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;containerd&lt;/strong&gt; as the container runtime&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flannel&lt;/strong&gt; for CNI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CoreDNS&lt;/strong&gt; for cluster DNS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Traefik&lt;/strong&gt; as the ingress controller&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ServiceLB&lt;/strong&gt; as a load-balancer controller&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kube-router&lt;/strong&gt; for network policy&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;local-path-provisioner&lt;/strong&gt; for persistent volumes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spegel&lt;/strong&gt; , an embedded distributed container image registry mirror&lt;/li&gt;
&lt;li&gt;host utilities like iptables and socat&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last one matters more than it looks. Spegel lets nodes pull images from each other instead of reaching out to a registry, which is the difference between a working edge site and a stalled rollout when the uplink is thin.&lt;/p&gt;

&lt;p&gt;The datastore is the other headline. k3s defaults to &lt;strong&gt;SQLite&lt;/strong&gt; rather than etcd, with etcd, MySQL and PostgreSQL available as alternatives. For high availability you run three or more servers with embedded etcd, or point k3s at an external database.&lt;/p&gt;

&lt;p&gt;Minimum requirements are 2 cores and 2GB for a server, 1 core and 512MB for an agent. The published sizing guide is more useful than the minimums: a 2 vCPU / 4GB server handles up to 350 agents, 4 vCPU / 8GB handles up to 900, and a three-server HA setup scales roughly 50% further — three servers at 4 vCPU / 8GB reach about 1,200 agents.&lt;/p&gt;

&lt;p&gt;One caveat from the docs that catches homelab builders: etcd is write-intensive, and SD cards and eMMC cannot handle the IO. If you run k3s on a Raspberry Pi with embedded etcd, use an external SSD.&lt;/p&gt;

&lt;h2&gt;
  
  
  k0s — Minimal on Purpose, and the Only One That Isolates the Control Plane
&lt;/h2&gt;

&lt;p&gt;k0s takes the opposite position, and states it openly. Its documented scope is to bundle as few add-ons as possible, because things like ingress, service meshes and storage are “VERY opinionated” and keeping up with upstream releases of many bundled add-ons is maintenance-heavy.&lt;/p&gt;

&lt;p&gt;So you get the core — Konnectivity, CoreDNS, Metrics Server, containerd with runc, Kube-router as the default CNI with Calico as a preconfigured alternative — and no ingress controller.&lt;/p&gt;

&lt;p&gt;The architectural decision that actually distinguishes k0s is this: &lt;strong&gt;its controllers run no container engine and no kubelet by default.&lt;/strong&gt; The control plane components run as ordinary processes supervised by the k0s binary itself. The practical consequence is that a cluster user &lt;em&gt;cannot schedule workloads onto controller nodes&lt;/em&gt; — control plane isolation is the default, not something you configure with taints.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr9pz21brqs6enrcrm9kg.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr9pz21brqs6enrcrm9kg.webp" alt="Side-by-side anatomy of k3s, k0s, MicroK8s and RKE2 showing packaging, default datastore, how control plane components run, default CNI and which components come bundled" width="799" height="493"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The same control plane, packaged four different ways. What differs is where the components run and how much arrives with them.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The packaging claim is also stronger than it first appears. The binary is statically compiled with no OS-level dependencies besides the kernel: no RPMs, no snaps, no distro-specific packaging. The motivation stated in the docs is worth repeating, because it is a real operational problem — when Kubernetes runs on a host OS that upgrades independently, nobody owns the vulnerabilities that come from the gap between them. k0s closes the gap by not depending on the host.&lt;/p&gt;

&lt;p&gt;Requirements are 1 vCPU and 1GB for a controller, 0.5 vCPU and 1GB for a worker. The measured numbers are more honest than minimums: a controller with one worker and no pods sits around 510MB; with 20 workers and 2,000 pods, about 1GB; with 200 workers and 20,000 pods, about 3.3GB.&lt;/p&gt;

&lt;p&gt;Architectures cover x86-64, ARM64 and ARMv7, plus RISC-V — with the caveat, stated in the docs, that RISC-V has no pre-compiled binaries and no CI coverage. Windows support is experimental.&lt;/p&gt;
&lt;h3&gt;
  
  
  The shared secret: both run on kine
&lt;/h3&gt;

&lt;p&gt;Here is a detail that explains why k3s and k0s feel similar under the hood. Kubernetes normally supports only etcd as its datastore. Both projects get around this using &lt;strong&gt;kine&lt;/strong&gt; , a shim that translates the etcd API into SQL — and k0s takes kine directly from the k3s project.&lt;/p&gt;

&lt;p&gt;That is why both can boot a single-node cluster on SQLite and scale to MySQL or PostgreSQL later. It also means the same trade-off applies to both: SQLite is a single file on a single node. It is excellent for one machine and it is not a highly available datastore.&lt;/p&gt;
&lt;h2&gt;
  
  
  MicroK8s — The Workstation Cluster, With a Packaging Opinion
&lt;/h2&gt;

&lt;p&gt;MicroK8s is Canonical’s distribution, and its defining characteristic is the delivery mechanism: it installs as a &lt;strong&gt;snap&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Terminal window&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;snap &lt;span class="nb"&gt;install &lt;/span&gt;microk8s &lt;span class="nt"&gt;--classic&lt;/span&gt; &lt;span class="nt"&gt;--channel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1.35

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;p&gt;That single line is genuinely the fastest path to a cluster on an Ubuntu laptop, and it is also the reason MicroK8s is a non-starter in some fleets. If your production hosts do not run snapd — and many hardened, minimal or non-Ubuntu server images do not — this is a hard blocker rather than an inconvenience.&lt;/p&gt;

&lt;p&gt;Canonical states MicroK8s runs in as little as &lt;strong&gt;540MB of memory&lt;/strong&gt; , while recommending 4GB of memory and 20GB of disk to actually accommodate workloads. Treat the 540MB as the floor for an idle cluster, not a promise about your workload.&lt;/p&gt;

&lt;p&gt;Two operational quirks worth knowing before you start:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;kubectl is namespaced.&lt;/strong&gt; MicroK8s bundles its own, invoked as &lt;code&gt;microk8s kubectl&lt;/code&gt;, specifically to avoid colliding with an existing kubectl install. Most people immediately alias it away.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DNS is not on by default.&lt;/strong&gt; MicroK8s ships “the minimum of components for a pure, lightweight Kubernetes” and everything else arrives through add-ons:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Terminal window&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
microk8s &lt;span class="nb"&gt;enable &lt;/span&gt;dns

microk8s &lt;span class="nb"&gt;enable &lt;/span&gt;hostpath-storage

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;p&gt;If you have ever watched a fresh MicroK8s cluster fail to resolve a service name and assumed something was broken, this is why. It is a design decision, not a bug — but it is the single most common first-hour surprise.&lt;/p&gt;

&lt;h3&gt;
  
  
  The part that is better than its reputation: HA
&lt;/h3&gt;

&lt;p&gt;MicroK8s is usually filed under “laptop cluster”, which undersells its clustering story. &lt;strong&gt;High availability turns on automatically once a cluster has three or more nodes&lt;/strong&gt; — there is no separate HA mode to configure.&lt;/p&gt;

&lt;p&gt;The datastore behind it is &lt;strong&gt;dqlite&lt;/strong&gt; , and the node roles are worth knowing because they explain the failure behaviour:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;voters&lt;/strong&gt; replicate the database and take part in leader election&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;standby&lt;/strong&gt; nodes replicate the database but do not vote&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;spare&lt;/strong&gt; nodes do neither, and exist to be promoted&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The documented timings are refreshingly specific: if the leader disappears ungracefully it takes up to &lt;strong&gt;5 seconds&lt;/strong&gt; to elect a new one, and promoting a non-voter to voter takes up to &lt;strong&gt;30 seconds&lt;/strong&gt;. Every node in an HA MicroK8s cluster runs the control plane, so &lt;code&gt;microk8s&lt;/code&gt; commands work from anywhere in the cluster.&lt;/p&gt;

&lt;h2&gt;
  
  
  RKE2 — The One Built to Pass an Audit
&lt;/h2&gt;

&lt;p&gt;RKE2 is SUSE’s distribution, and it is the outlier here: it is not trying to be small. It is trying to be defensible in front of an auditor. Its other name says it plainly — &lt;strong&gt;RKE Government&lt;/strong&gt; — and its stated focus is security and compliance within the U.S. Federal Government sector.&lt;/p&gt;

&lt;p&gt;Concretely, that means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Defaults and configuration options that let clusters pass the &lt;strong&gt;CIS Kubernetes Benchmark v1.7 or v1.8&lt;/strong&gt; with minimal operator intervention&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FIPS 140-2&lt;/strong&gt; compliance support&lt;/li&gt;
&lt;li&gt;Components scanned for CVEs with &lt;strong&gt;Trivy&lt;/strong&gt; in the build pipeline&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Architecturally, RKE2 is a deliberate hybrid. From k3s it inherits the usability and deployment model. From RKE1 it inherits close alignment with upstream Kubernetes — and Rancher’s docs are refreshingly direct about why that matters: k3s has diverged from upstream in order to optimise for edge deployments, while RKE1 and RKE2 stay closely aligned.&lt;/p&gt;

&lt;p&gt;It also runs its control plane differently from everything else here. RKE2 launches control plane components as &lt;strong&gt;static pods managed by the kubelet&lt;/strong&gt; , with containerd as the embedded runtime. No Docker dependency, unlike RKE1.&lt;/p&gt;

&lt;p&gt;On networking, RKE2 bundles four primary CNI plugins — &lt;strong&gt;Canal is the default&lt;/strong&gt; , with Cilium, Calico and Flannel also included, plus Multus as a secondary plugin. One warning from the docs deserves repeating because it is expensive to learn the hard way: &lt;strong&gt;RKE2 does not support changing the primary CNI, the CNI backend, or the cluster and service CIDRs on a running cluster.&lt;/strong&gt; Switching later is untested and may leave stale interfaces and routes behind; the documented remedy is to rebuild the cluster. Choose before first start.&lt;/p&gt;

&lt;p&gt;Also new this year: &lt;strong&gt;nftables support&lt;/strong&gt; , available as of the July 2026 releases (v1.36.3+rke2r1, v1.35.7+rke2r1, v1.34.10+rke2r1) and still marked experimental. It is supported by kube-proxy and most bundled CNIs, and enabled per component — &lt;code&gt;proxy-mode=nftables&lt;/code&gt; for kube-proxy, plus a &lt;code&gt;HelmChartConfig&lt;/code&gt; for the CNI.&lt;/p&gt;

&lt;h3&gt;
  
  
  The 2026 change: Ingress NGINX is gone
&lt;/h3&gt;

&lt;p&gt;This is the newest thing on this page and it is easy to miss. &lt;strong&gt;Ingress NGINX reached end-of-life in March 2026.&lt;/strong&gt; As a direct result, starting with &lt;strong&gt;v1.36, RKE2 ships Traefik as the default ingress controller for new clusters&lt;/strong&gt; ; existing clusters have a documented migration path.&lt;/p&gt;

&lt;p&gt;If you are standardising on RKE2 right now, this is the detail that will bite you later: clusters built before and after v1.36 will not have the same ingress controller, and any Helm values, annotations or &lt;code&gt;IngressClass&lt;/code&gt; references you templated against &lt;code&gt;nginx&lt;/code&gt; will need revisiting. Annotation-heavy NGINX configurations do not port over cleanly.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Comparison Table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;k3s&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;k0s&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;MicroK8s&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;RKE2&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Backed by&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SUSE / CNCF, Linux Foundation&lt;/td&gt;
&lt;td&gt;Mirantis / LF Projects&lt;/td&gt;
&lt;td&gt;Canonical&lt;/td&gt;
&lt;td&gt;SUSE Rancher&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Packaging&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Single binary &amp;lt;100MB&lt;/td&gt;
&lt;td&gt;Single static self-extracting binary&lt;/td&gt;
&lt;td&gt;snap (&lt;code&gt;--classic&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Installer; control plane as static pods&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Default datastore&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SQLite&lt;/td&gt;
&lt;td&gt;SQLite (single node), etcd (multi-node)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;dqlite&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;etcd&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Control plane runs as&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Components in one process&lt;/td&gt;
&lt;td&gt;“Naked” supervised processes&lt;/td&gt;
&lt;td&gt;snap services&lt;/td&gt;
&lt;td&gt;Static pods under kubelet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Workloads on control plane&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No — isolated by default&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Default CNI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Flannel&lt;/td&gt;
&lt;td&gt;Kube-router&lt;/td&gt;
&lt;td&gt;Bundled with the snap&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Canal&lt;/strong&gt; (Cilium, Calico, Flannel also bundled)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ingress included&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Traefik&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Add-on&lt;/td&gt;
&lt;td&gt;Traefik from v1.36&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Upstream alignment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Diverges for edge&lt;/td&gt;
&lt;td&gt;100% upstream&lt;/td&gt;
&lt;td&gt;Upstream&lt;/td&gt;
&lt;td&gt;Closely aligned&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compliance story&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;CIS via kube-bench&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;CIS v1.7/v1.8, FIPS 140-2, Trivy&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OS dependency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Kernel + cgroups&lt;/td&gt;
&lt;td&gt;Kernel only&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Requires snapd&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Standard Linux&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Documented minimum&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2 core / 2GB server&lt;/td&gt;
&lt;td&gt;1 vCPU / 1GB controller&lt;/td&gt;
&lt;td&gt;540MB floor, 4GB advised&lt;/td&gt;
&lt;td&gt;Not published as a single figure&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Choosing: Match the Distribution to the Constraint
&lt;/h2&gt;

&lt;p&gt;Forget rankings. Every one of these is the right answer to a specific question.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm04f7scrb1vhg4spgyw7.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm04f7scrb1vhg4spgyw7.webp" alt="Decision guide mapping constraints to distributions: regulated production and audits to RKE2, edge sites with thin connectivity to k3s, fleet standardisation and control plane isolation to k0s, Ubuntu workstation development to MicroK8s" width="800" height="480"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Start from the constraint you cannot negotiate, not from the memory footprint.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose RKE2 if a person will audit this cluster.&lt;/strong&gt; FIPS, CIS benchmark defaults and pipeline CVE scanning are not things you retrofit onto another distribution in a weekend. If “regulated”, “government”, “FedRAMP” or “our security team must sign off” appear anywhere in your requirements, the decision is already made.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose k3s if the cluster lives somewhere you cannot easily reach.&lt;/strong&gt; Remote sites, single-board computers, air-gapped installs, CI runners. The bundled ingress, load balancer and storage class mean fewer moving parts to provision, and the embedded registry mirror keeps a site working when its connection does not.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose k0s if you are standardising your own platform across a fleet.&lt;/strong&gt; No host OS dependency, control plane isolation for free, k0sctl for lifecycle management, and a deliberate refusal to pick your ingress for you. If you already know which CNI and ingress you want, k0s stays out of the way — and the isolated control plane is a genuine security property you would otherwise have to enforce with taints and hope.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose MicroK8s if the cluster lives on an Ubuntu workstation.&lt;/strong&gt; For local development, demos and teaching, one snap command and an add-on list is hard to beat. Verify snapd is acceptable on your servers before promoting it further than that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And use minikube for none of these.&lt;/strong&gt; It is a development tool for running a cluster on your own machine, and it is not in the same category as the four above — it is not what you deploy to a site.&lt;/p&gt;

&lt;h2&gt;
  
  
  What People Get Wrong
&lt;/h2&gt;

&lt;p&gt;A few failure patterns worth naming, since they cost real time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Treating single-node k3s on SQLite as production.&lt;/strong&gt; It is one file on one machine. For anything with an uptime expectation, run three servers with embedded etcd or point k3s at an external datastore.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comparing published memory minimums directly.&lt;/strong&gt; They are measured under different conditions and against different bundled component sets. A bare k0s controller and a k3s server running Traefik plus ServiceLB are not the same cluster.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assuming ARM means ARM.&lt;/strong&gt; k0s covers ARM64 and ARMv7 and lists RISC-V — with no pre-compiled binaries and no CI coverage. Check the specific architecture, not the family.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Running embedded etcd on flash storage.&lt;/strong&gt; etcd is write-intensive; SD cards and eMMC will not survive it. Use an SSD.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Templating ingress against &lt;code&gt;nginx&lt;/code&gt; on RKE2 today.&lt;/strong&gt; With Ingress NGINX end-of-life and Traefik becoming the v1.36 default, that assumption has an expiry date.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Planning to “switch the CNI later” on RKE2.&lt;/strong&gt; The docs say plainly that changing the primary CNI, its backend, or the cluster and service CIDRs on a running cluster is unsupported. That decision is made once, before first start.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A Short Checklist
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Write down the constraint you cannot negotiate — audit, connectivity, host OS, or nothing at all.&lt;/li&gt;
&lt;li&gt;Check whether snapd is permitted on your target hosts. This eliminates or elects MicroK8s in one step.&lt;/li&gt;
&lt;li&gt;Decide whether you want an opinionated ingress or your own. That splits k3s from k0s more cleanly than any benchmark.&lt;/li&gt;
&lt;li&gt;If the control plane must not run workloads, note that only k0s gives you this without configuration.&lt;/li&gt;
&lt;li&gt;For anything highly available, plan the datastore first: three servers with embedded etcd, or an external database. SQLite is a single-node answer.&lt;/li&gt;
&lt;li&gt;If you land on RKE2, pin your version and check which side of v1.36 you are on before writing ingress manifests.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Honest Summary
&lt;/h2&gt;

&lt;p&gt;These four distributions are not competing to be the lightest. They are encoding four different opinions about what a team should have to decide for itself.&lt;/p&gt;

&lt;p&gt;k3s decides most of it for you and optimises for places engineers rarely visit. k0s decides almost nothing and hands you a clean, isolated base. MicroK8s decides the packaging and lets add-ons do the rest. RKE2 decides the security posture, because in its target sector that is the only decision that matters.&lt;/p&gt;

&lt;p&gt;Pick the one whose opinions you already agree with. That is a more durable basis than a memory footprint that will change with the next release.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Related reading:&lt;/strong&gt; for the layer above these clusters, see &lt;a href="https://www.alekseialeinikov.com/en/blog/topics/devops/platform-engineering-on-kubernetes-2026" rel="noopener noreferrer"&gt;platform engineering on Kubernetes&lt;/a&gt; and &lt;a href="https://www.alekseialeinikov.com/en/blog/topics/devops/gitops-argo-cd-automated-kubernetes-deployments-2026" rel="noopener noreferrer"&gt;GitOps with Argo CD&lt;/a&gt;. For hardening whichever one you pick, see &lt;a href="https://www.alekseialeinikov.com/en/blog/topics/security/opa-vs-kyverno-2026-kubernetes-policy-engine" rel="noopener noreferrer"&gt;OPA vs Kyverno&lt;/a&gt; and the &lt;a href="https://www.alekseialeinikov.com/en/blog/topics/architecture/secure-by-default-gke-reference-architecture-2026" rel="noopener noreferrer"&gt;secure-by-default GKE reference architecture&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sources:&lt;/strong&gt; all figures and claims come from each project’s own documentation — &lt;a href="https://docs.k3s.io/" rel="noopener noreferrer"&gt;k3s docs&lt;/a&gt;, &lt;a href="https://docs.k3s.io/installation/requirements" rel="noopener noreferrer"&gt;k3s requirements&lt;/a&gt;, &lt;a href="https://docs.k0sproject.io/stable/" rel="noopener noreferrer"&gt;k0s docs&lt;/a&gt;, &lt;a href="https://docs.k0sproject.io/stable/architecture/" rel="noopener noreferrer"&gt;k0s architecture&lt;/a&gt;, &lt;a href="https://canonical.com/microk8s/docs/getting-started" rel="noopener noreferrer"&gt;MicroK8s getting started&lt;/a&gt; and &lt;a href="https://docs.rke2.io/" rel="noopener noreferrer"&gt;RKE2 docs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.alekseialeinikov.com/en/blog/topics/devops/k3s-vs-k0s-vs-microk8s-vs-rke2-2026" rel="noopener noreferrer"&gt;alekseialeinikov.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>k3s</category>
      <category>k0s</category>
      <category>microk8s</category>
      <category>rke2</category>
    </item>
    <item>
      <title>DORA-Metriken 2026: Warum aus vier fünf wurden (und was die meisten Dashboards falsch machen)</title>
      <dc:creator>Aleksei Aleinikov</dc:creator>
      <pubDate>Wed, 19 Aug 2026 12:00:00 +0000</pubDate>
      <link>https://dev.to/aleksei_aleinikov/dora-metriken-2026-warum-aus-vier-funf-wurden-und-was-die-meisten-dashboards-falsch-machen-34lj</link>
      <guid>https://dev.to/aleksei_aleinikov/dora-metriken-2026-warum-aus-vier-funf-wurden-und-was-die-meisten-dashboards-falsch-machen-34lj</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6kw90p8zvo5hyzhiutso.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6kw90p8zvo5hyzhiutso.webp" alt="DORA-Metriken 2026: Warum aus vier fünf wurden (und was die meisten Dashboards falsch machen)" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Öffnen Sie irgendein Engineering-Dashboard, das DORA zu messen behauptet, und Sie sehen mit ziemlicher Sicherheit vier Kacheln: Deployment-Frequenz, Lead Time, Change Failure Rate und MTTR.&lt;/p&gt;

&lt;p&gt;Drei dieser vier Bezeichnungen sind veraltet, und die Auswahl selbst ist unvollständig. DORA ist in der Forschung von 2024 auf &lt;strong&gt;fünf&lt;/strong&gt; Metriken für Software-Delivery-Performance umgestiegen, hat eine davon bereits 2023 umbenannt und eine weitere in eine Kategorie verschoben, die die meisten Teams bis heute falsch einsortieren. Im &lt;a href="https://dora.dev/insights/dora-2025-year-in-review/" rel="noopener noreferrer"&gt;Jahresrückblick 2025&lt;/a&gt; formuliert DORA es unmissverständlich: “We have also officially evolved the four software delivery performance metrics into five metrics.”&lt;/p&gt;

&lt;p&gt;Das ist keine Wortklauberei. Die Änderungen kodieren Erkenntnisse, die unmittelbar beeinflussen, wie Sie Ihre eigenen Zahlen lesen sollten — und eine davon existiert nur deshalb, weil Teams die falsche Art von Fehlern gemessen haben.&lt;/p&gt;

&lt;h2&gt;
  
  
  Die fünf Metriken, wie sie heute stehen
&lt;/h2&gt;

&lt;p&gt;DORA gruppiert die fünf Metriken in zwei Faktoren: &lt;strong&gt;Durchsatz&lt;/strong&gt; und &lt;strong&gt;Instabilität&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Durchsatz — wie Änderungen durch das System fließen
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metrik&lt;/th&gt;
&lt;th&gt;Was sie misst&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Change Lead Time&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Zeit vom Commit in die Versionsverwaltung bis zum Deployment in die Produktion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deployment-Frequenz&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Wie oft Änderungen deployt werden, oder der Abstand zwischen Deployments&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Failed Deployment Recovery Time&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Wie lange die Erholung von einem Deployment dauert, das fehlschlug und sofortiges Eingreifen erforderte&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Instabilität — wie gut diese Deployments verlaufen
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metrik&lt;/th&gt;
&lt;th&gt;Was sie misst&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Change Fail Rate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Anteil der Deployments, die sofortiges Eingreifen erfordern — ein Rollback oder einen Hotfix&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deployment Rework Rate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Anteil der Deployments, die ungeplant sind und aus einem Produktionsvorfall resultieren&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Zwei Dinge in dieser Tabelle überraschen alle, die die vier Keys vor Jahren gelernt haben.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Die Recovery-Zeit steht beim Durchsatz.&lt;/strong&gt; Ein Jahrzehnt lang lebte sie auf der Stabilitätsseite, als Gegengewicht zur Geschwindigkeit. Heute gehört sie zu den Flussmaßen. Die Logik trägt, sobald man auf die Form der Zahlen schaut: Instabilität wird in &lt;em&gt;Verhältnissen&lt;/em&gt; ausgedrückt — welcher Anteil Ihrer Deployments schiefgeht — während der Durchsatz die &lt;em&gt;Zeit- und Mengenmaße&lt;/em&gt; dafür abdeckt, wie Änderungen in die Produktion gelangen. Die Erholung von einem fehlgeschlagenen Deployment ist selbst eine Änderung, die in die Produktion geht, nur unter maximalem Druck.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Es gibt eine Metrik, die die meisten Teams nie erfasst haben.&lt;/strong&gt; Die Deployment Rework Rate ist die Neuzugängerin, und ihre Entstehungsgeschichte ist der interessanteste Teil der Forschung von 2024.&lt;/p&gt;

&lt;h2&gt;
  
  
  Warum eine fünfte Metrik nötig war
&lt;/h2&gt;

&lt;p&gt;DORAs Forschende bemerkten, dass die Change Fail Rate still und leise zwei Aufgaben erfüllte. Sie sollte erfassen, wie oft Deployments schiefgehen — Teams nutzten sie aber zugleich als Stellvertreter dafür, &lt;strong&gt;wie viel Nacharbeit ein Team leisten muss&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Das ist nicht dasselbe, und die Vermischung verdeckt einen realen Fehlermodus. Ein Team kann eine respektable Change Fail Rate haben, während ein großer Teil seines Deployment-Volumens ungeplante Arbeit ist, die aus Vorfällen entsteht. Auf einem Vier-Metriken-Dashboard sieht dieses Team gut aus. Tatsächlich wird ein wachsender Anteil seiner Kapazität dafür verbraucht, die Produktion zu reparieren, statt Neues zu liefern.&lt;/p&gt;

&lt;p&gt;Die Deployment Rework Rate trennt beides. Die Change Fail Rate fragt: &lt;em&gt;Hat dieses Deployment etwas kaputtgemacht?&lt;/em&gt; Die Rework Rate fragt: &lt;em&gt;War dieses Deployment nur nötig, weil bereits etwas kaputt war?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Wer je beobachtet hat, wie die Deployment-Frequenz eines Teams steigt und trotzdem niemand ein einziges neues Feature benennen kann, hat genau die Lücke gesehen, die diese Metrik schließt.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmxgax403wy6c1r21i92l.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmxgax403wy6c1r21i92l.webp" alt="Die fünf DORA-Metriken, gruppiert in Durchsatz (Change Lead Time, Deployment-Frequenz, Failed Deployment Recovery Time) und Instabilität (Change Fail Rate, Deployment Rework Rate); die Recovery-Zeit wechselte zum Durchsatz, die Rework Rate kam 2024 hinzu" width="800" height="480"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Fünf Metriken, zwei Faktoren. Die Recovery-Zeit wanderte zum Durchsatz; die Rework Rate ist die Ergänzung von 2024.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Die Umbenennung, die einen echten Messfehler behob
&lt;/h2&gt;

&lt;p&gt;Bevor sich die Anzahl änderte, änderten sich die Definitionen. 2023 benannte DORA die lange als &lt;strong&gt;MTTR&lt;/strong&gt; oder &lt;strong&gt;Time to Restore Service&lt;/strong&gt; bekannte Metrik in &lt;strong&gt;Failed Deployment Recovery Time&lt;/strong&gt; um.&lt;/p&gt;

&lt;p&gt;Die Begründung war präzise. Die alten Definitionen unterschieden nicht zwischen:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;einem Ausfall, der durch eine von Ihnen deployte Änderung verursacht wurde, und&lt;/li&gt;
&lt;li&gt;einem Ausfall, der ganz andere Ursachen hat — eine ausgefallene Cloud-Region, eine Störung beim Anbieter, ein Problem im Rechenzentrum.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Das gehört zu verschiedenen Systemen. Das erste ist eine Eigenschaft Ihres Lieferprozesses, das zweite eine Eigenschaft Ihrer Infrastruktur und Ihres Glücks. Beides zusammenzumitteln ergab eine Zahl, die sich aus Gründen bewegte, die nichts mit der Arbeitsweise des Teams zu tun hatten — genau das, was man von einer Delivery-Metrik nicht will. Die Einengung auf &lt;em&gt;Beeinträchtigungen, die durch eine Änderung an der Produktion verursacht wurden&lt;/em&gt;, brachte sie statistisch mit den übrigen Delivery-Metriken in Einklang.&lt;/p&gt;

&lt;p&gt;Die praktische Konsequenz: &lt;strong&gt;Wenn die MTTR-Kachel Ihres Dashboards von jedem Vorfall in Ihrem Incident-Tracker gespeist wird, ist sie nicht die DORA-Metrik.&lt;/strong&gt; Sie ist eine Mischung aus zwei verschiedenen Signalen, und man kann nicht sauber auf sie reagieren.&lt;/p&gt;
&lt;h2&gt;
  
  
  Der Mythos von “Reliability, der fünften Metrik”
&lt;/h2&gt;

&lt;p&gt;Sie finden bis heute Artikel, Präsentationen und Anbieterseiten, die Reliability als fünfte DORA-Metrik bezeichnen. Diese Einordnung stammt aus DORAs eigenem Report von 2021 — und DORA hat sie inzwischen korrigiert.&lt;/p&gt;

&lt;p&gt;Die &lt;a href="https://dora.dev/insights/dora-metrics-history/" rel="noopener noreferrer"&gt;Historie der Metriken&lt;/a&gt; hält fest, dass der Report von 2021 “inaccurately called the ‘reliability’ metric the ‘fifth metric’ when, in reality, ‘reliability’ is more a measure of operational performance than a measure of software delivery performance.”&lt;/p&gt;

&lt;p&gt;Die Unterscheidung ist wichtig. Reliability, gemessen über Service Level Objectives, beschreibt, wie gut sich die Software für Nutzer verhält, sobald sie läuft. Software-Delivery-Performance beschreibt, wie gut Änderungen in die Produktion gelangen. Beides gehört ins DORA-Core-Modell, aber es sind verschiedene Konstrukte, und sie beantworten verschiedene Arbeit.&lt;/p&gt;

&lt;p&gt;Beachten Sie auch, was das für die Prüfung der eigenen Dokumentation bedeutet: Die Vier-gegen-fünf-Verwirrung ist nicht nur ein Nachhinken der Branche. Selbst DORAs Core-Modell, das bewusst konservativ ist und — in DORAs Worten — “deliberately trails the research”, zeigt weiterhin die ältere Vierergruppierung. Die Guides und die aktuelle Forschung sind ihm voraus. Das ist Absicht, aber ein guter Grund, bei allem, was Sie lesen, auf das Datum zu schauen.&lt;/p&gt;
&lt;h2&gt;
  
  
  Messen, ohne eine Plattform zu kaufen
&lt;/h2&gt;

&lt;p&gt;Sie brauchen keinen Anbieter, um anzufangen. Vier der fünf Metriken fallen aus Deployment-Ereignissen heraus; die fünfte braucht ein wenig menschliche Eingabe, die keine API für Sie ableiten kann.&lt;/p&gt;

&lt;p&gt;Beginnen Sie bei &lt;strong&gt;Deployments&lt;/strong&gt; , nicht bei Pull Requests. Das ist der mit Abstand häufigste Instrumentierungsfehler, und er lässt die Lead Time weit besser aussehen, als sie ist.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Change Lead Time aus GitHub-Deployment-Ereignissen.
# Entscheidend: ab dem ERSTEN Commit der Änderung messen, nicht ab dem PR-Merge.
&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;statistics&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timezone&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;lead_time_seconds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;deployment_finished_at&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;commit_authored_at&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

    &lt;span class="nf"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;deployment_finished_at&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;commit_authored_at&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;total_seconds&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;summarise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;samples&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Median berichten. Lieferzeiten haben lange Ausläufer, die ein Mittelwert verdeckt.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;samples&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;p50&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;statistics&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;median&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;samples&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;

        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;p90&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;statistics&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;quantiles&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;samples&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;samples&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;samples&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;

        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;samples&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;

    &lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;p&gt;Warum der erste Commit und nicht der Merge? Weil die Review-Warteschlange Teil Ihrer Lead Time ist. Ein Team mit einer Zwei-Stunden-Pipeline und einem Vier-Tage-Review-Rückstau hat keine Lead Time von zwei Stunden — und ab dem Merge zu messen ist genau der Weg, auf dem dieser Rückstau für alle oberhalb des Teams unsichtbar bleibt.&lt;/p&gt;

&lt;p&gt;Für die übrigen Metriken übersetzen sich die Definitionen in einfache Verhältnisse über ein Zeitfenster:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;deployment_frequenz = erfolgreiche_produktions_deployments / zeitfenster
change_fail_rate = deployments_mit_sofortigem_eingriff / alle_deployments
deployment_rework_rate = ungeplante_deployments_nach_vorfall / alle_deployments
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;p&gt;Die Eingabe, die Ihr Git-Host nicht liefern kann, ist die Information, welche Deployments &lt;strong&gt;sofortiges Eingreifen&lt;/strong&gt; erforderten und welche &lt;strong&gt;ungeplante Vorfallsarbeit&lt;/strong&gt; waren. Sie muss von dort kommen, wo Ihr Team die Realität ohnehin festhält — aus dem Incident-Tracker, einem Rollback-Label, einer Deployment-Annotation. Ein pragmatischer Anfang ist ein einziges Pflichtfeld an jedem Produktions-Deployment: &lt;code&gt;planned&lt;/code&gt;, &lt;code&gt;hotfix&lt;/code&gt; oder &lt;code&gt;rollback&lt;/code&gt;. Drei Werte, beim Deployment ausgefüllt, genügen für beide Instabilitätsmetriken.&lt;/p&gt;

&lt;p&gt;DORA sagt ausdrücklich, dass Teams hier überinvestieren. Integrationen über alle Systeme hinweg zu bauen, um präzise Zahlen zu bekommen, “might not be worth the initial investment” — mit Gesprächen zu beginnen oder mit dem &lt;a href="https://dora.dev/quickcheck/" rel="noopener noreferrer"&gt;DORA Quick Check&lt;/a&gt; führt oft schneller zu Verbesserung als eine perfekte Telemetrie-Pipeline.&lt;/p&gt;

&lt;p&gt;Wer die schnellstmögliche Bestätigung will, dass die fünfte Metrik real und keine reine Dokumentationsänderung ist: DORA hat den &lt;a href="https://dora.dev/insights/quickcheck-updates/" rel="noopener noreferrer"&gt;Quick Check im April 2026 aktualisiert&lt;/a&gt;, sodass er die Deployment Rework Rate und neue Branchen-Benchmarks enthält. Das Werkzeug fragt sie inzwischen ab.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wo diese Zahlen kaputtgehen
&lt;/h2&gt;

&lt;p&gt;Jede DORA-Metrik hat eine triviale Gaming-Strategie. Das ist kein Mangel der Metriken; das passiert jedem Maß, das zum Ziel wird. DORA führt “Metriken zum Ziel machen” als ersten häufigen Fallstrick auf und nennt Goodharts Gesetz beim Namen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F52in9uvrfgvyxoj64xqc.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F52in9uvrfgvyxoj64xqc.webp" alt="Jede der fünf DORA-Metriken mit der konkreten Art, wie Teams sie manipulieren, sobald sie zum Leistungsziel wird: Commits aufteilen, ab Merge messen, schwere Vorfälle ausschließen, Fehler nicht erfassen und Hotfixes als geplante Arbeit umdeklarieren" width="799" height="493"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Jede Metrik lässt sich offensichtlich fälschen. Alle fünf auf dieselbe Weise: indem man die Erfassung ändert, nicht das System.&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metrik&lt;/th&gt;
&lt;th&gt;Wie sie manipuliert wird&lt;/th&gt;
&lt;th&gt;Was Sie tatsächlich sehen&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Deployment-Frequenz&lt;/td&gt;
&lt;td&gt;Eine Änderung auf sechs Deployments aufteilen&lt;/td&gt;
&lt;td&gt;Die Zahl verdreifacht sich, nichts geht schneller live&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Change Lead Time&lt;/td&gt;
&lt;td&gt;Ab PR-Merge statt ab erstem Commit messen&lt;/td&gt;
&lt;td&gt;Der Review-Rückstau verschwindet aus den Daten&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Failed Deployment Recovery Time&lt;/td&gt;
&lt;td&gt;Erholung mit dem Ende des Rollbacks erklären, nicht mit bedienten Nutzern&lt;/td&gt;
&lt;td&gt;Schnelle Erholung, unzufriedene Nutzer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Change Fail Rate&lt;/td&gt;
&lt;td&gt;Kleine Fehler nicht mehr als Fehler erfassen&lt;/td&gt;
&lt;td&gt;Eine Weltklassezahl bei sich verschlechterndem System&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deployment Rework Rate&lt;/td&gt;
&lt;td&gt;Den Hotfix als geplante Arbeit einbuchen&lt;/td&gt;
&lt;td&gt;Nacharbeit wird unsichtbar&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Beachten Sie das Muster: &lt;strong&gt;Keine dieser Maßnahmen ändert das System, alle ändern die Erfassung.&lt;/strong&gt; Das ist das verräterische Zeichen. Wenn sich eine Metrik verbessert und niemand eine geänderte Praxis benennen kann, hat sich die Erfassung geändert.&lt;/p&gt;

&lt;p&gt;Die übrigen Fallstricke, die DORA benennt, lohnen sich zu kennen, weil sie in fast jeder Einführung auftauchen:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Eine Metrik, die alle beherrscht.&lt;/strong&gt; Komplexe Systeme brauchen mehrere Maße, die in Spannung zueinander stehen. Eine einzelne Zahl wird immer auf Kosten von etwas Ungemessenem optimiert.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ungleiche Vergleiche.&lt;/strong&gt; Diese Metriken gelten für &lt;em&gt;eine Anwendung oder einen Service&lt;/em&gt;. Eine Mobile-App mit einem Mainframe-System zu vergleichen oder Zahlen über eine ganze Organisation zu mischen, ergibt etwas, das wie eine Rangliste aussieht und nichts bedeutet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Getrennte Verantwortung.&lt;/strong&gt; Wenn nur Ops für Stabilität und nur Dev für Durchsatz zuständig ist, haben Sie eine Maschine zum Fingerzeigen gebaut. Die fünf sind als gemeinsame Verantwortung gedacht.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wettbewerb.&lt;/strong&gt; Ziel ist die Verbesserung gegenüber der eigenen Vergangenheit, nicht der Sieg über ein anderes Team.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Die Branche als Schutzschild.&lt;/strong&gt; “Wir sind reguliert, deshalb können wir nicht häufiger deployen” ist meist eine Aussage über einen Prozess, den niemand überprüft hat, nicht über die Regulierung.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Die schärfste Version dieses Problems ist der Einsatz von DORA-Metriken auf Einzelpersonen. Die Metriken sind als &lt;em&gt;Prädiktoren auf Teamebene&lt;/em&gt; für organisationale Performance und Wohlbefinden validiert. Auf eine Person angewendet, messen sie deren Position in einer Warteschlange.&lt;/p&gt;

&lt;h3&gt;
  
  
  Die Ausgabe 2026 desselben Fehlers: Tokenmaxxing
&lt;/h3&gt;

&lt;p&gt;Das neueste Beispiel ist gar keine DORA-Metrik — und genau das macht es lehrreich.&lt;/p&gt;

&lt;p&gt;Im Juni 2026 veröffentlichte DORA zu einem Trend, den es &lt;a href="https://dora.dev/insights/finding-balance-in-the-era-of-tokenmaxxing/" rel="noopener noreferrer"&gt;Tokenmaxxing&lt;/a&gt; nennt: Organisationen erfassen und belohnen den reinen Verbrauch von KI-Tokens über interne Ranglisten, um die Einführung zu beschleunigen. DORAs Einschätzung ist abgewogen — diese Gamification kann KI-skeptische Entwickelnde tatsächlich zum Ausprobieren bewegen — aber das Fazit ist deutlich: Token-Verbrauch als Leistungsindikator zu behandeln, ist eine gefährliche Falle.&lt;/p&gt;

&lt;p&gt;Es ist derselbe Fehler wie die Deployment-Frequenz im Mitarbeitergespräch, nur eine Abstraktionsebene höher. Token-Verbrauch misst Aktivität. Er lässt sich trivial maximieren, indem man mehr generiert, weniger prüft und größere Kontexte einfügt. Wer in seiner Organisation gelernt hat, blanke Commit-Zählungen nicht zu belohnen, weiß bereits, warum das hier schlecht endet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Was KI verändert hat
&lt;/h2&gt;

&lt;p&gt;DORA benannte seinen Jahresreport 2025 von &lt;em&gt;Accelerate State of DevOps&lt;/em&gt; in &lt;em&gt;State of AI-assisted Software Development&lt;/em&gt; um, und die Kernaussage dieser Forschung ist ein nützliches Korrektiv — sowohl gegen den Hype als auch gegen die Gegenreaktion.&lt;/p&gt;

&lt;p&gt;KI wird als &lt;strong&gt;Verstärker&lt;/strong&gt; beschrieben: Sie vergrößert die vorhandenen Stärken und Schwächen einer Organisation. Konkret fand DORA, dass KI den Durchsatz verbessert, oft aber auf Kosten der Stabilität, wenn das Fundament nicht solide ist. Der Report formuliert es so, dass die größten Erträge einer KI-Investition “not from the tools themselves, but from a strategic focus on the underlying organizational system” kommen.&lt;/p&gt;

&lt;p&gt;Liest man das gegen das Fünf-Metriken-Modell, wirkt dessen Aufbau plötzlich vorausschauend. Wenn KI den Durchsatz hebt, während schwache Fundamente diese Geschwindigkeit in Defekte verwandeln, dann sind genau die beiden Instabilitätsverhältnisse die Metriken, die den Schaden auffangen — und eine davon, die Deployment Rework Rate, existierte vor zwei Jahren noch nicht auf Ihrem Dashboard. Ein Team, das mit KI schneller liefert und nur vier Metriken verfolgt, hat genau die Hälfte des Bildes instrumentiert, die garantiert gut aussieht.&lt;/p&gt;

&lt;p&gt;DORAs begleitendes &lt;strong&gt;AI Capabilities Model&lt;/strong&gt; von Ende 2025 benennt sieben Fähigkeiten, die den Nutzen von KI verstärken, darunter starke Versionsverwaltungspraktiken, Arbeit in kleinen Losgrößen, eine hochwertige interne Plattform, KI-zugängliche interne Daten sowie eine klare und kommunizierte KI-Haltung. Drei davon sind gewöhnliche Delivery-Hygiene, die KI um ein Jahrzehnt vorausgeht. Genau das ist der Punkt.&lt;/p&gt;

&lt;p&gt;DORAs Folgearbeiten aus 2026 verschärfen die Warnung. Die Analyse zu den &lt;a href="https://dora.dev/insights/balancing-ai-tensions/" rel="noopener noreferrer"&gt;KI-Spannungen&lt;/a&gt; vom März 2026 beschreibt die versteckten Kosten, die mit schnellerer Codegenerierung einhergehen: Prüfaufwand, Kompetenzverlust und Integrationsreibung. Der aktuelle Report &lt;a href="https://dora.dev/research/publications/" rel="noopener noreferrer"&gt;ROI of AI-assisted Software Development&lt;/a&gt; ist um dieselbe Realität herum gebaut und gibt Führungskräften einen Rahmen für den anfänglichen “productivity dip” einer Einführung. Nichts davon taucht im Durchsatz auf. Alles davon taucht in der Nacharbeit auf.&lt;/p&gt;

&lt;h2&gt;
  
  
  Eine praktische Checkliste
&lt;/h2&gt;

&lt;p&gt;Wenn Sie Ihr DORA-Setup modernisieren wollen, grob nach Wirkung sortiert:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Zählen Sie Ihre Kacheln.&lt;/strong&gt; Sind es vier, fehlt die Deployment Rework Rate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prüfen Sie, was Ihre Recovery-Metrik speist.&lt;/strong&gt; Enthält sie Vorfälle, die nicht von einem Deployment stammen, ist sie nicht die Failed Deployment Recovery Time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verlegen Sie den Start der Lead Time auf den ersten Commit.&lt;/strong&gt; Beginnt sie beim Merge, verstecken Sie Ihre Review-Warteschlange.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ergänzen Sie drei Werte am Deployment-Datensatz&lt;/strong&gt; : &lt;code&gt;planned&lt;/code&gt;, &lt;code&gt;hotfix&lt;/code&gt;, &lt;code&gt;rollback&lt;/code&gt;. Beide Instabilitätsmetriken fallen daraus ab.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Berichten Sie Mediane — und n.&lt;/strong&gt; Ein p50 ohne Stichprobengröße ist ein Gerücht.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Beschränken Sie sich auf einen Service.&lt;/strong&gt; Über die Organisation gemischte Zahlen sind für Folien, nicht für Entscheidungen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nehmen Sie sie aus Mitarbeitergesprächen heraus.&lt;/strong&gt; Hängen sie an individuellen Ergebnissen, ist alles Obige vergeudet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Koppeln Sie jede Metrik an ein Gespräch.&lt;/strong&gt; DORAs eigene Empfehlung ist, dass die Verbesserung aus der Diskussion über Engpässe kommt, nicht aus dem Dashboard.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Was bleibt
&lt;/h2&gt;

&lt;p&gt;Streicht man die Versionsänderungen, steht DORAs zentrale Erkenntnis von 2015 unverändert — und sie ist weiterhin der Grund, warum diese Metriken zählen: &lt;strong&gt;Geschwindigkeit und Stabilität sind kein Zielkonflikt.&lt;/strong&gt; Teams, die gut sind, sind es über alle fünf hinweg. Teams, die schlecht sind, sind es über alle fünf hinweg. Die Metriken korrelieren.&lt;/p&gt;

&lt;p&gt;Dave Farleys Formulierung, die DORA im eigenen Guide zitiert, ist die, die man sich merken sollte: “the real trade-off, over long periods of time, is between better software faster and worse software slower.”&lt;/p&gt;

&lt;p&gt;Die fünf Metriken sind ein Kompass dafür, mehr nicht. Sie zeigen Ihnen, wo Ihr Liefersystem eingeschränkt ist. Sie sagen Ihnen nicht, wen Sie befördern sollen, welches Team das beste ist oder ob sich Ihre KI-Einführung gelohnt hat — und jeder Fehlermodus in diesem Artikel entsteht daraus, ihnen eine Frage zu stellen, für die sie nie gebaut wurden.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Weiterlesen:&lt;/strong&gt; Wenn Sie das Liefersystem bauen, das diese Metriken messen, beginnen Sie mit &lt;a href="https://www.alekseialeinikov.com/de/blog/topics/devops/platform-engineering-auf-kubernetes-2026" rel="noopener noreferrer"&gt;Platform Engineering auf Kubernetes&lt;/a&gt; und &lt;a href="https://www.alekseialeinikov.com/de/blog/topics/devops/gitops-mit-argo-cd-automatisierte-kubernetes-deployments-2026" rel="noopener noreferrer"&gt;GitOps mit Argo CD&lt;/a&gt;. Für die Pipeline selbst siehe das &lt;a href="https://www.alekseialeinikov.com/de/blog/topics/devops/sichere-gitlab-cicd-pipelines-hardening-playbook-2026" rel="noopener noreferrer"&gt;Hardening-Playbook für sichere GitLab-CI/CD-Pipelines&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quellen:&lt;/strong&gt; Alle Fakten in diesem Artikel stammen aus DORAs eigenen Publikationen — dem &lt;a href="https://dora.dev/guides/dora-metrics-four-keys/" rel="noopener noreferrer"&gt;Guide zu den Software-Delivery-Performance-Metriken&lt;/a&gt;, der &lt;a href="https://dora.dev/insights/dora-metrics-history/" rel="noopener noreferrer"&gt;Historie der DORA-Metriken&lt;/a&gt;, dem &lt;a href="https://dora.dev/insights/dora-2025-year-in-review/" rel="noopener noreferrer"&gt;Jahresrückblick 2025&lt;/a&gt; und der &lt;a href="https://dora.dev/research/2025/dora-report/" rel="noopener noreferrer"&gt;Übersicht zum Report 2025&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ursprünglich veröffentlicht auf &lt;a href="https://www.alekseialeinikov.com/de/blog/topics/devops/dora-metriken-2026-warum-aus-vier-fuenf-wurden" rel="noopener noreferrer"&gt;alekseialeinikov.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>dorametriken</category>
      <category>devopsmetriken</category>
      <category>softwaredeliveryperf</category>
      <category>deploymentfrequenz</category>
    </item>
    <item>
      <title>DORA Metrics in 2026: Why Four Became Five (and What Most Dashboards Still Get Wrong)</title>
      <dc:creator>Aleksei Aleinikov</dc:creator>
      <pubDate>Wed, 19 Aug 2026 12:00:00 +0000</pubDate>
      <link>https://dev.to/aleksei_aleinikov/dora-metrics-in-2026-why-four-became-five-and-what-most-dashboards-still-get-wrong-47bi</link>
      <guid>https://dev.to/aleksei_aleinikov/dora-metrics-in-2026-why-four-became-five-and-what-most-dashboards-still-get-wrong-47bi</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6kw90p8zvo5hyzhiutso.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6kw90p8zvo5hyzhiutso.webp" alt="DORA Metrics in 2026: Why Four Became Five (and What Most Dashboards Still Get Wrong)" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open any engineering dashboard that claims to track DORA and you will almost certainly see four tiles: deployment frequency, lead time, change failure rate, and MTTR.&lt;/p&gt;

&lt;p&gt;Three of those four labels are out of date, and the set itself is incomplete. DORA moved to &lt;strong&gt;five&lt;/strong&gt; software delivery metrics in its 2024 research, renamed one of them back in 2023, and moved another into a category most teams still get wrong. In its &lt;a href="https://dora.dev/insights/dora-2025-year-in-review/" rel="noopener noreferrer"&gt;2025 year in review&lt;/a&gt;, DORA stated it plainly: “We have also officially evolved the four software delivery performance metrics into five metrics.”&lt;/p&gt;

&lt;p&gt;This is not pedantry about naming. The changes encode findings that directly affect how you should read your own numbers — and one of them exists specifically because teams were measuring the wrong kind of failure.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Five Metrics, As They Stand Now
&lt;/h2&gt;

&lt;p&gt;DORA groups the five metrics into two factors: &lt;strong&gt;throughput&lt;/strong&gt; and &lt;strong&gt;instability&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Throughput — how changes move through the system
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;What it measures&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Change lead time&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Time from a change being committed to version control until it is deployed to production&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deployment frequency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;How often application changes are deployed, or the time between deployments&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Failed deployment recovery time&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;How long it takes to recover from a deployment that failed and required immediate intervention&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Instability — how well those deployments go
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;What it measures&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Change fail rate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The ratio of deployments that require immediate intervention — a rollback or a hotfix&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deployment rework rate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The ratio of deployments that are unplanned, happening as a result of a production incident&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two things in that table surprise people who learned the four keys years ago.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recovery time is under throughput.&lt;/strong&gt; For a decade it lived on the stability side, as the counterweight to speed. It is now grouped with the flow measures. The logic holds up once you look at the shape of the numbers: instability is expressed as &lt;em&gt;ratios&lt;/em&gt; — what proportion of your deployments go badly — while throughput covers the &lt;em&gt;time and count&lt;/em&gt; measures of changes moving to production. Recovering from a failed deployment is itself a change being pushed to production, just under maximum pressure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;There is a metric most teams have never recorded.&lt;/strong&gt; Deployment rework rate is the newcomer, and its origin story is the most interesting part of the 2024 research.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a Fifth Metric Was Needed
&lt;/h2&gt;

&lt;p&gt;DORA’s researchers noticed that change fail rate was quietly doing two jobs. It was meant to capture how often deployments go wrong, but teams were also treating it as a proxy for &lt;strong&gt;how much rework the team ends up doing&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Those are not the same thing, and conflating them hides a real failure mode. A team can have a respectable change fail rate while a large share of its deployment volume is unplanned work generated by incidents. On a four-metric dashboard that team looks fine. In reality a growing fraction of its capacity is being consumed by fixing production rather than delivering anything new.&lt;/p&gt;

&lt;p&gt;Deployment rework rate separates the two. Change fail rate asks &lt;em&gt;did this deployment break something?&lt;/em&gt; Rework rate asks &lt;em&gt;was this deployment only necessary because something was already broken?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you have ever watched a team’s deployment frequency climb while nobody could name a single new feature that shipped, you have seen the gap that this metric fills.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmxgax403wy6c1r21i92l.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmxgax403wy6c1r21i92l.webp" alt="The five DORA metrics grouped into throughput (change lead time, deployment frequency, failed deployment recovery time) and instability (change fail rate, deployment rework rate), showing that recovery time moved into throughput and rework rate was added in 2024" width="800" height="480"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Five metrics, two factors. Recovery time moved into throughput; rework rate is the 2024 addition.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  The Renaming That Fixed a Real Measurement Bug
&lt;/h2&gt;

&lt;p&gt;Before the count changed, the definitions did. In 2023, DORA renamed the metric long known as &lt;strong&gt;MTTR&lt;/strong&gt; or &lt;strong&gt;time to restore service&lt;/strong&gt; to &lt;strong&gt;failed deployment recovery time&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The reasoning was precise. The old definitions did not distinguish between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a failure caused by a change you deployed, and&lt;/li&gt;
&lt;li&gt;a failure caused by something else entirely — a cloud region going down, a provider outage, a data centre problem.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those belong to different systems. The first is a property of your delivery process; the second is a property of your infrastructure and your luck. Averaging them together produced a number that moved for reasons unrelated to how the team worked, which is exactly what you do not want from a delivery metric. Narrowing the definition to &lt;em&gt;impairments caused by a change to production&lt;/em&gt; aligned it statistically with the other delivery metrics.&lt;/p&gt;

&lt;p&gt;The practical consequence: &lt;strong&gt;if your dashboard’s “MTTR” tile is fed by every incident in your incident tracker, it is not the DORA metric.&lt;/strong&gt; It is a mix of two different signals, and you cannot act on it cleanly.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Myth of “Reliability, the Fifth Metric”
&lt;/h2&gt;

&lt;p&gt;You will still find articles, decks, and vendor pages calling reliability the fifth DORA metric. That framing came from DORA’s own 2021 report — and DORA has since corrected it.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://dora.dev/insights/dora-metrics-history/" rel="noopener noreferrer"&gt;history of the metrics&lt;/a&gt; states that the 2021 report “inaccurately called the ‘reliability’ metric the ‘fifth metric’ when, in reality, ‘reliability’ is more a measure of operational performance than a measure of software delivery performance.”&lt;/p&gt;

&lt;p&gt;The distinction matters. Reliability, measured through service level objectives, is about how well the software behaves for users once it is running. Software delivery performance is about how well changes get to production. Both belong in the DORA Core model, but they are different constructs and they answer to different work.&lt;/p&gt;

&lt;p&gt;Note also what this means for anyone auditing their own documentation: the four-versus-five confusion is not just an industry lag. Even DORA’s Core model, which is deliberately conservative and — in DORA’s words — “deliberately trails the research”, still presents the older four-key grouping. The guides and the current research are ahead of it. That is by design, but it is a good reason to check the date on whatever you are reading.&lt;/p&gt;
&lt;h2&gt;
  
  
  Measuring Them Without Buying a Platform
&lt;/h2&gt;

&lt;p&gt;You do not need a vendor to get started. Four of the five come out of deployment events; the fifth needs a small amount of human input that no API can infer for you.&lt;/p&gt;

&lt;p&gt;Start from &lt;strong&gt;deployments&lt;/strong&gt; , not pull requests. This is the single most common instrumentation mistake, and it makes lead time look far better than it is.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Change lead time from GitHub deployment events.
# Key detail: measure from the FIRST commit in the change, not from PR merge.
&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;statistics&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timezone&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;lead_time_seconds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;deployment_finished_at&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;commit_authored_at&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

    &lt;span class="nf"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;deployment_finished_at&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;commit_authored_at&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;total_seconds&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;summarise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;samples&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Report the median. Delivery distributions have long tails that a mean will hide.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;samples&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;p50&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;statistics&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;median&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;samples&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;

        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;p90&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;statistics&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;quantiles&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;samples&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;samples&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;samples&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;

        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;samples&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;

    &lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;p&gt;Why the first commit and not the merge? Because the review queue is part of your lead time. A team with a two-hour pipeline and a four-day review backlog does not have a two-hour lead time — and measuring from merge is precisely how that four-day backlog stays invisible to everyone above the team.&lt;/p&gt;

&lt;p&gt;For the remaining metrics, the definitions translate into simple ratios over a window:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;deployment_frequency = successful_production_deployments / window
change_fail_rate = deployments_needing_immediate_intervention / total_deployments
deployment_rework_rate = unplanned_deployments_caused_by_incident / total_deployments
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;p&gt;The input your Git host cannot give you is which deployments needed &lt;strong&gt;immediate intervention&lt;/strong&gt; and which were &lt;strong&gt;unplanned incident work&lt;/strong&gt;. That has to come from somewhere your team already records reality — an incident tracker, a rollback label, a deployment annotation. A pragmatic starting point is a single required field on every production deployment: &lt;code&gt;planned&lt;/code&gt;, &lt;code&gt;hotfix&lt;/code&gt;, or &lt;code&gt;rollback&lt;/code&gt;. Three values, filled in at deploy time, are enough to compute both instability metrics.&lt;/p&gt;

&lt;p&gt;DORA is explicit that this is where teams over-invest. Building integrations across every system to get precise numbers “might not be worth the initial investment” — starting with conversations, or with the &lt;a href="https://dora.dev/quickcheck/" rel="noopener noreferrer"&gt;DORA Quick Check&lt;/a&gt;, often produces improvement faster than a perfect pipeline of telemetry does.&lt;/p&gt;

&lt;p&gt;If you want the fastest possible confirmation that the fifth metric is real rather than a documentation change: DORA &lt;a href="https://dora.dev/insights/quickcheck-updates/" rel="noopener noreferrer"&gt;updated the Quick Check in April 2026&lt;/a&gt; to include deployment rework rate, along with refreshed industry benchmarks. The tool asks you for it now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where These Numbers Break
&lt;/h2&gt;

&lt;p&gt;Every DORA metric has a trivial gaming strategy. This is not a flaw in the metrics; it is what happens to any measure that becomes a target. DORA lists “setting metrics as a goal” as its first common pitfall and cites Goodhart’s law by name.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F52in9uvrfgvyxoj64xqc.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F52in9uvrfgvyxoj64xqc.webp" alt="Each of the five DORA metrics paired with the specific way teams game it when it becomes a performance target: splitting commits, measuring from merge, excluding hard incidents, not recording failures, and reclassifying hotfixes as planned work" width="799" height="493"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Each metric has an obvious way to fake it. All five are faked the same way: by changing the recording, not the system.&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;How it gets gamed&lt;/th&gt;
&lt;th&gt;What you actually see&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Deployment frequency&lt;/td&gt;
&lt;td&gt;Split one change into six deployments&lt;/td&gt;
&lt;td&gt;The number triples, nothing ships faster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Change lead time&lt;/td&gt;
&lt;td&gt;Measure from PR merge instead of first commit&lt;/td&gt;
&lt;td&gt;The review backlog disappears from the data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Failed deployment recovery time&lt;/td&gt;
&lt;td&gt;Declare recovery when the rollback finishes, not when users are served&lt;/td&gt;
&lt;td&gt;Fast recovery, unhappy users&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Change fail rate&lt;/td&gt;
&lt;td&gt;Stop recording small failures as failures&lt;/td&gt;
&lt;td&gt;A world-class number and a worsening system&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deployment rework rate&lt;/td&gt;
&lt;td&gt;File the hotfix as planned work&lt;/td&gt;
&lt;td&gt;Rework becomes invisible&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Notice the pattern: &lt;strong&gt;none of these change the system, all of them change the recording.&lt;/strong&gt; That is the tell. If a metric improves and nobody can point to a practice that changed, the recording changed.&lt;/p&gt;

&lt;p&gt;The other pitfalls DORA calls out are worth knowing because they show up in almost every rollout:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One metric to rule them all.&lt;/strong&gt; Complex systems need several measures held in tension. A single number always gets optimised at the expense of something unmeasured.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Disparate comparisons.&lt;/strong&gt; These metrics apply to &lt;em&gt;one application or service&lt;/em&gt;. Comparing a mobile app to a mainframe system, or blending numbers across an entire org, produces something that looks like a leaderboard and means nothing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Siloed ownership.&lt;/strong&gt; If only the ops team owns stability and only dev owns throughput, you have built a finger-pointing machine. The five are meant to be shared.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Competing.&lt;/strong&gt; The goal is to improve against your own past, not to beat another team.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Industry as a shield.&lt;/strong&gt; “We’re regulated, so we can’t deploy more often” is usually a claim about a process nobody has revisited, not about the regulation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The deepest version of this problem is using DORA metrics on individuals. The metrics are validated as &lt;em&gt;team-level&lt;/em&gt; predictors of organisational performance and employee well-being. Applied to a person, they measure that person’s position in a queue.&lt;/p&gt;

&lt;h3&gt;
  
  
  The 2026 version of this mistake: tokenmaxxing
&lt;/h3&gt;

&lt;p&gt;The newest example is not a DORA metric at all, which is what makes it useful.&lt;/p&gt;

&lt;p&gt;In June 2026 DORA published on a trend it calls &lt;a href="https://dora.dev/insights/finding-balance-in-the-era-of-tokenmaxxing/" rel="noopener noreferrer"&gt;tokenmaxxing&lt;/a&gt;: organisations tracking and rewarding raw AI token consumption through internal leaderboards to spur adoption. DORA’s read is balanced — the gamification can genuinely nudge AI-hesitant developers into experimenting — but its conclusion is blunt: treating token spend as a performance indicator is a dangerous trap.&lt;/p&gt;

&lt;p&gt;It is the same failure as putting deployment frequency in a performance review, one abstraction layer up. Token spend measures activity. It is trivially maximised by generating more, verifying less, and pasting bigger contexts. If your organisation has learned not to reward raw commit counts, it already knows why this one ends badly.&lt;/p&gt;

&lt;h2&gt;
  
  
  What AI Changed
&lt;/h2&gt;

&lt;p&gt;DORA renamed its annual report in 2025 from &lt;em&gt;Accelerate State of DevOps&lt;/em&gt; to &lt;em&gt;State of AI-assisted Software Development&lt;/em&gt;, and the finding that headlines that research is a useful corrective to both the hype and the backlash.&lt;/p&gt;

&lt;p&gt;AI is framed as an &lt;strong&gt;amplifier&lt;/strong&gt; : it magnifies an organisation’s existing strengths and weaknesses. Concretely, DORA found that AI improves throughput but often at the cost of stability when the underlying foundation is not solid. The report’s own framing is that the greatest returns on AI investment come “not from the tools themselves, but from a strategic focus on the underlying organizational system.”&lt;/p&gt;

&lt;p&gt;Read that against the five-metric model and the design suddenly looks prescient. If AI raises throughput while weak foundations turn that speed into defects, then the metrics that catch the damage are exactly the two instability ratios — and one of those, deployment rework rate, did not exist on your dashboard two years ago. A team shipping faster with AI and tracking only four metrics has instrumented the half of the picture that is guaranteed to look good.&lt;/p&gt;

&lt;p&gt;DORA’s companion &lt;strong&gt;AI Capabilities Model&lt;/strong&gt; , published at the end of 2025, names seven capabilities that amplify AI’s benefits, including strong version control practices, working in small batches, a quality internal platform, AI-accessible internal data, and a clear and communicated AI stance. Three of those are ordinary delivery hygiene that predates AI by a decade. That is the point.&lt;/p&gt;

&lt;p&gt;DORA’s 2026 follow-up work sharpens the warning. Its March 2026 analysis of &lt;a href="https://dora.dev/insights/balancing-ai-tensions/" rel="noopener noreferrer"&gt;AI tensions&lt;/a&gt; describes the hidden taxes that arrive with faster code generation: verification overhead, skill degradation, and integration friction. The current &lt;a href="https://dora.dev/research/publications/" rel="noopener noreferrer"&gt;ROI of AI-assisted Software Development&lt;/a&gt; report is built around the same reality, giving leaders a framework for the initial “productivity dip” of a rollout. None of that shows up in throughput. All of it shows up in rework.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Practical Checklist
&lt;/h2&gt;

&lt;p&gt;If you want to modernise your DORA setup, in rough order of payoff:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Count your tiles.&lt;/strong&gt; If there are four, you are missing deployment rework rate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check what feeds your recovery metric.&lt;/strong&gt; If it includes incidents not caused by a deployment, it is not failed deployment recovery time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Move lead time’s start to the first commit.&lt;/strong&gt; If it starts at merge, you are hiding your review queue.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add three values to your deploy record&lt;/strong&gt; : &lt;code&gt;planned&lt;/code&gt;, &lt;code&gt;hotfix&lt;/code&gt;, &lt;code&gt;rollback&lt;/code&gt;. Both instability metrics fall out of that.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Report medians, and report n.&lt;/strong&gt; A p50 with no sample size is a rumour.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scope to one service.&lt;/strong&gt; Blended org-wide numbers are for slides, not for decisions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remove them from performance reviews.&lt;/strong&gt; If they are attached to individual outcomes, everything above is wasted.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pair every metric with a conversation.&lt;/strong&gt; DORA’s own guidance is that the improvement comes from the discussion about constraints, not from the dashboard.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Part Worth Keeping
&lt;/h2&gt;

&lt;p&gt;Strip away the version changes and DORA’s central finding from 2015 still stands, and it is still the reason these metrics matter: &lt;strong&gt;speed and stability are not a trade-off.&lt;/strong&gt; Teams that do well do well across all five. Teams that do badly do badly across all five. The metrics correlate.&lt;/p&gt;

&lt;p&gt;Dave Farley’s formulation, quoted in DORA’s own guide, is the one to remember: “the real trade-off, over long periods of time, is between better software faster and worse software slower.”&lt;/p&gt;

&lt;p&gt;The five metrics are a compass for that, and nothing more. They will tell you where your delivery system is constrained. They will not tell you who to promote, which team is best, or whether your AI rollout was worth it — and every failure mode in this article comes from asking them a question they were never designed to answer.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Related reading:&lt;/strong&gt; if you are building the delivery system these metrics measure, start with &lt;a href="https://www.alekseialeinikov.com/en/blog/topics/devops/platform-engineering-on-kubernetes-2026" rel="noopener noreferrer"&gt;platform engineering on Kubernetes&lt;/a&gt; and &lt;a href="https://www.alekseialeinikov.com/en/blog/topics/devops/gitops-argo-cd-automated-kubernetes-deployments-2026" rel="noopener noreferrer"&gt;GitOps with Argo CD&lt;/a&gt;. For the pipeline itself, see the &lt;a href="https://www.alekseialeinikov.com/en/blog/topics/devops/secure-gitlab-cicd-hardening-playbook-2026" rel="noopener noreferrer"&gt;secure GitLab CI/CD hardening playbook&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sources:&lt;/strong&gt; all facts in this article come from DORA’s own publications — the &lt;a href="https://dora.dev/guides/dora-metrics-four-keys/" rel="noopener noreferrer"&gt;software delivery performance metrics guide&lt;/a&gt;, the &lt;a href="https://dora.dev/insights/dora-metrics-history/" rel="noopener noreferrer"&gt;history of DORA’s metrics&lt;/a&gt;, the &lt;a href="https://dora.dev/insights/dora-2025-year-in-review/" rel="noopener noreferrer"&gt;2025 year in review&lt;/a&gt;, and the &lt;a href="https://dora.dev/research/2025/dora-report/" rel="noopener noreferrer"&gt;2025 report overview&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.alekseialeinikov.com/en/blog/topics/devops/dora-metrics-2026-why-four-became-five" rel="noopener noreferrer"&gt;alekseialeinikov.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>dorametrics</category>
      <category>devopsmetrics</category>
      <category>softwaredeliveryperf</category>
      <category>deploymentfrequency</category>
    </item>
  </channel>
</rss>
