Kubernetes 集群与注册表
有些工作需要不止一台机器:部署到 Kubernetes 的服务、在一处构建、在另一处运行的镜像,或是拿来测试的云 API。Bromure Agentic Coding 可以替你在这台 Mac 上、在你的机器(在设置编辑器中即工作区)旁边运行那些基础设施:
- Kubernetes 集群是一组运行 k3s 的节点 VM,可选择搭配复制式存储、负载均衡器、ingress 控制器与本地云模拟器。你允许的机器会在
~/.kube/config中取得它作为一个 context。 - 注册表是一个位于自己小型 VM 中的私有 Docker 注册表。你允许的机器可以推送到它;每个集群都可以从它拉取。
两者都是共享资源:一个集群或注册表可服务多台机器,而它们的代理会通过基础设施 MCP 服务器得知它。
注意: 不要把这些集群与机器凭据窗格中的 Kubernetes 凭据搞混。那些是为存在于别处的集群(EKS、GKE、公司的集群)导入 context,并在线路上中转它们的凭据。本章的集群则是 Bromure 在这台 Mac 上创建并运行的 VM。
在哪里找到它们
- **工作区 › 基础设施 › 创建 Kubernetes 集群…与创建注册表…**会打开创建面板。若前景是某台远程 Mac 的镜像窗口,这些项目会在那台 Mac 上创建集群或注册表(见远程访问)。
- 一旦存在一个,侧边栏的虚拟机区段就会多出一份 Kubernetes 列表与一份注册表列表,各自带一个 + 可再创建一个。每一行显示一个状态圆点、名称与一行状况;点击它可把它的仪表板放上舞台。它的 ⋯ 菜单提供启动,或在运行中时提供重启与停止,以及工作区访问…与删除…。
创建集群
新建集群面板有一个含六个窗格的侧边栏——通用、节点、存储、网络、附加组件、访问——就像机器的设置编辑器。在面板内容有效之前,创建会保持禁用;旁边一行简短文字说明原因(例如“请为集群取个名称。”)。
通用
| 字段 | 默认 | 含义 |
|---|---|---|
| 名称 | Kube cluster | 节点的主机名、kubeconfig 的 context 与磁盘上的文件夹都由它衍生:节点会命名为 k8s-<名称>-1、-2… |
| 随 Bromure 启动 | 开启 | 应用启动时开机这个集群。 |
一个摘要会列出你所选的节点、存储、负载均衡器与附加组件。
节点
| 字段 | 范围 | 默认 |
|---|---|---|
| 节点 | 1–8 | 1 |
| 每节点 vCPU | 1–16 | 2 |
| 每节点内存 | 2–64 GB | 4 GB |
只有一个节点时,它会同时运行控制平面与你的工作负载。节点更多时,节点 1 是控制平面(仍然会运行工作负载),其余作为 worker 加入。窗格会显示总内存,并在这个集群会让其他一切只剩不到 4 GB 时警告“那是这台 Mac 的 M GB 之中的 N GB——工作区也需要空间。”
存储
- Longhorn 分布式存储(默认开启)——以 iSCSI 从专属的每节点数据磁盘(默认 40 GB,10–2000 GB)提供的复制式块卷。这些磁盘是稀疏的:只有被写入的块才会占用 Mac 上的空间。Longhorn 最多保留三份副本,但绝不超过节点数。它的存储类是
bromure-longhorn,也是集群的默认。关掉之后,只剩下 k3s 的节点本地local-path类,那会把 pod 钉在它所在的节点上。 - Synology NAS ——通过 Synology 的 CSI 驱动,在你的 NAS 上提供持久卷。填入 DSM 地址、端口、HTTPS、DSM 用户与 DSM 密码,选填卷(例如
/volume1, /volume3)、协议——iSCSI(块 LUN)或 SMB(共享文件夹)——以及文件系统。若未指定卷,DSM 会挑一个有空间的,类为bromure-synology;指定卷则每个各得一个类(bromure-synology-volume1…)。第一个 Synology 类会成为集群的默认;Longhorn 仍可按名称使用。DSM 账号需要存储管理员的权限。密码会加密保存在这台 Mac 上,而且只会落在集群自己的 Secrets 中。
网络
负载均衡器决定 LoadBalancer 类型的 Service 如何取得地址:
| 选择 | 行为 |
|---|---|
| MetalLB,仅 VM 网络(默认) | 第二层的 MetalLB 从 VM 网络发放地址。集群设置时,VM 子网顶端的二十个地址会保留给它。可从机器与这台 Mac 连到;你的 LAN 上不会暴露任何东西。 |
| Bromure LAN 负载均衡器 | 每个 Service 的端口都会发布在这台 Mac 的 LAN 地址上,由主机转发进集群。若指定选填的 LAN 地址池(例如 10.0.0.20-10.0.0.29、10.0.0.32/28 或以逗号分隔的列表),每个 Service 会改为取得自己的一个空闲 LAN 地址,由 Mac 在网络上代为应答(ARP),形式类似 MetalLB。可从你的 LAN、这台 Mac 与各机器连到。 |
| 无(仅 NodePort) | LoadBalancer 的 Service 会一直处于待决状态;请使用 NodePort 或 ClusterIP。 |
使用 Bromure LAN 负载均衡器时,两个 Service 注解可逐一改变默认:bromure.io/scope: vm 让它保持私有(VM 网络上的地址,只供各机器与这台 Mac),而 bromure.io/loadBalancerIP 可要求特定地址。
Traefik ingress 控制器(默认开启)保留 k3s 内附的 ingress。搭配 LAN 负载均衡器时,它会在这台 Mac 上发布 80 与 443 端口。
警告: Bromure LAN 负载均衡器会让集群的服务可被你网络上的任何人连到。请刻意选择它;默认的 MetalLB 会把一切留在这台 Mac 上。
附加组件
来自开源 floci 家族的本地云模拟器,每一个都是自有端口上的一个 LoadBalancer Service,数据放在集群的默认存储类上:
| 开关 | 端口 | 模拟(部分) |
|---|---|---|
| AWS 模拟器 (floci) | 4566 | S3、DynamoDB、SQS、SNS、Lambda、API Gateway、Step Functions、EventBridge、Cognito |
| Azure 模拟器 (floci-az) | 4577 | Blob、Queue 与 Table Storage、Cosmos DB、Key Vault、Service Bus、Event Hubs、Event Grid、Functions、Azure SQL、App Configuration |
| Google Cloud 模拟器 (floci-gcp) | 4588 | Cloud Storage、Pub/Sub、Firestore、Datastore、Secret Manager、Cloud KMS、Cloud Run、Cloud Functions、Cloud Tasks、Cloud SQL、BigQuery |
| Oracle Cloud 模拟器 (floci-oci) | 4599 | Object Storage、Queue、Streaming、Vault、KMS、Secrets、Functions、Identity、OKE |
每个启用的模拟器都会有一个 项目 版本字段。留空(最新发行版)表示在集群设置时取得 Docker Hub 上最新的发行版;输入标签(2.1.0)或完整的镜像引用可将它固定。若无法连到 Docker Hub,就会使用 latest 标签。会启动容器的服务(Lambda、Cloud Run 之类)使用节点的 Docker,属于尽力而为。
访问
哪些机器会取得这个集群:
- 所有工作区,包含新建的(默认),或
- 仅这些工作区,每台机器一个复选框。“至少必须有一个工作区保有访问权。”
列表上的机器会在它们的 ~/.kube/config 中取得这个集群(context 以集群名称命名),并通过基础设施 MCP 看到它。你之后可以从仪表板更改这项设置。
点击创建。预配需要几分钟;仪表板的日志标签页会显示每一个步骤。
集群仪表板
仪表板的标题栏显示集群名称、一个阶段胶囊与一段摘要(节点数、每个节点的 vCPU 与内存、k3s 版本、运行时间),并附启动,或重启与停止,以及一个集群操作菜单:拷贝 kubeconfig、工作区访问…、随 Bromure 启动与删除集群…。
共六个标签页,列表附有过滤字段:
| 标签页 | 显示 |
|---|---|
| 概览 | 节点、Pod、内存、存储与负载均衡器的卡片;每个云模拟器一张卡片,其端点分成从这台 Mac 与 LAN与从工作区两组,另有一行可直接粘贴、把该云的 CLI 与 SDK 指向它的命令,以及它所接受的测试凭据;负载均衡器已发布的端口(以及任何绑定失败的,附原因);各节点;最近的警告。 |
| 工作负载 | Deployment 与 Pod,附就绪状态与重启次数。 |
| 服务 | Service 与它们的外部地址(在被分配之前显示外部 IP:待决)。 |
| 存储 | Longhorn 的容量与卷、Synology 驱动的状态,以及卷声明。 |
| 访问 | 工作区访问——与面板中相同的选择。 |
| 日志 | 预配与生命周期的日志。 |
删除集群…“停止每一个节点并删除它们的磁盘,包含所有 Longhorn 卷。工作区会从 kubeconfig 中失去这个集群。这无法撤销。”
从机器使用集群
在被允许的机器中,kubectl 直接就能用:集群的 context 在 ~/.kube/config 里,而 kubectl 会通过 VM 网络直接与控制平面节点通信。那些流量不会经过主机的拦截代理服务器——节点地址已被排除在机器的代理设置之外——所以不会出现在该机器的追踪中。
拷贝 kubeconfig 操作会给你一份独立的 kubeconfig,供 Mac 本机上的工具使用。节点 VM 也能用 CLI 连到,例如 bromure-cli vm exec k8s-dev-1 -- kubectl get nodes(见CLI、API 与 MCP)。
注册表
创建注册表
**创建注册表…**会打开一个面板:“位于自己 VM 中的私有 Docker 注册表:在工作区中构建,推送到这里,在集群中运行。在 VM 网络上使用纯 HTTP;它绝不离开这台 Mac。”
| 字段 | 范围 | 默认 |
|---|---|---|
| 名称 | — | registry |
| 随 Bromure 启动 | — | 开启 |
| 内存 | 1–16 GB | 1 GB |
| 镜像存储 | 10–2000 GB | 40 GB |
| 推送权限 | 所有工作区,包含新建的 / 仅这些工作区 | 全部 |
镜像磁盘是稀疏的:只有被推送的层才占用空间。每个集群都可以从每个注册表拉取;推送权限则是按机器设置的。
注册表仪表板
标题栏显示注册表的地址(<ip>:5000)、它的内存与磁盘、启动 / 重启 / 停止,以及一个含拷贝地址、工作区访问…、随 Bromure 启动与删除注册表…的菜单。标签页有:镜像(仓库、磁盘与地址的卡片、一段从工作区推送的代码片段,以及镜像与标签的列表)、访问与日志。
在有推送权限的机器中,Docker 已经信任该注册表的地址,而 $BROMURE_REGISTRY 持有它(若能访问多个注册表,则是第一个的),所以你可以直接推送:
docker build -t $BROMURE_REGISTRY/myapp:dev .
docker push $BROMURE_REGISTRY/myapp:dev
kubectl run myapp --image=$BROMURE_REGISTRY/myapp:dev
各集群都被设置为自动从每个注册表拉取;当某个注册表被创建、移动或删除时,运行中的集群会被更新。注册表停止期间,从它拉取会像任何注册表中断一样失败。
删除注册表…“停止注册表的 VM,并删除它所持有的每一个镜像。工作区与集群会不再信任它的地址。这无法撤销。”
代理与基础设施 MCP
每台机器的代理都会取得一个 bromure-infrastructure MCP 服务器(vsock 端口 5834),范围限于那台机器可使用的集群与注册表。它的工具:
| 工具 | 作用 |
|---|---|
infrastructure_overview | 这台机器可用的一切——集群(context 名称、状态、节点、存储类、负载均衡器、ingress)与注册表(地址、如何推送)——并附使用说明。 |
cluster_status | 某个集群的实时细节:阶段、节点、Pod、Service 与它们的外部地址、存储、警告、最近的日志行。 |
cluster_create | 以与面板相同的选项创建一个集群。 |
cluster_start | 开机一个已停止的集群。 |
registry_status | 某个注册表:地址、是否有响应、它的镜像、磁盘用量。 |
registry_create | 创建一个注册表。 |
registry_start | 开机一个已停止的注册表。 |
代理所创建的集群或注册表会分享给每一台机器(所有工作区),并随 Bromure 启动。
生命周期
- 退出应用会挂起集群节点与注册表(内存快照),下一次启动则会恢复它们。无法还原的快照会退回为全新开机。
- 停止会在关闭 VM 电源之前,干净地关掉 k3s 与各容器,每台机器最多给 60 秒。
- 若某个节点或注册表 VM 在开机时未通过文件系统检查,Bromure 会检测到、停止该 VM、修复它的系统与数据磁盘,然后再次开机。
- 首次设置从未完成的集群,会在下一次启动时再次设置。
- 删除一台机器会把它从每一份访问列表中移除;若某份列表会因此变空,则退回为所有机器。
- 集群与注册表会像其他一切一样,出现在远程 Mac 的镜像窗口中(见远程访问)。
集群记录位于 ~/Library/Application Support/BromureAC/kube/clusters.json;每个集群的节点磁盘在 ~/Library/Application Support/BromureAC/kube/<集群 id>/ 之下。