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>/ 之下。