Kubernetes-Cluster und Registries
Manche Arbeit braucht mehr als eine Maschine: ein auf Kubernetes ausgerolltes Service, ein an einem Ort gebautes und an einem anderen ausgeführtes Image, eine Cloud-API, gegen die man testet. Bromure Agentic Coding kann diese Infrastruktur für Sie betreiben, auf diesem Mac, neben Ihren Maschinen (Arbeitsbereiche, im Einstellungseditor):
- Ein Kubernetes-Cluster ist eine Menge von Knoten-VMs, die k3s ausführen, mit optionalem replizierten Speicher, einem Load Balancer, einem Ingress-Controller und lokalen Cloud-Emulatoren. Die Maschinen, die Sie zulassen, bekommen es als Kontext in
~/.kube/config. - Eine Registry ist eine private Docker-Registry in ihrer eigenen kleinen VM. Maschinen, die Sie zulassen, können dorthin pushen; jedes Cluster kann daraus pullen.
Beide sind geteilte Ressourcen: ein Cluster oder eine Registry dient mehreren Maschinen, und ihre Agenten erfahren davon über den Infrastruktur-MCP-Server.
Hinweis: Verwechseln Sie diese Cluster nicht mit den Kubernetes-Anmeldedaten im Bereich Zugangsdaten einer Maschine. Die importieren Kontexte für Cluster, die anderswo existieren (EKS, GKE, ein Cluster bei der Arbeit), und vermitteln deren Anmeldedaten auf dem Draht. Die Cluster in diesem Kapitel sind VMs, die Bromure auf diesem Mac erstellt und ausführt.
Wo Sie sie finden
- Arbeitsbereiche › Infrastruktur › Kubernetes-Cluster erstellen… und Registry erstellen… öffnen die Erstellungsblätter. Ist ein Spiegelfenster eines fernen Macs vorn, erstellen diese Einträge das Cluster oder die Registry auf jenem Mac (siehe Remote-Zugriff).
- Sobald eines existiert, bekommt der Abschnitt Virtuelle Maschinen der Seitenleiste eine Liste Kubernetes und eine Liste Registries, jede mit einem +, um eine weitere zu erstellen. Eine Zeile zeigt einen Zustandspunkt, den Namen und einen einzeiligen Status; klicken Sie sie, um ihr Dashboard auf die Bühne zu bringen. Ihr ⋯-Menü bietet Starten, oder Neu starten und Stoppen, solange es läuft, Workspace-Zugriff… und Löschen….
Ein Cluster erstellen
Das Blatt Neues Cluster hat eine Seitenleiste mit sechs Bereichen — Allgemein, Knoten, Speicher, Netzwerk, Add-ons, Zugriff — wie der Einstellungseditor einer Maschine. Erstellen bleibt deaktiviert, bis das Blatt gültig ist; eine kurze Zeile daneben sagt, warum (zum Beispiel „Geben Sie dem Cluster einen Namen.“).
Allgemein
| Feld | Voreinstellung | Bedeutung |
|---|---|---|
| Name | Kube cluster | Hostnamen der Knoten, der kubeconfig-Kontext und der Ordner auf der Disk leiten sich alle davon ab: Knoten heißen k8s-<name>-1, -2, … |
| Mit Bromure starten | An | Das Cluster beim Start der App booten. |
Eine Zusammenfassung listet die Knoten, den Speicher, den Load Balancer und die Add-ons, die Sie gewählt haben.
Knoten
| Feld | Bereich | Voreinstellung |
|---|---|---|
| Knoten | 1–8 | 1 |
| vCPUs pro Knoten | 1–16 | 2 |
| Arbeitsspeicher pro Knoten | 2–64 GB | 4 GB |
Mit einem Knoten führt er Control Plane und Ihre Workloads zusammen aus. Mit mehr ist Knoten 1 die Control Plane (und führt weiterhin Workloads aus) und die anderen treten als Worker bei. Der Bereich zeigt das Gesamt-RAM und warnt „Das sind N GB der M GB dieses Macs — Arbeitsbereiche brauchen auch Platz.“, wenn das Cluster weniger als 4 GB für alles andere lassen würde.
Speicher
- Longhorn verteilter Speicher (standardmäßig an) — replizierte Block-Volumes, per iSCSI von einer dedizierten Datendisk pro Knoten bereitgestellt (standardmäßig 40 GB, 10–2000 GB). Die Disks sind sparse: nur geschriebene Blöcke brauchen Platz auf dem Mac. Longhorn hält bis zu drei Replikate, nie mehr als die Zahl der Knoten. Seine Storage Class ist
bromure-longhorn, die Voreinstellung des Clusters. Abgeschaltet bleibt nur die knotenlokalelocal-path-Klasse von k3s, die einen Pod an seinen Knoten bindet. - Synology NAS — persistente Volumes auf Ihrem NAS über Synologys CSI-Treiber. Füllen Sie DSM-Adresse, Port, HTTPS, DSM-Benutzer und DSM-Passwort aus, optional Volumes (zum Beispiel
/volume1, /volume3), Protokoll — iSCSI (Block-LUNs) oder SMB (geteilte Ordner) — und Dateisystem. Ohne genannte Volumes wählt DSM eines mit freiem Platz und die Klasse istbromure-synology; Volumes zu nennen gibt je eine Klasse (bromure-synology-volume1, …). Die erste Synology-Klasse wird die Voreinstellung des Clusters; Longhorn bleibt namentlich verfügbar. Das DSM-Konto braucht Storage-Manager-Rechte. Das Passwort wird verschlüsselt auf diesem Mac gespeichert und landet nur in den eigenen Secrets des Clusters.
Netzwerk
Load Balancer wählt, wie Services des Typs LoadBalancer eine Adresse bekommen:
| Auswahl | Verhalten |
|---|---|
| MetalLB, nur VM-Netz (Voreinstellung) | MetalLB auf Layer 2 verteilt Adressen aus dem VM-Netz. Zwanzig Adressen am oberen Ende des VM-Subnetzes werden dafür beim Einrichten des Clusters reserviert. Von den Maschinen und diesem Mac erreichbar; in Ihrem LAN wird nichts freigegeben. |
| Bromure LAN-Load-Balancer | Jeder Service-Port wird auf der LAN-Adresse dieses Macs veröffentlicht, und der Host leitet ihn ins Cluster weiter. Mit einem optionalen LAN-Adresspool (zum Beispiel 10.0.0.20-10.0.0.29, 10.0.0.32/28 oder eine Komma-Liste) bekommt jeder Service stattdessen seine eigene freie LAN-Adresse, für die der Mac im Netz antwortet (ARP), nach MetalLB-Art. Von Ihrem LAN, diesem Mac und den Maschinen erreichbar. |
| Keiner (nur NodePort) | LoadBalancer-Services bleiben ausstehend; nutzen Sie NodePort oder ClusterIP. |
Mit dem Bromure LAN-Load-Balancer ändern zwei Service-Annotationen die Voreinstellung je Service: bromure.io/scope: vm hält ihn privat (eine Adresse im VM-Netz, nur für die Maschinen und diesen Mac), und bromure.io/loadBalancerIP bittet um eine bestimmte Adresse.
Traefik Ingress-Controller (standardmäßig an) behält den mit k3s gelieferten Ingress. Mit dem LAN-Load-Balancer veröffentlicht er die Ports 80 und 443 auf diesem Mac.
Warnung: Der Bromure LAN-Load-Balancer macht Cluster-Services für jeden in Ihrem Netz erreichbar. Wählen Sie ihn bewusst; die MetalLB-Voreinstellung behält alles auf diesem Mac.
Add-ons
Lokale Cloud-Emulatoren aus der Open-Source-Familie floci, jeder ein LoadBalancer-Service auf eigenem Port, mit seinen Daten auf der Standard-Storage-Class des Clusters:
| Schalter | Port | Emuliert (unter anderem) |
|---|---|---|
| AWS-Emulator (floci) | 4566 | S3, DynamoDB, SQS, SNS, Lambda, API Gateway, Step Functions, EventBridge, Cognito |
| Azure-Emulator (floci-az) | 4577 | Blob-, Queue- und Table Storage, Cosmos DB, Key Vault, Service Bus, Event Hubs, Event Grid, Functions, Azure SQL, App Configuration |
| Google-Cloud-Emulator (floci-gcp) | 4588 | Cloud Storage, Pub/Sub, Firestore, Datastore, Secret Manager, Cloud KMS, Cloud Run, Cloud Functions, Cloud Tasks, Cloud SQL, BigQuery |
| Oracle-Cloud-Emulator (floci-oci) | 4599 | Object Storage, Queue, Streaming, Vault, KMS, Secrets, Functions, Identity, OKE |
Jeder aktivierte Emulator bekommt ein Feld Projekt-Version. Lassen Sie es leer (neueste Veröffentlichung), um beim Einrichten des Clusters die neueste Version von Docker Hub zu bekommen; tippen Sie einen Tag (2.1.0) oder eine vollständige Image-Referenz, um ihn festzunageln. Ist Docker Hub nicht erreichbar, wird der Tag latest genutzt. Dienste, die Container starten (Lambda, Cloud Run und dergleichen), nutzen das Docker des Knotens und sind Best Effort.
Zugriff
Welche Maschinen das Cluster bekommen:
- Alle Arbeitsbereiche, auch neue (Voreinstellung), oder
- Nur diese Arbeitsbereiche, mit einem Kästchen je Maschine. „Mindestens ein Arbeitsbereich muss den Zugriff behalten.“
Maschinen auf der Liste bekommen das Cluster in ihrer ~/.kube/config (der Kontext ist nach dem Cluster benannt) und sehen es über das Infrastruktur-MCP. Sie können das später im Dashboard ändern.
Klicken Sie Erstellen. Das Provisionieren dauert einige Minuten; der Tab Protokoll des Dashboards zeigt jeden Schritt.
Das Cluster-Dashboard
Der Header des Dashboards zeigt den Namen des Clusters, eine Phasen-Pille und eine Zusammenfassung (Knoten, vCPU und Speicher je Knoten, die k3s-Version, die Betriebszeit), mit Starten, oder Neu starten und Stoppen, und einem Menü Cluster-Aktionen: kubeconfig kopieren, Workspace-Zugriff…, Mit Bromure starten und Cluster löschen….
Sechs Tabs, mit einem Filterfeld für die Listen:
| Tab | Zeigt |
|---|---|
| Übersicht | Karten für Knoten, Pods, Arbeitsspeicher, Speicher und Load Balancer; eine Karte je Cloud-Emulator mit seinen Endpunkten, gruppiert als Von diesem Mac und dem LAN und Von den Arbeitsbereichen, eine einfügefertige Zeile, die CLI und SDKs jener Cloud darauf richtet, und die Test-Anmeldedaten, die er annimmt; die veröffentlichten Ports des Load Balancers (und die, die sich nicht binden ließen, mit dem Grund); die Knoten; Aktuelle Warnungen. |
| Workloads | Deployments und Pods, mit Bereitschaft und Neustarts. |
| Services | Services und ihre externen Adressen (Externe IP: ausstehend, bis eine zugewiesen ist). |
| Speicher | Longhorn-Kapazität und -Volumes, den Zustand des Synology-Treibers, und Volume-Claims. |
| Zugriff | Workspace-Zugriff — dieselbe Auswahl wie im Blatt. |
| Protokoll | Das Provisionierungs- und Lebenszyklus-Protokoll. |
Cluster löschen… „Stoppt jeden Knoten und löscht deren Disks, samt allen Longhorn-Volumes. Arbeitsbereiche verlieren das Cluster aus ihrer kubeconfig. Das lässt sich nicht widerrufen.“
Ein Cluster von einer Maschine nutzen
In einer zugelassenen Maschine funktioniert kubectl einfach: der Kontext des Clusters steht in ~/.kube/config, und kubectl spricht direkt über das VM-Netz mit dem Control-Plane-Knoten. Dieser Verkehr geht nicht durch den abfangenden Proxy des Hosts — Knotenadressen sind von den Proxy-Einstellungen der Maschine ausgenommen — er erscheint also nicht im Trace der Maschine.
Die Aktion kubeconfig kopieren gibt Ihnen eine eigenständige kubeconfig für Werkzeuge auf dem Mac selbst. Die Knoten-VMs sind auch mit der CLI erreichbar, zum Beispiel bromure-cli vm exec k8s-dev-1 -- kubectl get nodes (siehe CLI, API und MCP).
Registries
Eine Registry erstellen
Registry erstellen… öffnet ein Blatt: „Eine private Docker-Registry in ihrer eigenen VM: bauen Sie in einem Arbeitsbereich, pushen hierher, führen es in einem Cluster aus. Einfaches HTTP im VM-Netz; es verlässt diesen Mac nie.“
| Feld | Bereich | Voreinstellung |
|---|---|---|
| Name | — | registry |
| Mit Bromure starten | — | An |
| Arbeitsspeicher | 1–16 GB | 1 GB |
| Image-Speicher | 10–2000 GB | 40 GB |
| Push-Zugriff | Alle Arbeitsbereiche, auch neue / Nur diese Arbeitsbereiche | Alle |
Die Image-Disk ist sparse: nur gepushte Layer brauchen Platz. Jedes Cluster kann aus jeder Registry pullen; der Push-Zugriff ist je Maschine.
Das Registry-Dashboard
Der Header zeigt die Adresse der Registry (<ip>:5000), ihren Speicher und ihre Disk, Starten / Neu starten / Stoppen, und ein Menü mit Adresse kopieren, Workspace-Zugriff…, Mit Bromure starten und Registry löschen…. Tabs: Images (Karten für Repositories, Disk und Adresse, ein Schnipsel Aus einem Arbeitsbereich pushen, und die Liste der Images und Tags), Zugriff und Protokoll.
In einer Maschine mit Push-Zugriff traut Docker der Adresse der Registry schon, und $BROMURE_REGISTRY enthält sie (bei Zugriff auf mehrere Registries die der ersten), Sie können also gleich pushen:
docker build -t $BROMURE_REGISTRY/myapp:dev .
docker push $BROMURE_REGISTRY/myapp:dev
kubectl run myapp --image=$BROMURE_REGISTRY/myapp:dev
Cluster sind so eingerichtet, dass sie automatisch aus jeder Registry pullen; wird eine Registry erstellt, verschoben oder gelöscht, werden laufende Cluster aktualisiert. Solange eine Registry gestoppt ist, scheitern Pulls daraus wie bei jedem Registry-Ausfall.
Registry löschen… „Stoppt die Registry-VM und löscht jedes Image, das sie hält. Arbeitsbereiche und Cluster trauen ihrer Adresse nicht mehr. Das lässt sich nicht widerrufen.“
Agenten und das Infrastruktur-MCP
Die Agenten jeder Maschine bekommen einen MCP-Server bromure-infrastructure (vsock-Port 5834), begrenzt auf die Cluster und Registries, die diese Maschine nutzen darf. Seine Werkzeuge:
| Werkzeug | Was es tut |
|---|---|
infrastructure_overview | Alles, was dieser Maschine zur Verfügung steht — Cluster (Kontextnamen, Zustand, Knoten, Storage Classes, Load Balancer, Ingress) und Registries (Adresse, wie man pusht) — mit Nutzungshinweisen. |
cluster_status | Live-Detail zu einem Cluster: Phase, Knoten, Pods, Services und ihre externen Adressen, Speicher, Warnungen, letzte Protokollzeilen. |
cluster_create | Ein Cluster erstellen, mit denselben Optionen wie im Blatt. |
cluster_start | Ein gestopptes Cluster booten. |
registry_status | Eine Registry: Adresse, ob sie antwortet, ihre Images, Plattennutzung. |
registry_create | Eine Registry erstellen. |
registry_start | Eine gestoppte Registry booten. |
Ein Cluster oder eine Registry, die ein Agent erstellt, wird mit jeder Maschine geteilt (Alle Arbeitsbereiche) und startet mit Bromure.
Lebenszyklus
- Die App zu beenden hält Cluster-Knoten und Registries an (ein Schnappschuss ihres Speichers), und der nächste Start setzt sie fort. Ein Schnappschuss, der sich nicht wiederherstellen lässt, fällt auf einen frischen Boot zurück.
- Stoppen fährt k3s und die Container sauber herunter, bevor die VMs ausgeschaltet werden, mit bis zu 60 Sekunden je Maschine.
- Scheitert eine Knoten- oder Registry-VM beim Boot an ihrer Dateisystemprüfung, erkennt Bromure das, stoppt die VM, repariert ihre System- und Datendisks, und bootet sie erneut.
- Ein Cluster, dessen erste Einrichtung nie fertig wurde, wird beim nächsten Start erneut eingerichtet.
- Eine Maschine zu löschen entfernt sie aus jeder Zugriffsliste; eine Liste, die dadurch leer würde, fällt auf alle Maschinen zurück.
- Cluster und Registries erscheinen im Spiegelfenster eines fernen Macs wie alles andere (siehe Remote-Zugriff).
Cluster-Einträge liegen in ~/Library/Application Support/BromureAC/kube/clusters.json; die Knoten-Disks jedes Clusters liegen unter ~/Library/Application Support/BromureAC/kube/<cluster-id>/.