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 清單與一份登錄檔清單,各自帶一個 + 可再建立一個。每一列顯示一個狀態圓點、名稱與一行狀況;點選它可把它的儀表板放上舞台。它的 ⋯ 選單提供啟動,或在執行中時提供重新啟動與停止,以及工作區存取…與刪除…。
主視窗的側邊欄,VIRTUAL MACHINES 區段已展開:格線,接著是機器 Payments API 與 Web app,每列各有一個 + 與 ⋯ 按鈕。一旦存在叢集或登錄檔,Kubernetes 與登錄檔的清單就會出現在這個區段中。

建立叢集

新增叢集面板有一個含六個窗格的側邊欄——一般、節點、儲存空間、網路、附加元件、存取——就像機器的設定編輯器。在面板內容有效之前,建立會保持停用;旁邊一行簡短文字說明原因(例如「請為叢集取個名稱。」)。

位於一般窗格的新增叢集面板:側邊欄有一般、節點、儲存空間、網路、附加元件與存取;名稱欄位、「隨 Bromure 啟動」開關,以及節點、儲存空間、負載平衡器與附加元件的摘要。

一般

欄位預設意義
名稱Kube cluster節點的主機名稱、kubeconfig 的 context 與磁碟上的檔案夾都由它衍生:節點會命名為 k8s-<名稱>-1、-2…
隨 Bromure 啟動開啟應用程式啟動時開機這個叢集。

一個摘要會列出你所選的節點、儲存空間、負載平衡器與附加元件。

節點

欄位範圍預設
節點1–81
每節點 vCPU1–162
每節點記憶體2–64 GB4 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)4566S3、DynamoDB、SQS、SNS、Lambda、API Gateway、Step Functions、EventBridge、Cognito
Azure 模擬器 (floci-az)4577Blob、Queue 與 Table Storage、Cosmos DB、Key Vault、Service Bus、Event Hubs、Event Grid、Functions、Azure SQL、App Configuration
Google Cloud 模擬器 (floci-gcp)4588Cloud Storage、Pub/Sub、Firestore、Datastore、Secret Manager、Cloud KMS、Cloud Run、Cloud Functions、Cloud Tasks、Cloud SQL、BigQuery
Oracle Cloud 模擬器 (floci-oci)4599Object 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 啟動、一個含記憶體與映像檔儲存空間步進器的「機器」區段,以及可選擇所有工作區或僅部分工作區的推送權限。
欄位範圍預設
名稱—registry
隨 Bromure 啟動—開啟
記憶體1–16 GB1 GB
映像檔儲存空間10–2000 GB40 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>/ 之下。