Phase 0 — Azure 資源建立
共通輸入
| 項目 | 值 |
|---|---|
| Resource Group | mansion_kubevirt_resource |
| Region | 例如 japaneast |
| VNet | mansion_kubevirt_vnet |
| Address space(節點 & VM overlay) | 10.10.0.0/16 |
mansion_kubevirt_node_subnet(K8s 節點子網) |
10.10.10.0/24 |
mansion_kubevirt_vm_subnet(VM overlay,Worker eth1) |
10.10.100.0/24 |
mansion_kubevirt_ceph_subnet(保留,ARM PUT 安全) |
172.10.10.0/24 |
| SSH user | ubuntu |
| SSH public key | 由使用者提供 |
| NSG allowed source | 使用者的固定 Public IP 或 CIDR |
環境概覽
| 節點 | Azure VM | Private IP | 角色 |
|---|---|---|---|
| mansion_kubevirt_master | Standard_D2s_v4 (2C/8G) | 10.10.10.11 | K8s CP |
| mansion_kubevirt_infra | Standard_D4s_v4 (4C/16G) | 10.10.10.12 | Prometheus + OpenSearch + Fluent Bit + KubeVirt 管理面 |
| mansion_kubevirt_worker | Standard_D4s_v4 (4C/16G) | 10.10.10.13 | KubeVirt VM workload |
Pod 網段: 10.244.0.0/16(Cilium)
KubeVirt VM 網段: 10.10.100.0/24(mansion_kubevirt_vm_subnet,Worker eth1)
建置模式
| 模式 | 適用情境 | 說明 |
|---|---|---|
| Option A | 第一次熟悉 Azure Portal | 手動建立 RG、VNet、NSG、VM、NIC 與 IP |
| Option B | 未來重建 / 重複部署 | 在 Mac mini 上由本地 Copilot CLI 透過 Azure MCP + IaC 代執行 |
Option A:Azure VM 建立(Portal GUI)
Step 0-1:建立 Resource Group
- Portal → Resource groups → Create
- Subscription: 選你的訂閱
- Resource group name:
mansion_kubevirt_resource - Region: 選你最近的地區(例如 East Asia)
- → Review + create → Create
Step 0-2:建立 Virtual Network(共用,由 KubeVirt lab 建立)
- Portal → Virtual networks → Create
- Basics:
- Resource group:
mansion_kubevirt_resource - Name:
mansion_kubevirt_vnet - Region: 同上
- Resource group:
- IP addresses tab:
- Address space:
10.10.0.0/16(K8s 節點 & VM overlay) - 新增第二個 address space:
172.10.0.0/16(mansion_kubevirt_ceph_subnet 預留) - 刪除預設 subnet,新增三個:
Subnet name Address range 用途 mansion_kubevirt_node_subnet10.10.10.0/24K8s 節點(master .11, infra .12, worker .13) mansion_kubevirt_vm_subnet10.10.100.0/24KubeVirt VM overlay(Worker eth1 專用) mansion_kubevirt_ceph_subnet172.10.10.0/24預留,避免 KubeVirt 重部署時被 ARM PUT 刪除 - Address space:
- → Review + create → Create
Step 0-3:建立 Network Security Group
- Portal → Network security groups → Create
- Name:
mansion_kubevirt_nsg,Resource group:mansion_kubevirt_resource - 建立後進入 NSG → Inbound security rules → 新增以下規則:
| Priority | Name | Port | Protocol | Source | Action |
|---|---|---|---|---|---|
| 100 | Allow-SSH | 22 | TCP | Your IP | Allow |
| 200 | Allow-K8sAPI | 6443 | TCP | Your IP | Allow |
| 300 | Allow-NodePort | 30000-32767 | TCP | Your IP | Allow |
| 1000 | Allow-Internal | Any | Any | 10.10.0.0/16 |
Allow |
⚠️ Source 的 Your IP 填你家/辦公室的 Public IP(可到 https://myip.is 查詢)
💡Allow-Internal的 Source CIDR10.10.0.0/16覆蓋 mansion_kubevirt 所有節點(K8s 節點 10.10.10.x、VM overlay 10.10.100.x)之間的東西向流量。
Step 0-4:建立 3 台 VM
每台 VM 重複以下步驟(共 3 次):
Basics Tab 通用設定
| 欄位 | 設定 |
|---|---|
| Image | Ubuntu Server 22.04 LTS (Gen2) |
| Auth type | SSH public key |
| Username | ubuntu |
| SSH key | 貼上你的 public key |
各節點規格:
| 節點 | VM name | Size |
|---|---|---|
| Master | mansion_kubevirt_master |
Standard_D2s_v4 (2C/8G) |
| Infra | mansion_kubevirt_infra |
Standard_D4s_v4 (4C/16G) |
| Worker | mansion_kubevirt_worker |
Standard_D4s_v4 (4C/16G) |
Disks Tab
- OS disk type: Standard SSD (LRS)(省費用)
Networking Tab
| 欄位 | 設定 |
|——|——|
| Virtual network | mansion_kubevirt_vnet |
| Subnet | mansion_kubevirt_node_subnet |
| Public IP | 建立新的(Static,名稱如 mansion_kubevirt_master_pip)|
| NIC network security group | Advanced → 選 mansion_kubevirt_nsg |
⚠️ 重要:設定 Static Private IP
建立後:VM → Networking → NIC → IP configurations → ipconfig1 → Assignment 改為 Static,IP 填入:
| 節點 | Private IP |
|---|---|
| mansion_kubevirt_master | 10.10.10.11 |
| mansion_kubevirt_infra | 10.10.10.12 |
| mansion_kubevirt_worker | 10.10.10.13 |
Step 0-5:Worker 加第二張 NIC
- 先停止 mansion_kubevirt_worker(Worker 必須停機才能加 NIC)
- Portal → mansion_kubevirt_worker → Networking → Attach network interface → Create and attach network interface
- 設定:
- Name:
mansion_kubevirt_worker_nic2 - Subnet:
mansion_kubevirt_vm_subnet(10.10.100.0/24) - Private IP assignment: Static →
10.10.100.13(Worker eth1 IP)
- Name:
- 建立後 → 啟動 Worker
Step 0-6:Worker eth1 啟用 IP Forwarding
- Portal → mansion_kubevirt_worker → Networking → 點選第二張 NIC(
mansion_kubevirt_worker_nic2) - → IP configurations → 頂部有 IP forwarding 選項 → 設為 Enabled
- 儲存
Step 0-7:驗證 VM 建立完成
SSH 進入三台 VM:
# 從 Portal 取得各 VM 的 Public IP
ssh ubuntu@<MASTER_PUBLIC_IP>
ssh ubuntu@<INFRA_PUBLIC_IP>
ssh ubuntu@<WORKER_PUBLIC_IP>
在每台 VM 確認 Private IP 與介面:
ip addr show
# master 應看到 eth0: 10.10.10.11
# infra 應看到 eth0: 10.10.10.12
# worker 應看到 eth0: 10.10.10.13 + eth1: 10.10.100.13
三台互 ping(確認 NSG Allow-Internal 規則允許東西向流量):
# 在 master 上(eth0: 10.10.10.11,位於 mansion_kubevirt_node_subnet)
ping -c 3 10.10.10.12 # infra
ping -c 3 10.10.10.13 # worker
Option B:Mac mini + Azure MCP + IaC
Pretasks on Mac mini
- 安裝 Azure CLI
- 完成
az login - 確認正確 subscription
- 安裝並啟用 Azure MCP server
- 確認本地 Copilot CLI 可連到 Azure MCP
- 準備 SSH public key
- 準備 IaC 模板與參數檔
- 確認 NSG 允許來源 IP / CIDR
- 確認 Azure quota 與 VM SKU 可用
MCP 架構是什麼
| 元件 | 角色 |
|---|---|
| Copilot CLI | 協調者,接收使用者指令並決定呼叫哪個工具 |
| Azure MCP server | Azure 工具入口,讓 Copilot 能操作 Azure 能力 |
| Azure API / ARM | 真正建立資源的執行端 |
| IaC(建議 Bicep) | 定義 RG、VNet、Subnet、NSG、NIC、VM 的藍圖 |
| Mac mini | 本地控制主機,承載登入狀態、MCP server 與 IaC 模板 |
flowchart TD
User[User] --> Mac[Mac mini]
subgraph Local["Mac mini (local host)"]
CLI[Copilot CLI]
MCP[Azure MCP Server]
IaC[IaC / Bicep Files]
end
Mac --> CLI
CLI --> MCP
CLI --> IaC
MCP --> ARM[Azure API / ARM]
IaC --> ARM
subgraph Azure["Azure"]
RG[Resource Group]
NET[VNet / Subnets]
NSG[NSG]
VMS[3 Azure VMs]
NIC2[Worker NIC2]
end
ARM --> RG
ARM --> NET
ARM --> NSG
ARM --> VMS
ARM --> NIC2
Option B 執行流程
- 在 Mac mini 開啟本地 Copilot CLI
- 驗證 Azure MCP 可用
- 載入 IaC 模板與參數檔(見 IaC README)
- 建立以下 Azure 資源:
- Resource Group
- VNet + 2 個 Subnet
- NSG + inbound rules
- 3 台 VM
- Static Private/Public IP
- Worker 第 2 張 NIC
- Worker 第 2 張 NIC 的 IP forwarding
- 回報建置結果與驗證清單
Option B 預期輸出
mansion_kubevirt_resourcemansion_kubevirt_vnetmansion_kubevirt_node_subnet(10.10.10.0/24,K8s 節點子網)mansion_kubevirt_vm_subnet(10.10.100.0/24,VM overlay)mansion_kubevirt_ceph_subnet(172.10.10.0/24,保留)mansion_kubevirt_nsgmansion_kubevirt_master(10.10.10.11)mansion_kubevirt_infra(10.10.10.12)mansion_kubevirt_worker(10.10.10.13)- Worker 第 2 張 NIC
mansion_kubevirt_worker_nic2(10.10.100.13)