-
Notifications
You must be signed in to change notification settings - Fork 154
feat(helm): machine-a-tron mac address allocation #3700
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -4,7 +4,8 @@ Helm chart for deploying Machine-A-Tron - a mock machine simulator for NICo test | |
|
|
||
| ## Overview | ||
|
|
||
| Machine-A-Tron creates simulated bare-metal machines that behave like real hosts, allowing you to: | ||
| Machine-A-Tron creates simulated bare-metal machines that behave like real hosts, | ||
| allowing you to: | ||
|
|
||
| - Test NICo without physical hardware | ||
| - Simulate multiple hosts, DPUs, switches and power shelves | ||
|
|
@@ -42,13 +43,15 @@ helm upgrade --install nico ./helm \ | |
| [site_explorer] | ||
| override_target_host = "nico-machine-a-tron-bmc-mock" | ||
| override_target_port = 1266 | ||
| ``` | ||
|
|
||
| ```text | ||
|
|
||
| --- | ||
|
|
||
| ## Mode 2: ClusterIP Mode (Scale Testing) | ||
|
|
||
| **Use for load testing environments where simulated machines run alongside real hardware.** | ||
| **Use for load testing environments where simulated machines run alongside real | ||
| hardware.** | ||
|
|
||
| Each simulated BMC gets a dedicated ClusterIP service. Supports multi-pod deployments. | ||
|
|
||
|
|
@@ -167,6 +170,7 @@ pods: | |
| ### What Gets Created | ||
|
|
||
| **Per pod:** | ||
|
|
||
| | Resource | Name Pattern | | ||
| |----------|--------------| | ||
| | Deployment | `nico-machine-a-tron-pod-0` | | ||
|
|
@@ -175,18 +179,21 @@ pods: | |
| | Service | `nico-machine-a-tron-pod-0-bmc-mock` | | ||
|
|
||
| **Per BMC:** | ||
|
|
||
| | Resource | Name Pattern | | ||
| |----------|--------------| | ||
| | ClusterIP Service | `nico-machine-a-tron-bmc-10-100-0-2` | | ||
|
|
||
| **Cluster-scoped:** | ||
|
|
||
| | Resource | Name | | ||
| |----------|------| | ||
| | ServiceCIDR | `nico-machine-a-tron-bmc-cidr` | | ||
|
|
||
| ### Scale Guidelines | ||
|
|
||
| **BMC count per GB200 NVL72 rack:** | ||
|
|
||
| | Component | Count | BMCs per Unit | Total | | ||
| |-----------|-------|---------------|-------| | ||
| | Compute trays | 18 | 3 (1 tray + 2 BF3) | 54 | | ||
|
|
@@ -195,6 +202,7 @@ pods: | |
| | **Total per rack** | | | **71** | | ||
|
|
||
| **CIDR sizing:** | ||
|
|
||
| | CIDR | Usable IPs | Racks per Pod | | ||
| |------|------------|---------------| | ||
| | /24 | 253 | ~3 | | ||
|
|
@@ -224,7 +232,8 @@ gateway = "10.100.0.1" | |
| type = "underlay" | ||
| prefix = "10.100.4.0/22" | ||
| gateway = "10.100.4.1" | ||
| ``` | ||
|
|
||
| ```text | ||
|
|
||
| --- | ||
|
|
||
|
|
@@ -236,6 +245,9 @@ gateway = "10.100.4.1" | |
| pods: | ||
| <pod-name>: | ||
| cidr: "" # Required for bmcServices mode | ||
| macAddressPool: # Optional: override auto-generated MAC pool | ||
| base: "02:00:00:00:00:00" | ||
| hostBits: 16 | ||
| machines: | ||
| <group-name>: | ||
| hwType: wiwynn_gb200_nvl | ||
|
|
@@ -246,6 +258,55 @@ pods: | |
| # ... other machine settings | ||
| ``` | ||
|
|
||
| ### MAC Address Pool Configuration | ||
|
|
||
| Each pod needs unique MAC addresses to avoid collisions in multi-pod deployments. | ||
| By default, the chart auto-generates unique MAC pools per pod based on pod index. | ||
|
|
||
| **Two pools are configured:** | ||
|
|
||
| 1. **`mac_address_pool`** - Standalone MACs for BMC and management interfaces: | ||
| - Host BMC MAC | ||
| - DPU BMC MAC (per DPU) | ||
| - DPU Host MAC (representor interface, per DPU) | ||
| - DPU OOB MAC (out-of-band management, per DPU) | ||
| - NVOS MACs (for switches) | ||
|
|
||
| *Example: GB200 host with 2 DPUs needs ~7 MACs from this pool.* | ||
|
|
||
| 2. **`hw_mac_address_ranges`** - Contiguous MAC blocks for NICs: | ||
| - ConnectX NICs (e.g., CX-8 needs 10 consecutive MACs) | ||
| - Storage NICs | ||
| - Management NICs | ||
|
|
||
| *Real hardware has contiguous MAC blocks assigned at manufacturing.* | ||
|
|
||
| ```yaml | ||
| macAddressPool: | ||
| enabled: true # Enable auto-generation | ||
| basePrefix: "02:00" # First 2 bytes (locally administered) | ||
| hostBits: 16 # ~65K MACs per pod | ||
|
|
||
| hwMacAddressRanges: | ||
| enabled: true # Enable auto-generation | ||
| basePrefix: "02:01" # First 2 bytes | ||
| hostBits: 24 # Total range size | ||
| rangeHostBits: 8 # 256 MACs per allocation | ||
| ``` | ||
|
|
||
| **Auto-generated formats:** | ||
|
|
||
| - `mac_address_pool`: `02:00:PP:XX:XX:XX` (PP = pod index) | ||
| - `hw_mac_address_ranges`: `02:01:PP:XX:XX:XX` (PP = pod index) | ||
|
|
||
| **Example with 3 pods:** | ||
|
|
||
| | Pod | mac_address_pool | hw_mac_address_ranges | | ||
| |-----|------------------|----------------------| | ||
| | mat-0 | `02:00:00:00:00:00` | `02:01:00:00:00:00` | | ||
| | mat-1 | `02:00:01:00:00:00` | `02:01:01:00:00:00` | | ||
| | mat-2 | `02:00:02:00:00:00` | `02:01:02:00:00:00` | | ||
|
|
||
| ### BMC Services Configuration | ||
|
|
||
| ```yaml | ||
|
|
@@ -303,12 +364,15 @@ Causes: | |
|
|
||
| Verify selector labels match: | ||
|
|
||
| # Check service selector | ||
| ## Check service selector | ||
|
|
||
| kubectl -n nico-mat get svc nico-machine-a-tron-bmc-10-100-0-2 -o jsonpath='{.spec.selector}' | ||
|
|
||
| # Check pod labels | ||
| ## Check pod labels | ||
|
|
||
| kubectl -n nico-mat get pods -l nvidia-infra-controller/pod-name=pod-0 --show-labels | ||
| ``` | ||
|
|
||
| ```text | ||
|
Comment on lines
+367
to
+375
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win Restore troubleshooting heading and command-block structure. These As per path instructions, review Markdown for correctness and operator usability. 🤖 Prompt for AI AgentsSource: Path instructions |
||
|
|
||
| ### View Generated Config | ||
|
|
||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Restore code-fence boundaries around the TOML examples. Both fences begin after their intended snippets, causing following sections to render as literal text.
helm/charts/nico-machine-a-tron/README.md#L47-L51: open atomlfence before[site_explorer]and close it afteroverride_target_port.helm/charts/nico-machine-a-tron/README.md#L235-L236: open atomlfence before[networks.pod-0-oob]and close it after the final gateway.As per path instructions, review Markdown for correctness and operator usability.
📍 Affects 1 file
helm/charts/nico-machine-a-tron/README.md#L47-L51(this comment)helm/charts/nico-machine-a-tron/README.md#L235-L236🤖 Prompt for AI Agents
Source: Path instructions