Zum Inhalt springen

Warum isolierte Cluster für Agenten

PaaSbox ist auf einer Idee über Agenten und DevOps gebaut: Eine Änderung wird in einem Cluster getestet, den es nur für den Test gibt, und jede Stage jeder App läuft auf einem eigenen kleinen Cluster. Diese Seite erklärt, warum, was das kostet und wogegen es nicht schützt.

Ein großer, geteilter ClusterKleine Cluster, einer pro Stage, App und Test
Ein Upgrade, das fehlschlägttrifft jede Stage und App darauftrifft eine Stage einer App
Ein Test, der entgleistkonkurriert mit der Produktion um dieselben Nodeshat einen Server für sich und wird gelöscht
Eine clusterweite Änderung (eine CRD, ein Operator, ein Standardwert)gilt sofort für allegilt für einen Cluster
Kubeconfigs und API-Bereichedie eines Clusters, aufgeteilt über Namespaces und RBACdie eigenen jedes Clusters
Zeitpunkt der Upgradesein Fenster für alleein Kanal und ein Fenster pro Cluster
Ein Server, der ausfälltdie anderen Server machen weiterdieser Cluster ist weg, bis er wiederhergestellt oder neu aufgebaut ist
Upgrades, die einzuplanen sindein Clustereiner pro Cluster

Testen in einem Cluster, der für den Test gebaut ist

Abschnitt betitelt „Testen in einem Cluster, der für den Test gebaut ist“

Die Änderung eines Agenten kann auf eine Weise falsch sein, die ein Test in einem geteilten Cluster nicht einfangen kann: eine CRD, die durch eine ältere Version ersetzt wird, ein Webhook, der jeden Pod ablehnt, ein Job, der die Platte füllt. In einem Cluster, der für den Test gebaut ist, macht ein solcher Fehler nur diesen Cluster kaputt, und der Cluster wird danach gelöscht.

Ein neuer Cluster beginnt außerdem mit nichts als deinen Dateien. Kommt die App dort hoch, sind die Dateien vollständig; braucht sie etwas, das anderswo von Hand eingerichtet wurde, zeigt es der Test.

Das funktioniert nur, wenn ein Cluster wenig Zeit kostet. Im Labor vom 2026-10-10 war ein Cluster 2 Minuten 46 Sekunden nach der Anfrage bereit, 69 Sekunden davon für das Kopieren des Node-Images in ein Projekt, das noch keines hatte, und ein Löschen dauerte 14 Sekunden, seine Volumes eingeschlossen, ohne dass eine Ressource mit seinem Label im Projekt blieb. In Arbeit Die REST-API und die MCP-Tools, mit denen ein Agent diese Schleife selbst fährt, sind gegen einen echten Cluster noch nicht gelaufen. Lernschritt 3 geht sie durch.

Eine Stage einer App bekommt einen Cluster mit einem Node für sich: eigenen Server, eigenes privates Netz, eigene Firewall, eigenen Namen der Kubernetes-API, eigene Kubeconfigs und Snapshots. Daraus folgen drei Dinge.

  • Ein Fehler bleibt klein. Ein Upgrade, eine Wiederherstellung oder ein entgleister Test trifft eine Stage einer App. Eine Wiederherstellung an Ort und Stelle setzt einen Cluster auf seinen Snapshot zurück, im Labor in 160 Sekunden, und kein anderer Cluster ist Teil der Operation.
  • Staging geht voran. Jeder Cluster hat seinen eigenen Kanal und sein eigenes Wartungsfenster. Staging kann jedes Release auf early bekommen und geprüft werden, während die Produktion auf stable auf ihr eigenes Fenster wartet.
  • Der Zugriff folgt der Stage. Eine Kubeconfig für Staging öffnet Staging. Die API der Produktion kann für weniger Adressen offen sein als die eines Testclusters.

Kubernetes macht diese Umgebungen wiederholbar: eine App mit ihrer Datenbank, ihren Zertifikaten und ihrer Konfiguration, jedes Mal aus denselben Dateien angelegt. Geplant ownpaas soll dieselben Umgebungen in ein lokales Labor auf deinem eigenen Rechner bringen, bevor ein Hetzner-Server beteiligt ist.

  • Geld. Jeder Cluster kostet 29 € inkl. MwSt. im Monat, dazu seinen Server bei Hetzner. Ein Cluster zählt ab dem Moment, in dem er zum ersten Mal bereit ist, bis du ihn löschst. In Arbeit Die Abrechnung über Paddle wird gerade gebaut; so wie sie geschrieben ist, wird ein Cluster, der zu anderen dazukommt, sofort anteilig berechnet, und einer, der wegfällt, für den Rest des Zeitraums gutgeschrieben: Ein Wegwerf-Cluster neben einem Cluster, den du behältst, kostet seinen Anteil am Monat. Der letzte Cluster eines Teams wird nicht gutgeschrieben: Das Abonnement läuft bis zum Ende des schon bezahlten Zeitraums, und ein Cluster, den du vorher anlegst, nutzt es ohne neue Berechnung. Nach diesem Ende startet der nächste Cluster des Teams ein neues Abonnement im Checkout des Portals, und das kann ein Agent über die API nicht. Den Server rechnet Hetzner stundenweise ab, zu seinem eigenen Preis. Kosten und Abrechnung hat die Einzelheiten.
  • Eine Grenze. Ein Team kann 10 Cluster gleichzeitig haben, und Staging, Produktion und jeder laufende Test zählen dazu: Zwei Apps mit Staging und Produktion lassen sechs für Tests. Frag nach einer höheren Grenze, wenn deine Tests sie brauchen.
  • Upgrades, auf die du achten musst. Jeder Cluster bekommt jedes Release, und jedes Upgrade startet seinen Node neu: Im Labor war die Kubernetes-API 34 Sekunden lang nicht erreichbar. Mit einem Cluster pro Stage und App gibt es mehr Upgrades einzuplanen und zu prüfen. Das Rezept Ein Agent upgradet zuerst Staging gibt das an einen Agenten ab.
  • Einen ausfallenden Server. Ein Cluster ist ein Server. Fällt er aus, ist die Stage darauf weg, bis der Server zurück ist, ein Snapshot wiederhergestellt oder ein neuer Cluster aufgebaut ist. Es gibt kein SLA, und Cluster mit drei Servern sind Geplant.
  • Einen Schlüssel, der zu weit reicht. Die Scopes eines API-Schlüssels gelten für jeden Cluster des Teams: Ein Schlüssel, der einen Testcluster löschen darf, darf auch die Produktion löschen. Der eingetippte Clustername verhindert eine Verwechslung, keine Entscheidung. Halte die Produktion in einem Team, zu dem der Schlüssel nicht gehört. Leitplanken für Agenten listet, was jede Grenze aufhält.
  • Ein geteiltes Hetzner-Projekt. Der Cloud Controller in einem Cluster hält ein Hetzner-Token, und ein Hetzner-Token öffnet sein ganzes Projekt. Cluster in einem Projekt sind in Kubernetes getrennt, nicht bei Hetzner: Gib der Produktion ein eigenes Projekt und den Testclustern ein weiteres.
  • Fehlende Daten. Ein Wegwerf-Cluster hat die Daten, die dein Test hineinlegt, nicht die der Produktion. Ein Snapshot hält den Zustand des Clusters, nicht den Inhalt deiner Volumes; eine Datenbank braucht eigene Backups.