Clusters Kubernetes et registres

Certains travaux demandent plus d'une machine : un service déployé sur Kubernetes, une image construite à un endroit et exécutée à un autre, une API cloud contre laquelle tester. Bromure Agentic Coding peut faire tourner cette infrastructure pour vous, sur ce Mac, à côté de vos machines (espaces de travail, dans l'éditeur de réglages) :

  • Un cluster Kubernetes est un ensemble de VM de nœud faisant tourner k3s, avec en option du stockage répliqué, un équilibreur de charge, un contrôleur d'ingress et des émulateurs cloud locaux. Les machines que vous autorisez le reçoivent comme contexte dans ~/.kube/config.
  • Un registre est un registre Docker privé dans sa propre petite VM. Les machines que vous autorisez peuvent y pousser ; tout cluster peut y tirer.

Les deux sont des ressources partagées : un cluster ou un registre sert plusieurs machines, et leurs agents en prennent connaissance par le serveur MCP d'infrastructure.

Note : ne confondez pas ces clusters avec les identifiants Kubernetes du volet Identifiants d'une machine. Ceux-là importent des contextes pour des clusters qui existent ailleurs (EKS, GKE, un cluster au travail) et relaient leurs identifiants sur le fil. Les clusters de ce chapitre sont des VM que Bromure crée et fait tourner sur ce Mac.

Où les trouver

  • Espaces de travail › Infrastructure › Créer un cluster Kubernetes… et Créer un registre… ouvrent les feuilles de création. Avec une fenêtre de miroir d'un Mac distant au premier plan, ces éléments créent le cluster ou le registre sur ce Mac-là (voir Accès distant).
  • Dès qu'il en existe un, la section Machines virtuelles de la barre latérale gagne une liste Kubernetes et une liste Registres, chacune avec un + pour en créer un autre. Une ligne montre un point d'état, le nom et un état d'une ligne ; cliquez-la pour mettre son tableau de bord sur la scène. Son menu ⋯ propose Démarrer, ou Redémarrer et Arrêter pendant qu'il tourne, Accès des espaces de travail… et Supprimer….
La barre latérale de la fenêtre principale avec la section MACHINES VIRTUELLES dépliée : Grille, puis les machines Payments API et Web app avec un bouton + et un bouton ⋯ sur chaque ligne. Les listes Kubernetes et Registres apparaissent dans cette section dès qu'un cluster ou un registre existe.

Créer un cluster

La feuille Nouveau cluster a une barre latérale de six volets — Général, Nœuds, Stockage, Réseau, Extensions, Accès — comme l'éditeur de réglages d'une machine. Créer reste désactivé tant que la feuille n'est pas valide ; une courte ligne à côté dit pourquoi (par exemple « Donnez un nom au cluster. »).

La feuille Nouveau cluster sur son volet Général : une barre latérale avec Général, Nœuds, Stockage, Réseau, Extensions et Accès ; le champ Nom, l'interrupteur Démarrer avec Bromure, et un Résumé des nœuds, du stockage, de l'équilibreur de charge et des extensions.

Général

ChampDéfautSignification
NomKube clusterLes noms d'hôte des nœuds, le contexte kubeconfig et le dossier sur disque en découlent tous : les nœuds sont nommés k8s-<nom>-1, -2, …
Démarrer avec BromureActivéAmorcer le cluster au lancement de l'application.

Un Résumé liste les nœuds, le stockage, l'équilibreur de charge et les extensions que vous avez choisis.

Nœuds

ChampPlageDéfaut
Nœuds1–81
vCPU par nœud1–162
Mémoire par nœud2–64 Go4 Go

Avec un seul nœud, il fait tourner le plan de contrôle et vos charges de travail ensemble. Avec plusieurs, le nœud 1 est le plan de contrôle (et fait toujours tourner des charges) et les autres rejoignent comme workers. Le volet montre la RAM totale, et avertit « Cela fait N Go sur les M Go de ce Mac — les espaces de travail ont aussi besoin de place. » quand le cluster laisserait moins de 4 Go pour tout le reste.

Stockage

  • Stockage distribué Longhorn (activé par défaut) — des volumes bloc répliqués servis par iSCSI depuis un Disque de données par nœud dédié (40 Go par défaut, 10–2000 Go). Les disques sont creux : seuls les blocs écrits prennent de la place sur le Mac. Longhorn garde jusqu'à trois répliques, jamais plus que le nombre de nœuds. Sa classe de stockage est bromure-longhorn, celle par défaut du cluster. Désactivé, il ne reste que la classe local-path locale au nœud de k3s, qui épingle un pod à son nœud.
  • NAS Synology — des volumes persistants sur votre NAS via le pilote CSI de Synology. Remplissez Adresse DSM, Port, HTTPS, Utilisateur DSM et Mot de passe DSM, des Volumes facultatifs (par exemple /volume1, /volume3), le Protocole — iSCSI (LUN bloc) ou SMB (dossiers partagés) — et le Système de fichiers. Sans volume nommé, DSM en choisit un avec de la place libre et la classe est bromure-synology ; nommer des volumes donne une classe par volume (bromure-synology-volume1, …). La première classe Synology devient celle par défaut du cluster ; Longhorn reste disponible par son nom. Le compte DSM a besoin des droits de gestionnaire de stockage. Le mot de passe est stocké chiffré sur ce Mac et n'atterrit jamais ailleurs que dans les Secrets propres au cluster.

Réseau

Équilibreur de charge choisit comment les Services de type LoadBalancer reçoivent une adresse :

ChoixComportement
MetalLB, réseau VM seulement (défaut)MetalLB en couche 2 distribue des adresses du réseau VM. Vingt adresses en haut du sous-réseau VM lui sont réservées à la configuration du cluster. Joignable depuis les machines et ce Mac ; rien n'est exposé sur votre réseau local.
Équilibreur de charge LAN BromureChaque port de Service est publié sur l'adresse LAN de ce Mac, et l'hôte le relaie dans le cluster. Avec un pool d'adresses LAN facultatif (par exemple 10.0.0.20-10.0.0.29, 10.0.0.32/28 ou une liste séparée par des virgules), chaque Service reçoit plutôt sa propre adresse LAN libre, pour laquelle le Mac répond sur le réseau (ARP), à la manière de MetalLB. Joignable depuis votre réseau local, ce Mac et les machines.
Aucun (NodePort seulement)Les Services LoadBalancer restent en attente ; utilisez NodePort ou ClusterIP.

Avec l'équilibreur de charge LAN Bromure, deux annotations de Service changent le défaut par Service : bromure.io/scope: vm le garde privé (une adresse sur le réseau VM, pour les machines et ce Mac seulement), et bromure.io/loadBalancerIP demande une adresse précise.

Contrôleur d'ingress Traefik (activé par défaut) garde l'ingress fourni avec k3s. Avec l'équilibreur de charge LAN, il publie les ports 80 et 443 sur ce Mac.

Avertissement : l'équilibreur de charge LAN Bromure rend les services du cluster joignables par n'importe qui sur votre réseau. Choisissez-le délibérément ; le défaut MetalLB garde tout sur ce Mac.

Extensions

Des émulateurs cloud locaux de la famille open source floci, chacun un Service LoadBalancer sur son propre port, avec ses données sur la classe de stockage par défaut du cluster :

InterrupteurPortÉmule (entre autres)
Émulateur AWS (floci)4566S3, DynamoDB, SQS, SNS, Lambda, API Gateway, Step Functions, EventBridge, Cognito
Émulateur Azure (floci-az)4577Blob, Queue et Table Storage, Cosmos DB, Key Vault, Service Bus, Event Hubs, Event Grid, Functions, Azure SQL, App Configuration
Émulateur Google Cloud (floci-gcp)4588Cloud Storage, Pub/Sub, Firestore, Datastore, Secret Manager, Cloud KMS, Cloud Run, Cloud Functions, Cloud Tasks, Cloud SQL, BigQuery
Émulateur Oracle Cloud (floci-oci)4599Object Storage, Queue, Streaming, Vault, KMS, Secrets, Functions, Identity, OKE

Chaque émulateur activé reçoit un champ version de projet. Laissez-le vide (dernière version) pour obtenir la version la plus récente sur Docker Hub à la configuration du cluster ; tapez une étiquette (2.1.0) ou une référence d'image complète pour l'épingler. Si Docker Hub n'est pas joignable, l'étiquette latest est utilisée. Les services qui créent des conteneurs (Lambda, Cloud Run et compagnie) utilisent le Docker du nœud et sont au mieux.

Accès

Quelles machines reçoivent le cluster :

  • Tous les espaces de travail, y compris les nouveaux (défaut), ou
  • Seulement ces espaces de travail, avec une case par machine. « Au moins un espace de travail doit garder l'accès. »

Les machines de la liste reçoivent le cluster dans leur ~/.kube/config (le contexte porte le nom du cluster) et le voient par le MCP d'infrastructure. Vous pouvez changer cela plus tard depuis le tableau de bord.

Cliquez Créer. Le provisionnement prend quelques minutes ; l'onglet Journal du tableau de bord montre chaque étape.

Le tableau de bord du cluster

L'en-tête du tableau de bord montre le nom du cluster, une pastille de phase et un résumé (nœuds, vCPU et mémoire chacun, la version de k3s, la durée de fonctionnement), avec Démarrer, ou Redémarrer et Arrêter, et un menu Actions du cluster : Copier le kubeconfig, Accès des espaces de travail…, Démarrer avec Bromure et Supprimer le cluster….

Six onglets, avec un champ de filtre pour les listes :

OngletMontre
Vue d'ensembleDes cartes Nœuds, Pods, Mémoire, Stockage et Équilibreurs de charge ; une carte par émulateur cloud avec ses points d'accès groupés Depuis ce Mac et le réseau local et Depuis les espaces de travail, une ligne prête à coller qui pointe la CLI et les SDK du cloud vers lui, et les identifiants de test qu'il accepte ; les ports publiés de l'équilibreur de charge (et ceux qui n'ont pas pu se lier, avec la raison) ; les nœuds ; Avertissements récents.
Charges de travailLes déploiements et les pods, avec leur disponibilité et leurs redémarrages.
ServicesLes Services et leurs adresses externes (IP externe : en attente jusqu'à ce qu'une soit attribuée).
StockageLa capacité et les volumes Longhorn, l'état du pilote Synology, et les Demandes de volume.
AccèsAccès des espaces de travail — le même choix que dans la feuille.
JournalLe journal de provisionnement et de cycle de vie.

Supprimer le cluster… « Arrête chaque nœud et supprime leurs disques, y compris tous les volumes Longhorn. Les espaces de travail perdent le cluster de leur kubeconfig. C'est irréversible. »

Utiliser un cluster depuis une machine

Dans une machine autorisée, kubectl marche simplement : le contexte du cluster est dans ~/.kube/config, et kubectl parle directement au nœud du plan de contrôle par le réseau VM. Ce trafic ne passe pas par le proxy interceptant de l'hôte — les adresses des nœuds sont exclues des réglages de proxy de la machine — il n'apparaît donc pas dans la trace de la machine.

L'action Copier le kubeconfig vous donne un kubeconfig autonome pour les outils sur le Mac lui-même. Les VM de nœud sont aussi joignables avec la CLI, par exemple bromure-cli vm exec k8s-dev-1 -- kubectl get nodes (voir CLI, API et MCP).

Les registres

Créer un registre

Créer un registre… ouvre une feuille : « Un registre Docker privé dans sa propre VM : construisez dans un espace de travail, poussez ici, exécutez dans un cluster. HTTP simple sur le réseau VM ; il ne quitte jamais ce Mac. »

La feuille Nouveau registre : Nom (invite registry), Démarrer avec Bromure, une section Machine avec des incrémenteurs Mémoire et Stockage des images, et Accès en écriture avec le choix entre tous les espaces de travail ou seulement certains.
ChampPlageDéfaut
Nom—registry
Démarrer avec Bromure—Activé
Mémoire1–16 Go1 Go
Stockage des images10–2000 Go40 Go
Accès en écritureTous les espaces de travail, y compris les nouveaux / Seulement ces espaces de travailTous

Le disque d'images est creux : seules les couches poussées prennent de la place. Tout cluster peut tirer de tout registre ; l'accès en écriture est par machine.

Le tableau de bord du registre

L'en-tête montre l'adresse du registre (<ip>:5000), sa mémoire et son disque, Démarrer / Redémarrer / Arrêter, et un menu avec Copier l'adresse, Accès des espaces de travail…, Démarrer avec Bromure et Supprimer le registre…. Onglets : Images (des cartes Dépôts, Disque et Adresse, un extrait Pousser depuis un espace de travail, et la liste des images et étiquettes), Accès et Journal.

Dans une machine avec accès en écriture, Docker fait déjà confiance à l'adresse du registre, et $BROMURE_REGISTRY la contient (avec l'accès à plusieurs registres, celle du premier), si bien que vous pouvez pousser tout de suite :

docker build -t $BROMURE_REGISTRY/myapp:dev .
docker push $BROMURE_REGISTRY/myapp:dev
kubectl run myapp --image=$BROMURE_REGISTRY/myapp:dev

Les clusters sont configurés pour tirer de tout registre automatiquement ; quand un registre est créé, change d'adresse ou est supprimé, les clusters en cours d'exécution sont mis à jour. Pendant qu'un registre est arrêté, les tirages depuis lui échouent comme toute panne de registre.

Supprimer le registre… « Arrête la VM du registre et supprime chaque image qu'il contient. Les espaces de travail et les clusters cessent de faire confiance à son adresse. C'est irréversible. »

Les agents et le MCP d'infrastructure

Les agents de chaque machine reçoivent un serveur MCP bromure-infrastructure (port vsock 5834), limité aux clusters et registres que cette machine peut utiliser. Ses outils :

OutilCe qu'il fait
infrastructure_overviewTout ce qui est disponible pour cette machine — clusters (noms de contexte, état, nœuds, classes de stockage, équilibreur de charge, ingress) et registres (adresse, comment pousser) — avec les instructions d'usage.
cluster_statusLe détail en direct d'un cluster : phase, nœuds, pods, services et leurs adresses externes, stockage, avertissements, dernières lignes de journal.
cluster_createCréer un cluster, avec les mêmes options que la feuille.
cluster_startAmorcer un cluster arrêté.
registry_statusUn registre : adresse, s'il répond, ses images, l'usage de son disque.
registry_createCréer un registre.
registry_startAmorcer un registre arrêté.

Un cluster ou un registre qu'un agent crée est partagé avec chaque machine (Tous les espaces de travail) et démarre avec Bromure.

Cycle de vie

  • Quitter l'application suspend les nœuds du cluster et les registres (un instantané de leur mémoire), et le démarrage suivant les reprend. Un instantané qui ne se restaure pas retombe sur un amorçage à neuf.
  • Arrêter arrête proprement k3s et les conteneurs avant d'éteindre les VM, en accordant jusqu'à 60 secondes par machine.
  • Si une VM de nœud ou de registre échoue à sa vérification de système de fichiers à l'amorçage, Bromure le détecte, arrête la VM, répare ses disques système et de données, et la réamorce.
  • Un cluster dont la première configuration n'a jamais abouti est configuré à nouveau à son démarrage suivant.
  • Supprimer une machine la retire de chaque liste d'accès ; une liste qui deviendrait vide retombe sur toutes les machines.
  • Les clusters et les registres apparaissent dans la fenêtre de miroir d'un Mac distant comme tout le reste (voir Accès distant).

Les enregistrements de cluster vivent dans ~/Library/Application Support/BromureAC/kube/clusters.json ; les disques de nœud de chaque cluster sont sous ~/Library/Application Support/BromureAC/kube/<id-cluster>/.