Skip to content

Commit 5705691

Browse files
committed
feat(recipes): replace AKS ib-node-config DaemonSet with nodewright tuning
Removes the privileged ib-node-config-aks DaemonSet from the AKS network-operator component and wires the AKS accelerator overlays (h100-aks-inference, h100-aks-training, a100-aks-training) to the same nodewright-customizations tuning manifest EKS uses, with service: aks. nvidia-setup is bumped to 0.5.0 in tuning.yaml, which adds the aks-h100 combination (NVIDIA/nodewright-packages#42): host IB RDMA setup (ib_umad/rdma_ucm module loading persisted via modules-load.d, memlock limits, LimitMEMLOCK=infinity drop-ins for containerd/kubelet), replacing what the DaemonSet did. 0.5.0 is otherwise identical to 0.4.0 for EKS, so the shared manifest keeps working for the existing services. On AKS the nvidia-setup-kernel package is a designed no-op (aks defaults omit KERNEL) and nvidia-tuned applies the aks-h100-{intent} profiles. Documents the AKS wildcard-toleration caveat in the shared manifest: AKS admission collapses toleration lists to the wildcard, which breaks the nodewright drain exemption for its own package pods (NVIDIA/nodewright#296), so keyed acceleratedTolerations must be injected on AKS. Verified end to end on AKS v1.35.5 with 2x Standard_ND96isr_H100_v5 running this package chain (kernel no-op, nvidia-tuned aks-h100-inference profile, IB modules + effective unlimited memlock, reboot persistence). Regenerates the tuning-status table (aks rows) and the container-images BOM, and updates the tuning structure test rows. Signed-off-by: Alex Yuskauskas <ayuskauskas@nvidia.com>
1 parent 23e97a7 commit 5705691

9 files changed

Lines changed: 81 additions & 185 deletions

File tree

docs/integrator/components/nodewright.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,14 @@ The table below is generated from the recipes by `make tuning-docs` — **do not
7575

7676
| Service | Accelerator | Profile | Setup | Tuning |
7777
|---------|--------------|---------|--------------------|-------------------------|
78+
| aks | a100 | h100 | nvidia-setup 0.5.0 | nvidia-tuned 0.3.1 |
79+
| aks | h100 | - | nvidia-setup 0.5.0 | nvidia-tuned 0.3.1 |
7880
| bcm | * | h100 | nvidia-setup 0.3.0 | - |
7981
| bcm | h100 | - | nvidia-setup 0.3.0 | - |
80-
| eks | a100 | h100 | nvidia-setup 0.4.0 | nvidia-tuned 0.3.1 |
81-
| eks | gb200 | - | nvidia-setup 0.4.0 | nvidia-tuned 0.3.1 |
82-
| eks | h100 | - | nvidia-setup 0.4.0 | nvidia-tuned 0.3.1 |
83-
| eks | h200 | h100 | nvidia-setup 0.4.0 | nvidia-tuned 0.3.1 |
82+
| eks | a100 | h100 | nvidia-setup 0.5.0 | nvidia-tuned 0.3.1 |
83+
| eks | gb200 | - | nvidia-setup 0.5.0 | nvidia-tuned 0.3.1 |
84+
| eks | h100 | - | nvidia-setup 0.5.0 | nvidia-tuned 0.3.1 |
85+
| eks | h200 | h100 | nvidia-setup 0.5.0 | nvidia-tuned 0.3.1 |
8486
| eks | rtx-pro-6000 | generic | - | nvidia-tuned 0.3.1 |
8587
| gke | a100 | h100 | - | nvidia-tuning-gke 0.1.2 |
8688
| gke | b200 | - | - | nvidia-tuning-gke 0.1.2 |

docs/user/container-images.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ A machine-readable **CycloneDX 1.6 JSON** companion to this page is produced by
2020
## Summary
2121

2222
- Components: **33**
23-
- Unique images: **82**
23+
- Unique images: **81**
2424
- Distinct registries: **11**
2525

2626
Registries: `602401143452.dkr.ecr.us-west-2.amazonaws.com`, `cr.agentgateway.dev`, `docker.io`, `gcr.io`, `ghcr.io`, `gke.gcr.io`, `nvcr.io`, `public.ecr.aws`, `quay.io`, `registry.k8s.io`, `us-docker.pkg.dev`
@@ -47,7 +47,7 @@ Registries: `602401143452.dkr.ecr.us-west-2.amazonaws.com`, `cr.agentgateway.dev
4747
| kube-prometheus-stack | helm | prometheus-community/kube-prometheus-stack | 84.4.0 | 8 |
4848
| kubeflow-trainer | helm | kubeflow-trainer | 2.2.0 | 3 |
4949
| kueue | helm | kueue | 0.17.1 | 1 |
50-
| network-operator | helm | nvidia/network-operator | 26.1.1 | 5 |
50+
| network-operator | helm | nvidia/network-operator | 26.1.1 | 4 |
5151
| network-operator-ocp | manifest ||| 0 |
5252
| network-operator-ocp-olm | manifest ||| 0 |
5353
| nfd | helm | node-feature-discovery | 0.18.3 | 1 |
@@ -177,7 +177,6 @@ _No images extracted._
177177

178178
### network-operator
179179

180-
- `busybox:1.38@sha256:fd8d9aa63ba2f0982b5304e1ee8d3b90a210bc1ffb5314d980eb6962f1a9715d`
181180
- `nvcr.io/nvidia/cloud-native/network-operator:v26.1.1`
182181
- `nvcr.io/nvidia/doca/doca_telemetry:1.22.5-doca3.1.0-host`
183182
- `nvcr.io/nvidia/mellanox/doca-driver:doca3.2.0-25.10-1.2.8.0-2`
@@ -206,7 +205,7 @@ _No images extracted._
206205
### nodewright-customizations
207206

208207
- `ghcr.io/nvidia/nodewright-packages/nvidia-setup:0.3.0@sha256:f17c951d60b519d097c20a3d9f49668f043a996adb31b9bb4db24a112a8f60a2`
209-
- `ghcr.io/nvidia/nodewright-packages/nvidia-setup:0.4.0@sha256:187c56c6d2104d48c7632c293def79c714b04dd85c587b7793818ceba9d4fb04`
208+
- `ghcr.io/nvidia/nodewright-packages/nvidia-setup:0.5.0@sha256:f3994267c9b5e62fb7720012dcd4d473fc2f8474f4276e203bba842c970307ad`
210209
- `ghcr.io/nvidia/nodewright-packages/nvidia-tuned:0.3.1@sha256:6dedbbb8627dec88acdfd68867f60a3ddca88e5f4c62beddfb704a8e0cfe51d1`
211210
- `ghcr.io/nvidia/nodewright-packages/nvidia-tuning-gke:0.1.2@sha256:6671d49f006afdbeefd8858f1fa1216f7748205bc42edab3340210a2cc459a81`
212211
- `ghcr.io/nvidia/skyhook-packages/shellscript:1.1.1`

pkg/tuning/compute_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ func TestCompute_Structure(t *testing.T) {
3737
t.Fatalf("Compute: %v", err)
3838
}
3939
want := []wantRow{
40+
{"aks", "a100", "h100", "nvidia-setup", "nvidia-tuned"},
41+
{"aks", "h100", "-", "nvidia-setup", "nvidia-tuned"},
4042
{"bcm", "*", "h100", "nvidia-setup", ""},
4143
{"bcm", "h100", "-", "nvidia-setup", ""},
4244
{"eks", "a100", "h100", "nvidia-setup", "nvidia-tuned"},

recipes/components/network-operator/manifests/ib-node-config-aks.yaml

Lines changed: 0 additions & 156 deletions
This file was deleted.

recipes/components/nodewright-customizations/manifests/tuning.yaml

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
# Nodewright EKS Ubuntu GPU Customization
15+
# Nodewright Ubuntu GPU Customization (EKS and AKS)
1616
# Minimal templating - only tolerations/nodeSelectors are dynamic for CLI flag support
1717
#
1818
# This customization configures GPU nodes on Ubuntu with:
@@ -49,6 +49,11 @@ spec:
4949
# Tolerate-all default, matching ParseTolerations()/DefaultTolerations()
5050
# (operator Exists, no key). Only reached if no acceleratedTolerations are
5151
# injected from scheduling defaults/flags.
52+
# AKS caveat: AKS admission collapses a pod toleration list to just the
53+
# wildcard when one is present, which defeats the nodewright operator
54+
# drain exemption for its own package pods and deadlocks packages that
55+
# declare interrupts (NVIDIA/nodewright#296). On AKS always inject keyed
56+
# acceleratedTolerations (for example nvidia.com/gpu).
5257
- operator: Exists
5358
{{- end }}
5459
# Dynamic: Supports --accelerated-node-selector CLI flag
@@ -65,11 +70,13 @@ spec:
6570
{{- end }}
6671
# Tuning
6772
packages:
68-
# Check for kernel being >= to 6.17.0-1019 and if not install
73+
# Check for kernel being >= to 6.17.0-1019 and if not install.
74+
# On AKS this package is a designed no-op: the aks defaults omit KERNEL
75+
# (AKS manages its own Ubuntu kernel) and ensure_kernel exits early.
6976
nvidia-setup-kernel:
7077
image: ghcr.io/nvidia/nodewright-packages/nvidia-setup
71-
version: "0.4.0"
72-
containerSHA: sha256:187c56c6d2104d48c7632c293def79c714b04dd85c587b7793818ceba9d4fb04
78+
version: "0.5.0"
79+
containerSHA: sha256:f3994267c9b5e62fb7720012dcd4d473fc2f8474f4276e203bba842c970307ad
7380
configMap:
7481
{{- if $cust.service }}
7582
service: {{ $cust.service }}
@@ -104,13 +111,13 @@ spec:
104111
service: {{ $cust.service }}
105112
{{- end }}
106113
dependsOn:
107-
nvidia-setup-kernel: "0.4.0"
114+
nvidia-setup-kernel: "0.5.0"
108115

109116
# Full setup after kernel is in place
110117
nvidia-setup-full:
111118
image: ghcr.io/nvidia/nodewright-packages/nvidia-setup
112-
version: "0.4.0"
113-
containerSHA: sha256:187c56c6d2104d48c7632c293def79c714b04dd85c587b7793818ceba9d4fb04
119+
version: "0.5.0"
120+
containerSHA: sha256:f3994267c9b5e62fb7720012dcd4d473fc2f8474f4276e203bba842c970307ad
114121
interrupt:
115122
type: reboot
116123
resources:

recipes/overlays/a100-aks-training.yaml

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,6 @@ spec:
3434
- name: K8s.server.version
3535
value: ">= 1.30"
3636

37-
# Nodewright customizations omitted — Nodewright packages do not support
38-
# service: aks. The nodewright-operator itself is inherited from base
39-
# and still deploys. This follows the H100 AKS training pattern.
4037
componentRefs:
4138
# A100-specific GPU Operator overrides (inherits valuesFile from aks-training)
4239
- name: gpu-operator
@@ -45,10 +42,27 @@ spec:
4542
- nfd
4643
- cert-manager
4744
- kube-prometheus-stack
45+
- nodewright-customizations
4846
overrides:
4947
gdrcopy:
5048
enabled: true
5149

50+
# A100 reuses the h100 nodewright tuning profile (tuning.yaml), mirroring
51+
# a100-eks-training: nvidia-setup ships aks configs only for aks-h100, and
52+
# per the nodewright maintainer the h100 tuning is the correct profile for
53+
# A100 (the A100-vs-H100 deltas pertain only to baremetal). The recipe
54+
# criteria above stays a100; only this tuning profile selector is h100.
55+
- name: nodewright-customizations
56+
type: Helm
57+
manifestFiles:
58+
- components/nodewright-customizations/manifests/tuning.yaml
59+
overrides:
60+
service: aks
61+
accelerator: h100
62+
intent: multiNodeTraining
63+
dependencyRefs:
64+
- nodewright-operator
65+
5266
- name: nfd
5367
type: Helm
5468
overrides:

recipes/overlays/aks.yaml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,16 @@ spec:
5353
# Manifests deliver the full RDMA stack that the Helm chart does not template:
5454
# - NicClusterPolicy: MOFED driver, RDMA shared device plugin, DOCA telemetry
5555
# - NFD NodeFeatureRule: labels IB-capable nodes (pci-15b3.present=true)
56-
# - ib-node-config: host MEMLOCK limits so workloads inherit unlimited rlimit
56+
# Host MEMLOCK limits and IB module loading moved to nodewright
57+
# (nvidia-setup aks-h100 via the nodewright-customizations tuning manifest,
58+
# wired in the accelerator overlays), replacing the privileged
59+
# ib-node-config DaemonSet.
5760
# Reference: https://azure.github.io/aks-rdma-infiniband/configurations/network-operator
5861
#
5962
# RDMA is enabled by default. To opt out at bundle time:
6063
# --set networkoperator:enabled=false \
61-
# --set gpuoperator:driver.rdma.useHostMofed=false
64+
# --set gpuoperator:driver.rdma.useHostMofed=false \
65+
# --set nodewrightcustomizations:enabled=false
6266
- name: network-operator
6367
type: Helm
6468
source: https://helm.ngc.nvidia.com/nvidia
@@ -67,11 +71,11 @@ spec:
6771
manifestFiles:
6872
- components/network-operator/manifests/nfd-network-rule.yaml
6973
- components/network-operator/manifests/nic-cluster-policy-aks.yaml
70-
- components/network-operator/manifests/ib-node-config-aks.yaml
7174
dependencyRefs:
7275
- nfd
7376
- cert-manager
7477

78+
7579
# Prometheus persistent storage (provide --storage-class at bundle time, e.g. managed-csi)
7680
- name: kube-prometheus-stack
7781
type: Helm

recipes/overlays/h100-aks-inference.yaml

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,29 @@ spec:
3232
- name: K8s.server.version
3333
value: ">= 1.32.4"
3434

35-
# Nodewright customizations omitted — Nodewright packages do not support
36-
# service: aks. The nodewright-operator itself is inherited from base
37-
# and still deploys. This follows the same pattern as Kind overlays
38-
# (h100-kind-inference.yaml) which also omit Nodewright tuning.
3935
componentRefs:
4036
- name: gpu-operator
4137
type: Helm
4238
dependencyRefs:
4339
- nfd
4440
- cert-manager
4541
- kube-prometheus-stack
42+
- nodewright-customizations
43+
44+
# Same tuning manifest as EKS: nvidia-setup 0.5.0 supports service: aks
45+
# (aks-h100), covering host IB RDMA + memlock setup that the
46+
# ib-node-config-aks DaemonSet used to perform, and nvidia-tuned applies
47+
# the aks-h100-inference profile.
48+
- name: nodewright-customizations
49+
type: Helm
50+
manifestFiles:
51+
- components/nodewright-customizations/manifests/tuning.yaml
52+
overrides:
53+
service: aks
54+
accelerator: h100
55+
intent: inference
56+
dependencyRefs:
57+
- nodewright-operator
4658

4759
- name: nfd
4860
type: Helm

0 commit comments

Comments
 (0)