Clústeres de Kubernetes y registros

Algún trabajo necesita más de una máquina: un servicio desplegado en Kubernetes, una imagen construida en un sitio y ejecutada en otro, una API en la nube contra la que probar. Bromure Agentic Coding puede ejecutar esa infraestructura por ti, en este Mac, junto a tus máquinas (espacios de trabajo, en el editor de ajustes):

  • Un clúster de Kubernetes es un conjunto de VM de nodo ejecutando k3s, con almacenamiento replicado opcional, un balanceador de carga, un controlador de ingress y emuladores de nube locales. Las máquinas que autorices lo reciben como contexto en ~/.kube/config.
  • Un registro es un registro Docker privado en su propia VM pequeña. Las máquinas que autorices pueden subir ahí; cualquier clúster puede descargar de él.

Los dos son recursos compartidos: un clúster o un registro sirve a varias máquinas, y sus agentes se enteran de él a través del servidor MCP de infraestructura.

Nota: no confundas estos clústeres con las credenciales de Kubernetes del panel Credenciales de una máquina. Esas importan contextos de clústeres que existen en otro sitio (EKS, GKE, un clúster del trabajo) e intermedian sus credenciales en el cable. Los clústeres de este capítulo son VM que Bromure crea y ejecuta en este Mac.

Dónde encontrarlos

  • Espacios de trabajo › Infraestructura › Crear clúster de Kubernetes… y Crear registro… abren las hojas de creación. Con una ventana de espejo de un Mac remoto delante, estos elementos crean el clúster o el registro en ese Mac (ver Acceso remoto).
  • Una vez que existe uno, la sección Máquinas virtuales de la barra lateral gana una lista Kubernetes y una lista Registros, cada una con un + para crear otro. Una fila muestra un punto de estado, el nombre y un estado de una línea; haz clic para poner su panel en el escenario. Su menú ⋯ ofrece Iniciar, o Reiniciar y Detener mientras corre, Acceso de espacios de trabajo… y Eliminar….
La barra lateral de la ventana principal con la sección MÁQUINAS VIRTUALES desplegada: Cuadrícula, luego las máquinas Payments API y Web app con un botón + y un botón ⋯ en cada fila. Las listas Kubernetes y Registros aparecen en esta sección una vez que existe un clúster o un registro.

Crear un clúster

La hoja Clúster nuevo tiene una barra lateral de seis paneles — General, Nodos, Almacenamiento, Red, Complementos, Acceso — como el editor de ajustes de una máquina. Crear sigue desactivado hasta que la hoja es válida; una línea corta al lado dice por qué (por ejemplo "Dale un nombre al clúster.").

La hoja Clúster nuevo en su panel General: una barra lateral con General, Nodos, Almacenamiento, Red, Complementos y Acceso; el campo Nombre, el interruptor Iniciar con Bromure, y un Resumen de nodos, almacenamiento, balanceador de carga y complementos.

General

CampoPor omisiónSignificado
NombreKube clusterLos nombres de host de los nodos, el contexto de kubeconfig y la carpeta en disco derivan todos de él: los nodos se llaman k8s-<nombre>-1, -2, …
Iniciar con BromureActivadoArrancar el clúster cuando la app se lanza.

Un Resumen lista los nodos, el almacenamiento, el balanceador de carga y los complementos que has elegido.

Nodos

CampoRangoPor omisión
Nodos1–81
vCPU por nodo1–162
Memoria por nodo2–64 GB4 GB

Con un nodo, ejecuta el plano de control y tus cargas de trabajo juntos. Con más, el nodo 1 es el plano de control (y sigue ejecutando cargas) y los otros se unen como workers. El panel muestra la RAM total, y avisa "Son N GB de los M GB de este Mac — los espacios de trabajo también necesitan sitio." cuando el clúster dejaría menos de 4 GB para todo lo demás.

Almacenamiento

  • Almacenamiento distribuido Longhorn (activado por omisión) — volúmenes de bloque replicados servidos por iSCSI desde un Disco de datos por nodo dedicado (40 GB por omisión, 10–2000 GB). Los discos son dispersos: solo los bloques escritos ocupan espacio en el Mac. Longhorn mantiene hasta tres réplicas, nunca más que el número de nodos. Su clase de almacenamiento es bromure-longhorn, la del clúster por omisión. Desactivado, solo queda la clase local-path local al nodo de k3s, que fija un pod a su nodo.
  • NAS Synology — volúmenes persistentes en tu NAS a través del controlador CSI de Synology. Rellena Dirección DSM, Puerto, HTTPS, Usuario DSM y Contraseña DSM, Volúmenes opcionales (por ejemplo /volume1, /volume3), Protocolo — iSCSI (LUN de bloque) o SMB (carpetas compartidas) — y Sistema de archivos. Sin volúmenes nombrados, DSM elige uno con espacio libre y la clase es bromure-synology; nombrar volúmenes da una clase por cada uno (bromure-synology-volume1, …). La primera clase de Synology pasa a ser la del clúster por omisión; Longhorn sigue disponible por su nombre. La cuenta de DSM necesita permisos de gestor de almacenamiento. La contraseña se guarda cifrada en este Mac y solo aterriza en los Secrets del propio clúster.

Red

Balanceador de carga elige cómo los Services de tipo LoadBalancer obtienen una dirección:

OpciónComportamiento
MetalLB, solo red de VM (por omisión)MetalLB en capa 2 reparte direcciones de la red de VM. Veinte direcciones de la parte alta de la subred de VM se le reservan al configurar el clúster. Alcanzable desde las máquinas y este Mac; nada se expone en tu LAN.
Balanceador de carga LAN de BromureCada puerto de Service se publica en la dirección LAN de este Mac, y el anfitrión lo reenvía al clúster. Con un conjunto de direcciones LAN opcional (por ejemplo 10.0.0.20-10.0.0.29, 10.0.0.32/28 o una lista con comas), cada Service recibe en cambio su propia dirección LAN libre, por la que el Mac responde en la red (ARP), al estilo de MetalLB. Alcanzable desde tu LAN, este Mac y las máquinas.
Ninguno (solo NodePort)Los Services LoadBalancer quedan pendientes; usa NodePort o ClusterIP.

Con el balanceador de carga LAN de Bromure, dos anotaciones de Service cambian la opción por omisión para cada Service: bromure.io/scope: vm lo mantiene privado (una dirección en la red de VM, solo para las máquinas y este Mac), y bromure.io/loadBalancerIP pide una dirección concreta.

Controlador de ingress Traefik (activado por omisión) mantiene el ingress que trae k3s. Con el balanceador de carga LAN publica los puertos 80 y 443 en este Mac.

Advertencia: el balanceador de carga LAN de Bromure hace que los servicios del clúster sean alcanzables por cualquiera en tu red. Elígelo a propósito; la opción MetalLB por omisión mantiene todo en este Mac.

Complementos

Emuladores de nube locales de la familia de código abierto floci, cada uno un Service LoadBalancer en su propio puerto, con sus datos en la clase de almacenamiento por omisión del clúster:

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

Cada emulador activado recibe un campo versión de proyecto. Déjalo vacío (última versión) para obtener la versión más nueva de Docker Hub al configurar el clúster; escribe una etiqueta (2.1.0) o una referencia de imagen completa para fijarla. Si no se puede alcanzar Docker Hub, se usa la etiqueta latest. Los servicios que crean contenedores (Lambda, Cloud Run y similares) usan el Docker del nodo y son de mejor esfuerzo.

Acceso

Qué máquinas reciben el clúster:

  • Todos los espacios de trabajo, incluidos los nuevos (por omisión), o
  • Solo estos espacios de trabajo, con una casilla por máquina. "Al menos un espacio de trabajo debe conservar el acceso."

Las máquinas de la lista reciben el clúster en su ~/.kube/config (el contexto lleva el nombre del clúster) y lo ven a través del MCP de infraestructura. Puedes cambiar esto luego desde el panel.

Haz clic en Crear. El aprovisionamiento tarda unos minutos; la pestaña Registro del panel muestra cada paso.

El panel del clúster

La cabecera del panel muestra el nombre del clúster, una píldora de fase y un resumen (nodos, vCPU y memoria de cada uno, la versión de k3s, el tiempo activo), con Iniciar, o Reiniciar y Detener, y un menú Acciones del clúster: Copiar kubeconfig, Acceso de espacios de trabajo…, Iniciar con Bromure y Eliminar clúster….

Seis pestañas, con un campo de filtro para las listas:

PestañaMuestra
ResumenTarjetas de Nodos, Pods, Memoria, Almacenamiento y Balanceadores de carga; una tarjeta por emulador de nube con sus puntos de acceso agrupados Desde este Mac y la LAN y Desde los espacios de trabajo, una línea lista para pegar que apunta la CLI y los SDK de esa nube hacia él, y las credenciales de prueba que acepta; los puertos publicados del balanceador de carga (y los que no pudieron enlazarse, con el motivo); los nodos; Avisos recientes.
Cargas de trabajoDeployments y pods, con disponibilidad y reinicios.
ServiciosServices y sus direcciones externas (IP externa: pendiente hasta que se asigne una).
AlmacenamientoCapacidad y volúmenes de Longhorn, el estado del controlador de Synology, y las Reclamaciones de volumen.
AccesoAcceso de espacios de trabajo — la misma elección que en la hoja.
RegistroEl registro de aprovisionamiento y de ciclo de vida.

Eliminar clúster… "Detiene todos los nodos y elimina sus discos, incluidos todos los volúmenes de Longhorn. Los espacios de trabajo pierden el clúster de su kubeconfig. Esto no se puede deshacer."

Usar un clúster desde una máquina

En una máquina autorizada, kubectl simplemente funciona: el contexto del clúster está en ~/.kube/config, y kubectl habla directamente con el nodo del plano de control por la red de VM. Ese tráfico no pasa por el proxy interceptor del anfitrión — las direcciones de los nodos están excluidas de los ajustes de proxy de la máquina — así que no aparece en la traza de la máquina.

La acción Copiar kubeconfig te da un kubeconfig autónomo para herramientas del propio Mac. Las VM de nodo también son alcanzables con la CLI, por ejemplo bromure-cli vm exec k8s-dev-1 -- kubectl get nodes (ver CLI, API y MCP).

Registros

Crear un registro

Crear registro… abre una hoja: "Un registro Docker privado en su propia VM: construye en un espacio de trabajo, sube aquí, ejecútalo en un clúster. HTTP simple en la red de VM; nunca sale de este Mac."

La hoja Registro nuevo: Nombre (texto de ejemplo registry), Iniciar con Bromure, una sección Máquina con selectores de Memoria y Almacenamiento de imágenes, y Acceso de subida con la elección entre todos los espacios de trabajo o solo algunos.
CampoRangoPor omisión
Nombre—registry
Iniciar con Bromure—Activado
Memoria1–16 GB1 GB
Almacenamiento de imágenes10–2000 GB40 GB
Acceso de subidaTodos los espacios de trabajo, incluidos los nuevos / Solo estos espacios de trabajoTodos

El disco de imágenes es disperso: solo las capas subidas ocupan espacio. Cualquier clúster puede descargar de cualquier registro; el acceso de subida es por máquina.

El panel del registro

La cabecera muestra la dirección del registro (<ip>:5000), su memoria y su disco, Iniciar / Reiniciar / Detener, y un menú con Copiar dirección, Acceso de espacios de trabajo…, Iniciar con Bromure y Eliminar registro…. Pestañas: Imágenes (tarjetas de Repositorios, Disco y Dirección, un fragmento Subir desde un espacio de trabajo, y la lista de imágenes y etiquetas), Acceso y Registro.

En una máquina con acceso de subida, Docker ya confía en la dirección del registro, y $BROMURE_REGISTRY la contiene (con acceso a varios registros, la del primero), así que puedes subir de inmediato:

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

Los clústeres están configurados para descargar de todos los registros automáticamente; cuando un registro se crea, cambia de dirección o se elimina, los clústeres en marcha se actualizan. Mientras un registro está detenido, las descargas de él fallan como en cualquier caída de registro.

Eliminar registro… "Detiene la VM del registro y elimina todas las imágenes que contiene. Los espacios de trabajo y los clústeres dejan de confiar en su dirección. Esto no se puede deshacer."

Los agentes y el MCP de infraestructura

Los agentes de cada máquina reciben un servidor MCP bromure-infrastructure (puerto vsock 5834), limitado a los clústeres y registros que esa máquina puede usar. Sus herramientas:

HerramientaQué hace
infrastructure_overviewTodo lo disponible para esta máquina — clústeres (nombres de contexto, estado, nodos, clases de almacenamiento, balanceador de carga, ingress) y registros (dirección, cómo subir) — con instrucciones de uso.
cluster_statusDetalle en vivo de un clúster: fase, nodos, pods, servicios y sus direcciones externas, almacenamiento, avisos, últimas líneas de registro.
cluster_createCrear un clúster, con las mismas opciones que la hoja.
cluster_startArrancar un clúster detenido.
registry_statusUn registro: dirección, si responde, sus imágenes, uso de disco.
registry_createCrear un registro.
registry_startArrancar un registro detenido.

Un clúster o un registro que crea un agente se comparte con todas las máquinas (Todos los espacios de trabajo) y arranca con Bromure.

Ciclo de vida

  • Salir de la app suspende los nodos del clúster y los registros (una instantánea de su memoria), y el siguiente arranque los reanuda. Una instantánea que no se restaura cae en un arranque nuevo.
  • Detener apaga k3s y los contenedores limpiamente antes de apagar las VM, concediendo hasta 60 segundos por máquina.
  • Si una VM de nodo o de registro falla su comprobación de sistema de archivos al arrancar, Bromure lo detecta, detiene la VM, repara sus discos de sistema y de datos, y la arranca de nuevo.
  • Un clúster cuya primera configuración nunca terminó se configura otra vez en su siguiente arranque.
  • Eliminar una máquina la quita de todas las listas de acceso; una lista que quedaría vacía cae en todas las máquinas.
  • Los clústeres y los registros aparecen en la ventana de espejo de un Mac remoto como todo lo demás (ver Acceso remoto).

Los registros de clúster viven en ~/Library/Application Support/BromureAC/kube/clusters.json; los discos de nodo de cada clúster están bajo ~/Library/Application Support/BromureAC/kube/<id-clúster>/.