From 730bb893d2500628b19ec914d516ee2929feaa1b Mon Sep 17 00:00:00 2001
From: Anurag Guda <anuragmsu@gmail.com>
Date: Fri, 2 Jan 2026 11:11:39 -0600
Subject: [PATCH 1/3] 25.12.0 Release

---
 README.md                                     |   50 +-
 cns.json                                      |  129 +-
 install-guides/RHEL-8-10_Server_x86-arm64.md  |  102 +-
 ...-24-04_Server_Developer-x86-arm64_v15.2.md |  949 +++++
 ...-24-04_Server_Developer-x86-arm64_v16.1.md |  949 +++++
 ...-24-04_Server_Developer-x86-arm64_v17.0.md |  949 +++++
 .../Ubuntu-24-04_Server_x86-arm64_v15.2.md    | 1143 ++++++
 .../Ubuntu-24-04_Server_x86-arm64_v16.1.md    | 1143 ++++++
 .../Ubuntu-24-04_Server_x86-arm64_v17.0.md    | 1143 ++++++
 install-guides/readme.md                      |   13 +-
 playbooks/add-ons.yaml                        |  199 +-
 playbooks/cns-installation.yaml               |   39 +-
 playbooks/cns-uninstall.yaml                  |   14 +-
 playbooks/cns-upgrade.yaml                    |   49 +-
 playbooks/cns-validation.yaml                 |   56 +
 playbooks/cns.yaml                            | 3351 +++++++++++++++++
 playbooks/cns_values.yaml                     |   55 +-
 playbooks/cns_values_15.0.yaml                |   15 +-
 playbooks/cns_values_15.1.yaml                |   13 +-
 playbooks/cns_values_15.2.yaml                |  150 +
 playbooks/cns_values_16.0.yaml                |   15 +-
 playbooks/cns_values_16.1.yaml                |  150 +
 playbooks/cns_values_17.0.yaml                |  151 +
 playbooks/cns_version.yaml                    |    2 +-
 playbooks/files/grafana.yaml                  |    2 +-
 playbooks/gpu_operator.yaml                   |   13 +
 playbooks/k8s-install.yaml                    |   74 +-
 playbooks/microk8s.yaml                       |    8 +-
 playbooks/nvidia-docker.yaml                  |  105 +-
 playbooks/nvidia-driver.yaml                  |   14 +
 .../{ => older_versions}/cns_values_14.0.yaml |    0
 .../{ => older_versions}/cns_values_14.1.yaml |    0
 .../{ => older_versions}/cns_values_14.2.yaml |    0
 playbooks/operators-install.yaml              |   71 +-
 playbooks/operators-upgrade.yaml              |   26 +-
 playbooks/prerequisites.yaml                  |   10 +
 playbooks/readme.md                           |  186 +-
 playbooks/setup.sh                            |    2 +
 .../kubeadm-init-config-new.template          |   34 +
 .../templates/kubeadm-init-config.template    |    2 +-
 40 files changed, 11055 insertions(+), 321 deletions(-)
 create mode 100644 install-guides/Ubuntu-24-04_Server_Developer-x86-arm64_v15.2.md
 create mode 100644 install-guides/Ubuntu-24-04_Server_Developer-x86-arm64_v16.1.md
 create mode 100644 install-guides/Ubuntu-24-04_Server_Developer-x86-arm64_v17.0.md
 create mode 100644 install-guides/Ubuntu-24-04_Server_x86-arm64_v15.2.md
 create mode 100644 install-guides/Ubuntu-24-04_Server_x86-arm64_v16.1.md
 create mode 100644 install-guides/Ubuntu-24-04_Server_x86-arm64_v17.0.md
 create mode 100644 playbooks/cns.yaml
 create mode 100644 playbooks/cns_values_15.2.yaml
 create mode 100644 playbooks/cns_values_16.1.yaml
 create mode 100644 playbooks/cns_values_17.0.yaml
 rename playbooks/{ => older_versions}/cns_values_14.0.yaml (100%)
 rename playbooks/{ => older_versions}/cns_values_14.1.yaml (100%)
 rename playbooks/{ => older_versions}/cns_values_14.2.yaml (100%)
 create mode 100644 playbooks/templates/kubeadm-init-config-new.template

diff --git a/README.md b/README.md
index 5c259721..2ca3afa9 100755
--- a/README.md
+++ b/README.md
@@ -26,9 +26,9 @@ When NVIDIA Cloud Native Stack batch is released, the previous batch enters main
 
 |  Batch  | Status              |
 | :-----: | :--------------:|
-| [25.7.2](https://github.com/NVIDIA/cloud-native-stack/releases/tag/v25.7.1)                   | Generally Available | 
-| [25.7.1](https://github.com/NVIDIA/cloud-native-stack/releases/tag/v25.7.1)                   | Maintenance | 
-| [25.7.0](https://github.com/NVIDIA/cloud-native-stack/releases/tag/v25.7.0)                   | EOL | 
+| [25.12.0](https://github.com/NVIDIA/cloud-native-stack/releases/tag/v25.12.0)                   | Generally Available | 
+| [25.7.2](https://github.com/NVIDIA/cloud-native-stack/releases/tag/v25.7.2)                   | Maintenance | 
+| [25.7.1](https://github.com/NVIDIA/cloud-native-stack/releases/tag/v25.7.1)                   | EOL | 
 
 `NOTE:` CNS Version 15.0 and above is Now supports Ubuntu 24.04
 
@@ -36,27 +36,28 @@ For more information, Refer [Cloud Native Stack Releases](https://github.com/NVI
 
 ## Component Matrix
 
-#### Cloud Native Stack Batch 25.7.2 (Release Date: 2nd October 2025)
+#### Cloud Native Stack Batch 25.12.0 (Release Date: 2 January 2026)
 
-| CNS Version               | 16.0    | 15.1 | 14.2 |
+| CNS Version               | 17.0    | 16.1 | 15.2 |
 | :-----:                   | :-----: | :------: | :------: |
 | Platforms                 | <ul><li>NVIDIA Certified Server (x86 & arm64)</li><li>DGX Server</li></ul> | <ul><li>NVIDIA Certified Server (x86 & arm64)</li><li>DGX Server</li></ul> | <ul><li>NVIDIA Certified Server (x86 & arm64)</li><li>DGX Server</li></ul> |
 | Supported OS              |  <ul><li>Ubuntu 24.04 LTS</li></ul> |  <ul><li>Ubuntu 24.04 LTS</li></ul> |  <ul><li>Ubuntu 22.04 LTS</li></ul> |
-| Containerd                | 2.1.3  | 2.1.3  | 2.1.3 |
-| NVIDIA Container Toolkit  | 1.17.8 | 1.17.8 | 1.17.8 |
-| CRI-O                     | 1.33.2 | 1.32.6 | 1.31.10 |
-| Kubernetes                | 1.33.2 | 1.32.6 | 1.31.10 |
-| CNI (Calico)              | 3.30.2 | 3.30.2 |  3.30.2 |
-| NVIDIA GPU Operator       | 25.3.4 | 25.3.4 | 25.3.4 |
-| NVIDIA Network Operator   |  N/A   | 25.4.0 | 25.4.0 |
-| NVIDIA NIM Operator       | 2.0.1  | 2.0.1  | 2.0.1  |
+| Containerd                | 2.2.0  | 2.2.0  | 2.2.0 |
+| NVIDIA Container Toolkit  | 1.18.1 | 1.18.1 | 1.18.1 |
+| CRI-O                     | 1.34.2 | 1.33.6 | 1.32.10 |
+| Kubernetes                | 1.34.2 | 1.33.6 | 1.32.10 |
+| CNI (Calico)              | 3.31.3 | 3.31.3 |  3.31.3 |
+| NVIDIA GPU Operator       | 25.10.1 | 25.10.1 | 25.10.1 |
+| NVIDIA Network Operator   |  N/A   | 25.7.0 | 25.7.0 |
+| NVIDIA NIM Operator       | 3.0.2  | 3.0.2  | 3.0.2  |
 | NVIDIA Nsight Operator    | 1.1.2  | 1.1.2  | 1.1.2  |
-| NVIDIA Data Center Driver | 580.82.07 | 580.82.07 | 580.82.07 |
-| Helm                      | 3.18.3 | 3.18.3  | 3.18.3  |
+| NVIDIA KAI Scheduler      | 0.10.2  | 0.10.2  | 0.10.2 |
+| NVIDIA Data Center Driver | 580.105.08 | 580.105.08 | 580.105.08 |
+| Helm                      | 4.0.4 | 4.0.4  | 4.0.4 |
 
-> NOTE: NVIDIA Network Operator is not Supported with CNS 16.0 yet
+> NOTE: NVIDIA Network Operator is not Supported with CNS 17.0 yet
 
-> Note: To Previous Cloud Native Stack release information can be found [here](https://github.com/NVIDIA/cloud-native-stack/tree/24.11.1?tab=readme-ov-file#nvidia-cloud-native-stack-component-matrix)
+> Note: To Previous Cloud Native Stack release information can be found [here](https://github.com/NVIDIA/cloud-native-stack/tree/25.7.2?tab=readme-ov-file#nvidia-cloud-native-stack-component-matrix)
 
 `NOTE:` Cloud Native Stack versions are available with the master branch but it's recommend to use the specific branch.
 
@@ -66,6 +67,7 @@ For more information, Refer [Cloud Native Stack Releases](https://github.com/NVI
   - [GPU Operator](https://github.com/NVIDIA/gpu-operator)
   - [Network Operator](https://github.com/Mellanox/network-operator)  
   - [NVIDIA NIM Operator](https://docs.nvidia.com/nim-operator/latest/index.html)
+  - [NVIDIA KAI Scheduler](https://github.com/NVIDIA/KAI-Scheduler/tree/main)
   - [NVIDIA Nsight Operator](https://catalog.ngc.nvidia.com/orgs/nvidia/teams/devtools/helm-charts/nsight-operator)
   - [FeatureGates](https://github.com/NVIDIA/cloud-native-stack/tree/master/playbooks#enable-feature-gates-to-cloud-native-stack)
 - [MicroK8s on CNS](https://github.com/NVIDIA/cloud-native-stack/tree/master/playbooks#enable-microk8s)
@@ -75,15 +77,17 @@ For more information, Refer [Cloud Native Stack Releases](https://github.com/NVI
 - [LoadBalancer on CNS](https://github.com/NVIDIA/cloud-native-stack/tree/master/playbooks#load-balancer-on-cns)
 - [Kserve](https://github.com/NVIDIA/cloud-native-stack/tree/master/playbooks#enable-kserve-on-cns)
 - [LeaderWorkerSet(lws)](https://github.com/NVIDIA/cloud-native-stack/tree/master/playbooks#enable-leaderworkerset)
+- [Volcano](https://volcano.sh/en/docs/)
 
-| CNS Version               | 16.0    | 15.1 | 14.2 |
+| CNS Version               | 17.0    | 16.1 | 15.2 |
 | :-----:                   | :-----: | :------: | :------: |
-| MicroK8s                  | 1.33    | 1.32     | 1.31 |
-| KServe                    | <br /> **0.15** <br /> <br /> <ul><li>Istio: 1.23.2</li><li>Knative: 1.15.7</li><li>CertManager: 1.16.1</li></ul> | <br /> **0.15** <br /> <br /> <ul><li>Istio: 1.23.2</li><li>Knative: 1.15.7</li><li>CertManager: 1.16.1</li></ul>  | <br /> **0.15** <br /> <br /> <ul><li>Istio: 1.23.2</li><li>Knative: 1.15.7</li><li>CertManager: 1.16.1</li></ul> | 
-| LeaderWorkerSet           | 0.6.2 | 0.6.2 | 0.6.2|
-| LoadBalancer              | MetalLB: 0.15.2| MetalLB: 0.15.2 | MetalLB: 0.15.2|
+| MicroK8s                  | 1.34    | 1.33     | 1.32 |
+| KServe                    | <br /> **0.16** <br /> <br /> <ul><li>Istio: 1.28.0</li><li>Knative: 1.20.0</li><li>CertManager: 1.19.1</li></ul> | <br /> **0.16** <br /> <br /> <ul><li>Istio: 1.28.0</li><li>Knative: 1.20.0</li><li>CertManager: 1.19.1</li></ul>  | <br /> **0.16** <br /> <br /> <ul><li>Istio: 1.28.0</li><li>Knative: 1.20.0</li><li>CertManager: 1.19.1</li></ul> | 
+| LeaderWorkerSet           | 0.7.0 | 0.7.0 | 0.7.0 |
+| Volcano Scheduler         | 1.13.0 | 1.13.0 | 1.13.0 |
+| LoadBalancer              | MetalLB: 0.15.3| MetalLB: 0.15.3 | MetalLB: 0.15.3|
 | Storage                   | NFS: 4.0.18 <br /> Local Path: 0.0.31 | NFS: 4.0.18 <br /> Local Path: 0.0.31 | NFS: 4.0.18 <br /> Local Path: 0.0.31 | 
-| Monitoring                | Prometheus: 75.9.0 <br /> Prometheus Adapter: 4.14.1 <br /> Elastic: 9.0.0 | Prometheus: 75.9.0 <br /> Prometheus Adapter: 4.14.1 <br /> Elastic: 9.0.0 | Prometheus: 75.9.0 <br /> Prometheus Adapter: 4.14.1 <br /> Elastic: 9.0.0 |
+| Monitoring                | Prometheus: 79.9.0 <br /> Prometheus Adapter: 5.2.0 <br /> Elastic: 9.2.1 | Prometheus: 79.9.0 <br /> Prometheus Adapter: 5.2.0 <br /> Elastic: 9.2.1 | Prometheus: 79.9.0 <br /> Prometheus Adapter: 4.14.1 <br /> Elastic: 9.2.1 |
 
 # Getting Started
 
diff --git a/cns.json b/cns.json
index 5569ab89..48b8441f 100644
--- a/cns.json
+++ b/cns.json
@@ -1,26 +1,103 @@
 {
 	"name": "Cloud Native Stack",
 	"latest": {
-		"version": "16.0",
-		"release_date": "21 July 2025",
+		"version": "17.0",
+		"release_date": "2 January 2026",
 		"platforms": [{
 				"name": "NVIDIA Certified Server",
 				"CPU architecture": "x86, Arm64",
 				"os": "Ubuntu 24.04 LTS",
 				"components": {
-					"containerd": "2.1.3",
-					"cri-o": "1.33.2",
-					"k8s version": "1.33.2",
-					"Calico": "v3.30.2",
-					"helm version": "3.18.3",
-					"NVIDIA GPU Operator": "25.3.2",
-					"NVIDIA Network Operator": "25.4.0",
-					"NVIDIA DataCenter Driver": "580.65.06"
+					"containerd": "2.2.0",
+					"cri-o": "1.34.2",
+					"k8s version": "1.34.2",
+					"Calico": "v3.31.3",
+					"helm version": "4.0.4",
+					"NVIDIA GPU Operator": "25.10.1",
+					"NVIDIA Network Operator": "N/A",
+					"NVIDIA DataCenter Driver": "580.105.08",
+					"NVIDIA Nim Operator": "3.0.2",
+					"NVIDIA Kai Scheduler": "0.10.2",
+					"NVIDIA Nsight Operator": "1.1.2",
+					"Local Path Provisioner": "0.0.31",
+					"NFS Provisioner": "4.0.18",
+					"Metallb": "0.15.3",
+					"Kserve": "0.16.0",
+					"Prometheus Stack": "79.9.0",
+					"Prometheus Adapter": "5.2.0",
+					"Grafana Operator": "5.18.0",
+					"Elastic Stack": "9.2.1",
+					"LeaderWorkerSet": "0.7.0",
+					"Volcano": "1.13.0"
 				}
 			}
 		]
 	},
 	"versions": [{
+		"17.0": {
+			"release_date": "2 January 2026",
+			"platforms": [{
+					"name": "NVIDIA Certified Server",
+					"CPU architecture": "x86, Arm64",
+					"os": "Ubuntu 24.04 LTS",
+					"components": {
+						"containerd": "2.2.0",
+						"cri-o": "1.34.2",
+						"k8s version": "1.34.2",
+						"Calico": "v3.31.3",
+						"helm version": "4.0.4",
+						"NVIDIA GPU Operator": "25.10.1",
+						"NVIDIA Network Operator": "N/A",
+						"NVIDIA DataCenter Driver": "580.105.08",
+						"NVIDIA Nim Operator": "3.0.2",
+						"NVIDIA Kai Scheduler": "0.10.2",
+						"NVIDIA Nsight Operator": "1.1.2",
+						"Local Path Provisioner": "0.0.31",
+						"NFS Provisioner": "4.0.18",
+						"Metallb": "0.15.3",
+						"Kserve": "0.16.0",
+						"Prometheus Stack": "79.9.0",
+						"Prometheus Adapter": "5.2.0",
+						"Grafana Operator": "5.18.0",
+						"Elastic Stack": "9.2.1",
+						"LeaderWorkerSet": "0.7.0",
+						"Volcano": "1.13.0"
+					}
+				}
+			]
+		},
+		"16.1": {
+			"release_date": "2 January 2026",
+			"platforms": [{
+					"name": "NVIDIA Certified Server",
+					"CPU architecture": "x86, Arm64",
+					"os": "Ubuntu 24.04 LTS",
+					"components": {
+						"containerd": "2.2.0",
+						"cri-o": "1.33.6",
+						"k8s version": "1.33.6",
+						"Calico": "v3.31.3",
+						"helm version": "4.0.4",
+						"NVIDIA GPU Operator": "25.10.1",
+						"NVIDIA Network Operator": "N/A",
+						"NVIDIA DataCenter Driver": "580.105.08",
+						"NVIDIA Nim Operator": "3.0.2",
+						"NVIDIA Kai Scheduler": "0.10.2",
+						"NVIDIA Nsight Operator": "1.1.2",
+						"Local Path Provisioner": "0.0.31",
+						"NFS Provisioner": "4.0.18",
+						"Metallb": "0.15.3",
+						"Kserve": "0.16.0",
+						"Prometheus Stack": "79.9.0",
+						"Prometheus Adapter": "5.2.0",
+						"Grafana Operator": "5.18.0",
+						"Elastic Stack": "9.2.1",
+						"LeaderWorkerSet": "0.7.0",
+						"Volcano": "1.13.0"
+					}
+				}
+			]
+		},
 		"16.0": {
 			"release_date": "21 July 2025",
 			"platforms": [{
@@ -59,6 +136,38 @@
 				}
 			]
 		},
+		"15.2": {
+			"release_date": "2 January 2026",
+			"platforms": [{
+					"name": "NVIDIA Certified Server",
+					"CPU architecture": "x86, Arm64",
+					"os": "Ubuntu 24.04 LTS",
+					"components": {
+						"containerd": "2.2.0",
+						"cri-o": "1.32.10",
+						"k8s version": "1.32.10",
+						"Calico": "v3.31.3",
+						"helm version": "4.0.4",
+						"NVIDIA GPU Operator": "25.3.4",
+						"NVIDIA Network Operator": "25.7.0",
+						"NVIDIA DataCenter Driver": "580.105.08",
+						"NVIDIA Nim Operator": "3.0.2",
+						"NVIDIA Kai Scheduler": "0.10.2",
+						"NVIDIA Nsight Operator": "1.1.2",
+						"Local Path Provisioner": "0.0.31",
+						"NFS Provisioner": "4.0.18",
+						"Metallb": "0.15.3",
+						"Kserve": "0.16.0",
+						"Prometheus Stack": "79.9.0",
+						"Prometheus Adapter": "5.2.0",
+						"Grafana Operator": "5.18.0",
+						"Elastic Stack": "9.2.1",
+						"LeaderWorkerSet": "0.7.0",
+						"Volcano": "1.13.0"
+					}
+				}
+			]
+		},
 		"15.0": {
 			"release_date": "10 April 2025",
 			"platforms": [{
diff --git a/install-guides/RHEL-8-10_Server_x86-arm64.md b/install-guides/RHEL-8-10_Server_x86-arm64.md
index 0c0798dc..47660fbf 100644
--- a/install-guides/RHEL-8-10_Server_x86-arm64.md
+++ b/install-guides/RHEL-8-10_Server_x86-arm64.md
@@ -1,32 +1,32 @@
-# NVIDIA Cloud Native Stack v14.0 - Install Guide for RHEL Server
+# NVIDIA Cloud Native Stack - Install Guide for RHEL Server
 ## Introduction
 
 This document describes how to setup the NVIDIA Cloud Native Stack collection on a single or multiple NVIDIA Certified Systems. NVIDIA Cloud Native Stack can be configured to create a single node Kubernetes cluster or to create/add additional worker nodes to join an existing cluster.
 
-NVIDIA Cloud Native Stack v14.0 includes:
+NVIDIA Cloud Native Stack includes:
 - RHEL 8.10
-- Containerd 2.1.3
-- Kubernetes version 1.31.2
-- Helm 3.17.2
-- NVIDIA GPU Operator 25.3.4
-  - NVIDIA GPU Driver: 580.82.07
-  - NVIDIA Container Toolkit: 1.17.5
-  - NVIDIA K8S Device Plugin: 0.17.1
-  - NVIDIA DCGM-Exporter: 4.1.1-4.0.4
-  - NVIDIA DCGM: 4.1.1-2
-  - NVIDIA GPU Feature Discovery: 0.17.2
-  - NVIDIA K8s MIG Manager: 0.12.1
-  - Node Feature Discovery: 0.17.2
+- Containerd 2.2.0
+- Kubernetes version 1.34.2
+- Helm 4.0.0
+- NVIDIA GPU Operator 25.10.1
+  - NVIDIA GPU Driver: 580.105.08
+  - NVIDIA Container Toolkit: 1.18.1
+  - NVIDIA K8S Device Plugin: 0.18.1
+  - NVIDIA DCGM-Exporter: 4.4.2-4.7.0
+  - NVIDIA DCGM: 4.4.2-1
+  - NVIDIA GPU Feature Discovery: 0.18.2
+  - NVIDIA K8s MIG Manager: 0.13.1
+  - Node Feature Discovery: 0.17.3
   - NVIDIA KubeVirt GPU Device Plugin: 1.3.1
   - NVIDIA GDS Driver: 2.20.5
   - NVIDIA Kata Manager for Kubernetes: 0.2.3
   - NVIDIA Confidential Computing Manager for Kubernetes: 0.1.1
-- NVIDIA Network Operator 25.1.0
-  - Node Feature Discovery: 0.15.6
-  - Mellanox MOFED/DOCA Driver 25.01-0.6.0.0-0
-  - RDMA Shared Device Plugin 1.5.2
+- NVIDIA Network Operator 25.7.0
+  - Node Feature Discovery: 25.7.0
+  - Mellanox MOFED/DOCA Driver 25.07-0.6.1.0-0
+  - RDMA Shared Device Plugin 1.5.3
   - SRIOV Device Plugin 3.9.0
-  - Container Networking Plugins 1.5.0
+  - Container Networking Plugins 1.6.2
   - Multus 4.1.0
   - Whereabouts 0.7.0
 
@@ -167,30 +167,30 @@ sudo sysctl --system
 Download the Containerd for `x86-64` system:
 
 ```
-wget https://github.com/containerd/containerd/releases/download/v2.1.3/containerd-2.1.3-linux-amd64.tar.gz
+wget https://github.com/containerd/containerd/releases/download/v2.2.0/containerd-2.2.0-linux-amd64.tar.gz
 ```
 
 ```
-sudo tar --no-overwrite-dir -C / -xzf containerd-2.1.3-linux-amd64.tar.gz
+sudo tar --no-overwrite-dir -C / -xzf containerd-2.2.0-linux-amd64.tar.gz
 ```
 
 ```
-rm -rf containerd-2.1.3-linux-amd64.tar.gz
+rm -rf containerd-2.2.0-linux-amd64.tar.gz
 ```
 
 
 Download the Containerd for `ARM` system:
 
 ```
-wget https://github.com/containerd/containerd/releases/download/v2.1.3/containerd-2.1.3-linux-arm64.tar.gz
+wget https://github.com/containerd/containerd/releases/download/v2.2.0/containerd-2.2.0-linux-arm64.tar.gz
 ```
 
 ```
-sudo tar --no-overwrite-dir -C / -xzf containerd-2.1.3-linux-arm64.tar.gz
+sudo tar --no-overwrite-dir -C / -xzf containerd-2.2.0-linux-arm64.tar.gz
 ```
 
 ```
-rm -rf containerd-2.1.3-linux-arm64.tar.gz
+rm -rf containerd-2.2.0-linux-arm64.tar.gz
 ```
 
 Install the Containerd
@@ -234,7 +234,7 @@ Setup the Yum repositry for CRI-O
 
 ```
 OS=CentOS_8
-VERSION=1.31
+VERSION=1.34
 ```
 `NOTE:` VERSION (CRI-O version) is same as kubernetes major version 
 
@@ -284,7 +284,7 @@ EOF
 Now execute the below to install kubelet, kubeadm, and kubectl:
 
 ```
- sudo dnf install -y kubelet-1.31.2 kubeadm-1.31.2 kubectl-1.31.2
+ sudo dnf install -y kubelet-1.34.2 kubeadm-1.34.2 kubectl-1.34.2
 ```
 
 Create a kubelet default with your container runtime:
@@ -333,13 +333,13 @@ UUID=DCD4-535C /boot/efi vfat defaults 0 0
 Execute the following command for `Containerd` systems:
 
 ```
-sudo kubeadm init --pod-network-cidr=192.168.32.0/22 --cri-socket=/run/containerd/containerd.sock --kubernetes-version="v1.31.2"
+sudo kubeadm init --pod-network-cidr=192.168.32.0/22 --cri-socket=/run/containerd/containerd.sock --kubernetes-version="v1.34.2"
 ```
 
 Eecute the following command for `CRI-O` systems:
 
 ```
-sudo kubeadm init --pod-network-cidr=192.168.32.0/22 --cri-socket=unix:/run/crio/crio.sock --kubernetes-version="v1.31.2"
+sudo kubeadm init --pod-network-cidr=192.168.32.0/22 --cri-socket=unix:/run/crio/crio.sock --kubernetes-version="v1.34.2"
 ```
 
 Output:
@@ -424,7 +424,7 @@ Output:
 
 ```
 NAME             STATUS   ROLES                  AGE   VERSION
-#yourhost        Ready    control-plane          10m   v1.31.2
+#yourhost        Ready    control-plane          10m   v1.34.2
 ```
 
 Since we are using a single-node Kubernetes cluster, the cluster will not schedule pods on the control plane node by default. To schedule pods on the control plane node, we have to remove the taint by executing the following command:
@@ -438,14 +438,14 @@ for more information.
 
 ### Installing Helm 
 
-Execute the following command to download and install Helm 3.17.2 for `x86-64` system: 
+Execute the following command to download and install Helm 4.0.0 for `x86-64` system: 
 
 ```
-wget https://get.helm.sh/helm-v3.17.2-linux-amd64.tar.gz
+wget https://get.helm.sh/helm-v4.0.0-linux-amd64.tar.gz
 ```
 
 ```
-tar -zxvf helm-v3.17.2-linux-amd64.tar.gz
+tar -zxvf helm-v4.0.0-linux-amd64.tar.gz
  ```
  
  ```
@@ -453,17 +453,17 @@ sudo mv linux-amd64/helm /usr/local/bin/helm
  ```
 
  ```
-rm -rf helm-v3.17.2-linux-amd64.tar.gz linux-amd64/
+rm -rf helm-v4.0.0-linux-amd64.tar.gz linux-amd64/
 ```
 
-Download and install Helm 3.17.2 for `ARM` system: 
+Download and install Helm 4.0.0 for `ARM` system: 
 
 ```
-wget https://get.helm.sh/helm-v3.17.2-linux-arm64.tar.gz
+wget https://get.helm.sh/helm-v4.0.0-linux-arm64.tar.gz
 ```
 
 ```
-tar -zxvf helm-v3.17.2-linux-arm64.tar.gz
+tar -zxvf helm-v4.0.0-linux-arm64.tar.gz
  ```
  
 ```
@@ -471,10 +471,10 @@ sudo mv linux-arm64/helm /usr/local/bin/helm
 ```
 
 ```
-rm -rf helm-v3.17.2-linux-arm64.tar.gz linux-arm64/
+rm -rf helm-v4.0.0-linux-arm64.tar.gz linux-arm64/
 ```
 
-Refer to the Helm 3.17.2 [release notes](https://github.com/helm/helm/releases) and the [Installing Helm guide](https://helm.sh/docs/using_helm/#installing-helm) for more information.
+Refer to the Helm 4.0.0 [release notes](https://github.com/helm/helm/releases) and the [Installing Helm guide](https://helm.sh/docs/using_helm/#installing-helm) for more information.
 
 
 ### Adding an Additional Node to NVIDIA Cloud Native Stack
@@ -511,8 +511,8 @@ Output:
 
 ```
 NAME             STATUS   ROLES                  AGE   VERSION
-#yourhost        Ready    control-plane          10m   v1.31.2
-#yourhost-worker Ready                           10m   v1.31.2
+#yourhost        Ready    control-plane          10m   v1.34.2
+#yourhost-worker Ready                           10m   v1.34.2
 ```
 
 ### Adding an Additional Node to NVIDIA Cloud Native Stack
@@ -549,8 +549,8 @@ Output:
 
 ```
 NAME             STATUS   ROLES                  AGE   VERSION
-#yourhost        Ready    control-plane          10m   v1.31.2
-#yourhost-worker Ready                           10m   v1.31.2
+#yourhost        Ready    control-plane          10m   v1.34.2
+#yourhost-worker Ready                           10m   v1.34.2
 ```
 
 ### Installing NVIDIA Network Operator
@@ -611,7 +611,7 @@ Update the Helm repo:
 Install Network Operator:
 ```
  kubectl label nodes --all node-role.kubernetes.io/master- --overwrite
- helm install -f --version 25.1.0 ./network-operator-values.yaml -n network-operator --create-namespace --wait network-operator mellanox/network-operator
+ helm install -f --version 25.7.0 ./network-operator-values.yaml -n network-operator --create-namespace --wait network-operator mellanox/network-operator
 ```
 #### Validating the State of the Network Operator
 
@@ -655,7 +655,7 @@ Install GPU Operator:
 `NOTE:` If you installed Network Operator, please skip the below command and follow the [GPU Operator with RDMA](#GPU-Operator-with-RDMA)
 
 ```
- helm install --version 25.3.4 --create-namespace --namespace nvidia-gpu-operator nvidia/gpu-operator --wait --generate-name
+ helm install --version 25.10.1 --create-namespace --namespace nvidia-gpu-operator nvidia/gpu-operator --wait --generate-name
 ```
 
 #### GPU Operator with RDMA 
@@ -666,7 +666,7 @@ Install GPU Operator:
 After Network Operator installation is completed, execute the below command to install the GPU Operator to load nv_peer_mem modules:
 
 ```
- helm install --version 25.3.4 --create-namespace --namespace nvidia-gpu-operator nvidia/gpu-operator  --set driver.rdma.enabled=true  --wait --generate-name
+ helm install --version 25.10.1 --create-namespace --namespace nvidia-gpu-operator nvidia/gpu-operator  --set driver.rdma.enabled=true  --wait --generate-name
 ```
 
 #### GPU Operator with Host MOFED Driver and RDMA 
@@ -674,7 +674,7 @@ After Network Operator installation is completed, execute the below command to i
 If the host is already installed MOFED driver without network operator, execute the below command to install the GPU Operator to load nv_peer_mem module 
 
 ```
- helm install --version 25.3.4 --create-namespace --namespace nvidia-gpu-operator nvidia/gpu-operator --set driver.rdma.enabled=true,driver.rdma.useHostMofed=true --wait --generate-name 
+ helm install --version 25.10.1 --create-namespace --namespace nvidia-gpu-operator nvidia/gpu-operator --set driver.rdma.enabled=true,driver.rdma.useHostMofed=true --wait --generate-name 
 
 ```
 
@@ -683,7 +683,7 @@ If the host is already installed MOFED driver without network operator, execute
 Execute the below command to enable the GPU Direct Storage Driver on GPU Operator 
 
 ```
-helm install --version 25.3.4 --create-namespace --namespace nvidia-gpu-operator nvidia/gpu-operator --set gds.enabled=true
+helm install --version 25.10.1 --create-namespace --namespace nvidia-gpu-operator nvidia/gpu-operator --set gds.enabled=true
 ```
 For more information refer, [GPU Direct Storage](https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/gpu-operator-rdma.html)
 
@@ -1037,7 +1037,7 @@ Output:
 ``` 
 Mon Mar 31 20:39:28 2025
 +-----------------------------------------------------------------------------------------+
-| NVIDIA-SMI 580.82.07             Driver Version: 580.82.07     CUDA Version: 12.8     |
+| NVIDIA-SMI 580.105.08             Driver Version: 580.105.08     CUDA Version: 13.0     |
 |-----------------------------------------+------------------------+----------------------+
 | GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
 | Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
@@ -1174,7 +1174,7 @@ Execute the below commands to uninstall the GPU Operator:
 ```
 $ helm ls
 NAME                    NAMESPACE                      REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
-gpu-operator-1606173805 nvidia-gpu-operator            1               2025-03-31 20:23:28.063421701 +0000 UTC deployed        gpu-operator-25.3.4      v23.3.2 
+gpu-operator-1606173805 nvidia-gpu-operator            1               2025-03-31 20:23:28.063421701 +0000 UTC deployed        gpu-operator-25.10.1      v23.3.2 
 
 $ helm del gpu-operator-1606173805 -n nvidia-gpu-operator
 
@@ -1187,7 +1187,7 @@ Execute the below commands to uninstall the Network Operator:
 ```
 $ helm ls -n network-operator
 NAME            	NAMESPACE       	REVISION	UPDATED                                	STATUS  	CHART                 	APP VERSION
-network-operator	network-operator	1       	2025-03-31 17:09:04.665593336 +0000 UTC	deployed	network-operator-25.1.0	v25.1.0
+network-operator	network-operator	1       	2025-03-31 17:09:04.665593336 +0000 UTC	deployed	network-operator-25.7.0	v25.7.0
 
 $ helm del network-operator -n network-operator
 ```
diff --git a/install-guides/Ubuntu-24-04_Server_Developer-x86-arm64_v15.2.md b/install-guides/Ubuntu-24-04_Server_Developer-x86-arm64_v15.2.md
new file mode 100644
index 00000000..f1400b30
--- /dev/null
+++ b/install-guides/Ubuntu-24-04_Server_Developer-x86-arm64_v15.2.md
@@ -0,0 +1,949 @@
+# NVIDIA Cloud Native Stack v15.2 - Install Guide for Developers
+## Introduction
+
+NVIDIA Cloud Native Stack for Developers is focused to provide the Docker based experince. This document describes how to setup the NVIDIA Cloud Native Stack collection on a single or multiple systems. NVIDIA Cloud Native Stack can be configured to create a single node Kubernetes cluster or to create/add additional worker nodes to join an existing cluster.
+
+NVIDIA Cloud Native Stack v15.2 includes:
+- Ubuntu 24.04 LTS
+- Containerd 2.2.0
+- Kubernetes version 1.32.10
+- Helm 4.0.0
+- NVIDIA GPU Driver: 580.105.08
+- NVIDIA Container Toolkit: 1.18.1
+- NVIDIA GPU Operator 25.10.1
+  - NVIDIA K8S Device Plugin: 0.18.1
+  - NVIDIA DCGM-Exporter: 4.4.2-4.7.0
+  - NVIDIA DCGM: 4.4.2-1
+  - NVIDIA GPU Feature Discovery: 0.18.1
+  - NVIDIA K8s MIG Manager: 0.13.1
+  - Node Feature Discovery: 0.17.3
+  - NVIDIA KubeVirt GPU Device Plugin: 1.3.1
+  - NVIDIA GDS Driver: 2.20.5
+  - NVIDIA Kata Manager for Kubernetes: 0.2.3
+  - NVIDIA Confidential Computing Manager for Kubernetes: 0.1.1
+
+## Table of Contents
+
+- [Prerequisites](#Prerequisites)
+- [Installing the Ubuntu Operating System](#Installing-the-Ubuntu-Operating-System)
+- [Installing NVIDIA Driver](#Installing-NVIDIA-Driver)
+- [Installing Docker and Nvidia Container Toolkit](#Installing-Docker-and-Nvidia-Container-Toolkit)
+- [Update the Docker Default Runtime](#Update-the-Docker-Default-Runtime)
+- [Installing Container Runtime](#Installing-Container-Runtime)
+  - [Installing Containerd](#Installing-Containerd)
+  - [Installing CRI-O](#Installing-CRI-O)
+- [Installing Kubernetes](#Installing-Kubernetes)
+- [Installing Helm](#Installing-Helm)
+- [Adding an Additional Node to NVIDIA Cloud Native Stack](#Adding-additional-node-to-NVIDIA-Cloud-Native-Stack)
+- [Installing the GPU Operator](#Installing-the-GPU-Operator)
+- [Validating the GPU Operator](#Validating-the-GPU-Operator)
+- [Build Docker Images and Deploy on Cloud Native Stack](#Build-Docker-Images-and-Deploy-on-Cloud-Native-Stack) 
+- [Validate NVIDIA Cloud Native Stack with an Application from NGC](#Validate-NVIDIA-Cloud-Native-Stack-with-an-application-from-NGC)
+- [Uninstalling the GPU Operator](#Uninstalling-the-GPU-Operator)
+
+### Prerequisites
+ 
+The following instructions assume the following:
+
+- You have [NVIDIA-Certified Systems](https://docs.nvidia.com/ngc/ngc-deploy-on-premises/nvidia-certified-systems/index.html) with Mellanox CX NICs for x86-64 servers 
+- You have [NVIDIA Qualified Systems](https://www.nvidia.com/en-us/data-center/data-center-gpus/qualified-system-catalog/?start=0&count=50&pageNumber=1&filters=eyJmaWx0ZXJzIjpbXSwic3ViRmlsdGVycyI6eyJwcm9jZXNzb3JUeXBlIjpbIkFSTS1UaHVuZGVyWDIiLCJBUk0tQWx0cmEiXX0sImNlcnRpZmllZEZpbHRlcnMiOnt9LCJwYXlsb2FkIjpbXX0=) for arm64 servers 
+  `NOTE:` For ARM systems, NVIDIA Network Operator is not supported yet. 
+- You will perform a clean install.
+
+To determine if your system qualifies as an NVIDIA Certified System, review the list of NVIDIA Certified Systems [here](https://docs.nvidia.com/ngc/ngc-deploy-on-premises/nvidia-certified-systems/index.html). 
+
+Please note that NVIDIA Cloud Native Stack is validated only on systems with the default kernel (not HWE).
+
+### Installing the Ubuntu Operating System
+These instructions require having Ubuntu Server LTS 24.04 on your system. The Ubuntu Server can be downloaded from http://cdimage.ubuntu.com/releases/24.04/release/.
+
+For more information on installing Ubuntu server please reference the [Ubuntu Server Installation Guide](https://ubuntu.com/tutorials/tutorial-install-ubuntu-server#1-overview).
+
+### Installing NVIDIA Driver 
+Install NVIDIA TRD Driver
+
+```
+sudo apt update 
+```
+```
+wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
+```
+```
+sudo dpkg -i cuda-keyring_1.1-1_all.deb
+```
+
+Update package index:
+
+```
+sudo apt update
+```
+
+Install Cuda Drivers
+
+```
+sudo apt install cuda -y
+```
+
+Once the NVIDIA Drivers installed, please reboot the system and run the below command to validate NVIDIA drivers are loaded 
+
+```
+nvidia-smi
+```
+
+Expected Output:
+
+``` 
+Mon Nov 24 20:39:28 2025
++-----------------------------------------------------------------------------------------+
+| NVIDIA-SMI 580.105.08             Driver Version: 580.105.08     CUDA Version: 13.0       |
+|-----------------------------------------+------------------------+----------------------+
+| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
+| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
+|                                         |                        |               MIG M. |
+|=========================================+========================+======================|
+|   0  NVIDIA A100-SXM4-80GB          On  |   00000000:03:00.0 Off |                    0 |
+| N/A   29C    P0             50W /  275W |       1MiB /  81920MiB |      0%      Default |
+|                                         |                        |             Disabled |
++-----------------------------------------+------------------------+----------------------+
+
++-----------------------------------------------------------------------------------------+
+| Processes:                                                                              |
+|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
+|        ID   ID                                                               Usage      |
+|=========================================================================================|
+|  No running processes found                                                             |
++-----------------------------------------------------------------------------------------+
+```
+
+### Installing Docker and NVIDIA Container Runtime
+
+#### Installing Docker-CE
+
+Set up the repository and update the apt package index:
+
+```
+sudo apt update
+```
+
+Install packages to allow apt to use a repository over HTTPS:
+
+```
+sudo apt install -y \
+    apt-transport-https \
+    ca-certificates \
+    curl \
+    gnupg-agent \
+    software-properties-common
+```
+
+```
+sudo install -m 0755 -d /etc/apt/keyrings
+```
+
+Add Docker's official GPG key:
+
+```
+sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
+```
+
+```
+sudo chmod a+r /etc/apt/keyrings/docker.asc
+```
+Use the following command to set up the stable repository:
+
+```
+echo \
+  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
+  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
+  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
+```
+
+Install Docker Engine - Community
+
+Update the apt package index:
+
+```
+sudo apt update
+```
+
+Install Docker Engine:
+
+```
+sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
+```
+
+Verify that Docker Engine - Community is installed correctly by running the hello-world image:
+
+```
+sudo docker run hello-world
+```
+
+More information on how to install Docker can be found at https://docs.docker.com/install/linux/docker-ce/ubuntu/. 
+
+#### Installing NVIDIA Container Toolkit
+
+Setup the pacakge repository 
+
+```
+distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
+      && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
+      && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
+            sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
+            sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
+```
+
+Update the package index
+
+```
+sudo apt update
+```
+
+Install NVIDIA Conatiner Toolkit
+
+```
+sudo apt install -y nvidia-container-toolkit=1.18.1-1
+```
+
+
+### Update the Docker Default Runtime
+
+
+Edit the docker daemon configuration to add the following line and save the file:
+
+```
+"default-runtime" : "nvidia"
+```
+
+Example: 
+```
+$ sudo nano /etc/docker/daemon.json
+ 
+{
+   "runtimes": {
+   	"nvidia": {
+       	"path": "nvidia-container-runtime",
+           "runtimeArgs": []
+   	}
+   },
+   "default-runtime" : "nvidia"
+}
+```
+
+Now execute the below commands to restart the docker daemon:
+```
+sudo systemctl daemon-reload && sudo systemctl restart docker
+```
+
+#### Validate docker default runtime
+
+Execute the below command to validate docker default runtime as NVIDIA:
+
+```
+$ sudo docker info | grep -i runtime
+```
+
+Output:
+```
+Runtimes: nvidia runc
+Default Runtime: nvidia
+```
+
+
+
+## Installing Container Runtime
+
+You need to install a container runtime into each node in the cluster so that Pods can run there. Currently Cloud Native Stack provides below container runtimes
+
+- [Installing Containerd](#Installing-Containerd)
+- [Installing CRI-O](#Installing-CRI-O)
+
+`NOTE:` Only install one of either `Containerd` or `CRI-O`, not both!
+
+These steps apply to both runtimes.
+
+Set up the repository and update the apt package index:
+
+```
+sudo apt update
+```
+
+Install packages to allow apt to use a repository over HTTPS:
+
+```
+sudo apt install -y apt-transport-https ca-certificates gnupg-agent libseccomp2 autotools-dev debhelper software-properties-common
+```
+
+Configure the `overlay` and `br_netfilter` kernel modules required by Kubernetes:
+
+```
+cat <<EOF | sudo tee /etc/modules-load.d/kubernetes.conf
+overlay
+br_netfilter
+EOF
+```
+
+```
+sudo modprobe overlay
+```
+```
+sudo modprobe br_netfilter
+```
+
+Setup required sysctl params; these persist across reboots.
+```
+cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
+net.bridge.bridge-nf-call-iptables  = 1
+net.ipv4.ip_forward                 = 1
+net.bridge.bridge-nf-call-ip6tables = 1
+EOF
+```
+
+Apply sysctl params without reboot
+```
+sudo sysctl --system
+```
+
+### Installing Containerd(Option 1)
+
+Download the Containerd for `x86-64` system:
+
+```
+wget https://github.com/containerd/containerd/releases/download/v2.2.0/containerd-2.2.0-linux-amd64.tar.gz
+```
+
+```
+sudo tar --no-overwrite-dir -C / -xzf containerd-2.2.0-linux-amd64.tar.gz
+```
+
+```
+rm -rf containerd-2.2.0-linux-amd64.tar.gz
+```
+
+
+Download the Containerd for `ARM` system:
+
+```
+wget https://github.com/containerd/containerd/releases/download/v2.2.0/containerd-2.2.0-linux-arm64.tar.gz
+```
+
+```
+sudo tar --no-overwrite-dir -C / -xzf containerd-2.2.0-linux-arm64.tar.gz
+```
+
+```
+rm -rf containerd-2.2.0-linux-arm64.tar.gz
+```
+
+Install the Containerd
+```
+sudo mkdir -p /etc/containerd
+```
+
+```
+ wget  https://raw.githubusercontent.com/NVIDIA/cloud-native-stack/master/playbooks/files/config.toml
+```
+
+```
+sudo mv config.toml /etc/containerd/ && sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
+```
+
+```
+sudo systemctl restart containerd
+```
+
+Install Runc
+
+```
+wget https://github.com/opencontainers/runc/releases/download/v1.2.6/runc.amd64
+install -m 755 runc.amd64 /usr/local/sbin/runc
+```
+
+Install CNI Plugins
+
+```
+wget https://github.com/containernetworking/plugins/releases/download/v1.6.2/cni-plugins-linux-amd64-v1.6.2.tgz
+sudo mkdir -p /opt/cni/bin
+sudo tar -C /opt/cni/bin -xzvf cni-plugins-linux-amd64-v1.6.2.tgz
+sudo systemctl restart containerd
+```
+
+For additional information on installing Containerd, please reference [Install Containerd with Release Tarball](https://github.com/containerd/containerd/blob/master/docs/cri/installation.md).
+
+### Installing CRI-O(Option 2)
+
+Setup the Apt repositry for CRI-O
+
+```
+OS=xUbuntu_24.04
+VERSION=1.32
+```
+`NOTE:` VERSION (CRI-O version) is same as kubernetes major version 
+
+```
+sudo mkdir -p /usr/share/keyrings
+```
+
+```
+echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
+```
+
+```
+curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo gpg --dearmor -o /usr/share/keyrings/libcontainers-archive-keyring.gpg
+```
+
+```
+echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list
+```
+
+```
+curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/Release.key | sudo gpg --dearmor -o /usr/share/keyrings/libcontainers-crio-archive-keyring.gpg
+```
+
+Install the CRI-O and dependencies 
+
+```
+sudo apt update && sudo apt install cri-o cri-o-runc cri-tools -y
+```
+
+Create OCI hook for NVIDIA Container Runtime
+```
+nano /usr/share/containers/oci/hooks.d/oci-nvidia-hook.json
+```
+
+```
+{
+  "version": "1.0.0",
+  "hook": {
+    "path": "/usr/bin/nvidia-container-runtime-hook",
+    "args": [
+      "nvidia-container-runtime-hook",
+      "prestart"
+    ],
+    "env": [
+      "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
+    ]
+  },
+  "when": {
+    "always": true,
+    "commands": [
+      ".*"
+    ]
+  },
+  "stages": [
+    "prestart"
+  ]
+}
+```
+
+
+Enable and Start the CRI-O service 
+
+```
+sudo systemctl enable crio.service && sudo systemctl start crio.service
+```
+
+### Installing Kubernetes 
+
+Make sure your container runtime has been started and enabled before beginning installation:
+
+```
+ sudo systemctl start containerd && sudo systemctl enable containerd
+```
+
+Execute the following to add apt keys:
+
+```
+ sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl gpg
+```
+
+```
+curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
+sudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg
+```
+
+```
+ sudo mkdir -p  /etc/apt/sources.list.d/
+```
+
+Create kubernetes.list:
+
+```
+echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
+sudo chmod 644 /etc/apt/sources.list.d/kubernetes.list 
+```
+
+Now execute the below to install kubelet, kubeadm, and kubectl:
+
+```
+ sudo apt update
+```
+```
+ sudo apt install -y -q kubelet=1.32.10-1.1  kubectl=1.32.10-1.1  kubeadm=1.32.10-1.1 
+```
+```
+ sudo apt-mark hold kubelet kubeadm kubectl
+```
+
+Create a kubelet default with your container runtime:
+
+`NOTE:`  The container runtime endpoint will be `unix:/run/containerd/containerd.sock` or `unix:/run/crio/crio.sock` depending on which container runtime you chose in the previous steps.
+
+For `Containerd` system:
+
+```
+ cat <<EOF | sudo tee /etc/default/kubelet
+KUBELET_EXTRA_ARGS=--cgroup-driver=systemd --runtime-request-timeout=15m --container-runtime-endpoint="unix:/run/containerd/containerd.sock"
+EOF
+```
+
+For `CRI-O` system:
+
+```
+cat <<EOF | sudo tee /etc/default/kubelet
+KUBELET_EXTRA_ARGS=--cgroup-driver=systemd --runtime-request-timeout=15m --container-runtime-endpoint="unix:/run/crio/crio.sock"
+EOF
+```
+
+Reload the system daemon:
+```
+ sudo systemctl daemon-reload
+```
+
+Disable swap:
+```
+ sudo swapoff -a
+```
+```
+ sudo nano /etc/fstab
+```
+
+`NOTE:` Add a # before all the lines that start with /swap. # is a comment, and the result should look something like this:
+
+```
+UUID=e879fda9-4306-4b5b-8512-bba726093f1d / ext4 defaults 0 0
+UUID=DCD4-535C /boot/efi vfat defaults 0 0
+#/swap.img       none    swap    sw      0       0
+```
+
+#### Initializing the Kubernetes cluster to run as a control-plane node
+
+
+Execute the following command for `Containerd` systems:
+
+```
+sudo kubeadm init --pod-network-cidr=192.168.32.0/22 --cri-socket=/run/containerd/containerd.sock --kubernetes-version="v1.32.10"
+```
+
+Eecute the following command for `CRI-O` systems:
+
+```
+sudo kubeadm init --pod-network-cidr=192.168.32.0/22 --cri-socket=unix:/run/crio/crio.sock --kubernetes-version="v1.32.10"
+```
+
+Output:
+```
+Your Kubernetes control-plane has initialized successfully!
+ 
+To start using your cluster, you need to run the following as a regular user:
+ 
+  mkdir -p $HOME/.kube
+  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
+  sudo chown $(id -u):$(id -g) $HOME/.kube/config
+ 
+Alternatively, if you are the root user, you can run:
+ 
+  export KUBECONFIG=/etc/kubernetes/admin.conf
+ 
+You should now deploy a pod network to the cluster.
+Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
+  https://kubernetes.io/docs/concepts/cluster-administration/addons/
+ 
+Then you can join any number of worker nodes by running the following on each as root:
+ 
+kubeadm join <your-host-IP>:6443 --token 489oi5.sm34l9uh7dk4z6cm \
+        --discovery-token-ca-cert-hash sha256:17165b6c4a4b95d73a3a2a83749a957a10161ae34d2dfd02cd730597579b4b34
+```
+
+
+Following the instructions in the output, execute the commands as shown below:
+
+```
+ mkdir -p $HOME/.kube
+ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
+ sudo chown $(id -u):$(id -g) $HOME/.kube/config
+```
+
+With the following command, you install a pod-network add-on to the control plane node. We are using calico as the pod-network add-on here:
+
+```
+ kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.2/manifests/calico.yaml 
+```
+
+Update the Calico Daemonset 
+
+```
+kubectl set env daemonset/calico-node -n kube-system IP_AUTODETECTION_METHOD=interface=ens\*,eth\*,enc\*,enp\*
+```
+
+You can execute the below commands to ensure that all pods are up and running:
+
+```
+ kubectl get pods --all-namespaces
+```
+
+Output:
+
+```
+NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
+kube-system   calico-kube-controllers-65b8787765-bjc8h   1/1     Running   0          2m8s
+kube-system   calico-node-c2tmk                          1/1     Running   0          2m8s
+kube-system   coredns-5c98db65d4-d4kgh                   1/1     Running   0          9m8s
+kube-system   coredns-5c98db65d4-h6x8m                   1/1     Running   0          9m8s
+kube-system   etcd-#yourhost                             1/1     Running   0          8m25s
+kube-system   kube-apiserver-#yourhost                   1/1     Running   0          8m7s
+kube-system   kube-controller-manager-#yourhost          1/1     Running   0          8m3s
+kube-system   kube-proxy-6sh42                           1/1     Running   0          9m7s
+kube-system   kube-scheduler-#yourhost                   1/1     Running   0          8m26s
+```
+
+The get nodes command shows that the control-plane node is up and ready:
+
+```
+ kubectl get nodes
+```
+
+Output:
+
+```
+NAME             STATUS   ROLES                  AGE   VERSION
+#yourhost        Ready    control-plane,master   10m   v1.32.10
+```
+
+Since we are using a single-node Kubernetes cluster, the cluster will not schedule pods on the control plane node by default. To schedule pods on the control plane node, we have to remove the taint by executing the following command:
+
+```
+kubectl taint nodes --all node-role.kubernetes.io/control-plane-
+```
+
+Refer to [Installing Kubeadm](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/)
+for more information.
+
+### Installing Helm 
+
+Execute the following command to download and install Helm 4.0.0 for `x86-64` system: 
+
+```
+wget https://get.helm.sh/helm-v4.0.0-linux-amd64.tar.gz
+```
+
+```
+tar -zxvf helm-v4.0.0-linux-amd64.tar.gz
+ ```
+ 
+ ```
+sudo mv linux-amd64/helm /usr/local/bin/helm
+ ```
+
+ ```
+rm -rf helm-v4.0.0-linux-amd64.tar.gz linux-amd64/
+```
+
+Download and install Helm 4.0.0 for `ARM` system: 
+
+```
+wget https://get.helm.sh/helm-v4.0.0-linux-arm64.tar.gz
+```
+
+```
+tar -zxvf helm-v4.0.0-linux-arm64.tar.gz
+ ```
+ 
+```
+sudo mv linux-arm64/helm /usr/local/bin/helm
+```
+
+```
+rm -rf helm-v4.0.0-linux-arm64.tar.gz linux-arm64/
+```
+
+Refer to the Helm 4.0.0 [release notes](https://github.com/helm/helm/releases) and the [Installing Helm guide](https://helm.sh/docs/using_helm/#installing-helm) for more information.
+
+### Adding an Additional Node to NVIDIA Cloud Native Stack
+
+`NOTE:` If you're not adding additional nodes, please skip this step and proceed to the next step [Installing NVIDIA Network Operator](#Installing-NVIDIA-Network-Operator)
+
+Make sure to install the Containerd and Kubernetes packages on additional nodes.
+
+Prerequisites: 
+- [Installing Docker and NVIDIA Container Toolkit](#Installing-Docker-and-NVIDIA-Container-Toolkit)
+- [Installing Containerd](#Installing-Containerd)
+- [Installing Kubernetes](#Installing-Kubernetes)
+- [Disable swap](#Disable-swap)
+
+Once the prerequisites are completed on the additional nodes, execute the below command on the control-plane node and then execute the join command output on an additional node to add the additional node to NVIDIA Cloud Native Stack:
+
+```
+ sudo kubeadm token create --print-join-command
+```
+
+Output:
+```
+example: 
+sudo kubeadm join 10.110.0.34:6443 --token kg2h7r.e45g9uyrbm1c0w3k     --discovery-token-ca-cert-hash sha256:77fd6571644373ea69074dd4af7b077bbf5bd15a3ed720daee98f4b04a8f524e
+```
+`NOTE`: control-plane node and worker node should not have the same node name. 
+
+The get nodes command shows that the master and worker nodes are up and ready:
+
+```
+ kubectl get nodes
+```
+
+Output:
+
+```
+NAME             STATUS   ROLES                  AGE   VERSION
+#yourhost        Ready    control-plane,master   10m   v1.32.10
+#yourhost-worker Ready                           10m   v1.32.10
+```
+
+### Installing GPU Operator
+
+Add the NVIDIA repo:
+
+```
+ helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
+```
+
+Update the Helm repo:
+
+```
+ helm repo update
+```
+
+Install GPU Operator:
+
+`NOTE:` As we are preinstalled with NVIDIA Driver and NVIDIA Container Toolkit, we need to set as `false` when installing the GPU Operator
+
+```
+ helm install --version 25.10.1 --create-namespace --namespace nvidia-gpu-operator --devel nvidia/gpu-operator --set driver.enabled=false,toolkit.enabled=false --wait --generate-name
+```
+
+#### Validating the State of the GPU Operator:
+
+Please note that the installation of the GPU Operator can take a couple of minutes. How long the installation will take depends on your internet speed.
+
+```
+kubectl get pods --all-namespaces | grep -v kube-system
+```
+
+```
+NAMESPACE                NAME                                                              READY   STATUS      RESTARTS   AGE
+default                  gpu-operator-1622656274-node-feature-discovery-master-5cddq96gq   1/1     Running     0          2m39s
+default                  gpu-operator-1622656274-node-feature-discovery-worker-wr88v       1/1     Running     0          2m39s
+default                  gpu-operator-7db468cfdf-mdrdp                                     1/1     Running     0          2m39s
+nvidia-gpu-operator      gpu-feature-discovery-g425f                                       1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-cuda-validator-s6x2p                                       0/1     Completed   0          48s
+nvidia-gpu-operator      nvidia-dcgm-exporter-wtxnx                                        1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-dcgm-jbz94                                                 1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-device-plugin-daemonset-hzzdt                              1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-device-plugin-validator-9nkxq                              0/1     Completed   0          17s
+nvidia-gpu-operator      nvidia-operator-validator-cw4j5                                   1/1     Running     0          2m20s
+
+```
+
+Please refer to the [GPU Operator page](https://ngc.nvidia.com/catalog/helm-charts/nvidia:gpu-operator) on NGC for more information.
+
+For multiple worker nodes, execute the below command to fix the CoreDNS and Node Feature Discovery. 
+
+```
+kubectl delete pods $(kubectl get pods -n kube-system | grep core | awk '{print $1}') -n kube-system; kubectl delete pod $(kubectl get pods -o wide -n nvidia-gpu-operator | grep node-feature-discovery | grep -v master | awk '{print $1}') -n nvidia-gpu-operator
+```
+
+#### GPU Operator with MIG
+
+`NOTE:` Only A100 and A30 GPUs are supported for GPU Operator with MIG
+
+Multi-Instance GPU (MIG) allows GPUs based on the NVIDIA Ampere architecture (such as NVIDIA A100) to be securely partitioned into separate GPU instances for CUDA applications. For more information about enabling the MIG capability, please refer to [GPU Operator with MIG](https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/gpu-operator-mig.html) 
+
+
+### Validating the GPU Operator
+
+GPU Operator validates the  through the nvidia-device-plugin-validation pod and the nvidia-driver-validation pod. If both are completed successfully (see output from kubectl get pods --all-namespaces | grep -v kube-system), NVIDIA Cloud Native Stack is working as expected. This section provides two examples of validating that the GPU is usable from within a pod to validate the  manually.
+
+#### Example 1: nvidia-smi
+
+Execute the following:
+
+```
+cat <<EOF | tee nvidia-smi.yaml
+apiVersion: v1
+kind: Pod
+metadata:
+  name: nvidia-smi
+spec:
+  restartPolicy: OnFailure
+  containers:
+    - name: nvidia-smi
+      image: "nvidia/cuda:12.8.0-base-ubuntu24.04"
+      args: ["nvidia-smi"]
+EOF
+```
+
+```
+kubectl apply -f nvidia-smi.yaml
+```
+
+```
+kubectl logs nvidia-smi
+```
+
+Output:
+``` 
+Mon Nov 24 20:39:28 2025
++-----------------------------------------------------------------------------------------+
+| NVIDIA-SMI 580.105.08             Driver Version: 580.105.08     CUDA Version: 13.0       |
+|-----------------------------------------+------------------------+----------------------+
+| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
+| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
+|                                         |                        |               MIG M. |
+|=========================================+========================+======================|
+|   0  NVIDIA A100-SXM4-80GB          On  |   00000000:03:00.0 Off |                    0 |
+| N/A   29C    P0             50W /  275W |       1MiB /  81920MiB |      0%      Default |
+|                                         |                        |             Disabled |
++-----------------------------------------+------------------------+----------------------+
+
++-----------------------------------------------------------------------------------------+
+| Processes:                                                                              |
+|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
+|        ID   ID                                                               Usage      |
+|=========================================================================================|
+|  No running processes found                                                             |
++-----------------------------------------------------------------------------------------+
+```
+
+#### Example 2: CUDA-Vector-Add
+
+Create a pod YAML file:
+
+```
+$ cat <<EOF | tee cuda-samples.yaml
+apiVersion: v1
+kind: Pod
+metadata:
+  name: cuda-vector-add
+spec:
+  restartPolicy: OnFailure
+  containers:
+    - name: cuda-vector-add
+      image: "k8s.gcr.io/cuda-vector-add:v0.1"
+EOF
+```
+
+Execute the below command to create a sample GPU pod:
+
+```
+$ kubectl apply -f cuda-samples.yaml
+```
+
+Confirm the cuda-samples pod was created:
+
+```
+$ kubectl get pods
+``` 
+
+NVIDIA Cloud Native Stack works as expected if the get pods command shows the pod status as completed.
+
+### Build Docker Images and Deploy on Cloud Native Stack 
+You can build the docker images using docker CLI but you can not use them directly on Cloud Native Stack. Please find the below steps to import the docker image into Cloud Native Stack. 
+
+```
+sudo docker save test-image:0.1.0 > test-image.tgz; sudo ctr -n=k8s.io images import test-image.tgz
+```
+
+### Validate NVIDIA Cloud Native Stack with an Application from NGC
+Another option to validate NVIDIA Cloud Native Stack is by running a demo application hosted on NGC.
+
+NGC is NVIDIA's GPU-optimized software hub. NGC provides a curated set of GPU-optimized software for AI, HPC, and visualization. The content provided by NVIDIA and third-party ISVs simplify building, customizing, and integrating GPU-optimized software into workflows, accelerating the time to solutions for users.
+
+Containers, pre-trained models, Helm charts for Kubernetes deployments, and industry-specific AI toolkits with software development kits (SDKs) are hosted on NGC. For more information about how to deploy an application that is hosted on NGC or the NGC Private Registry, please refer to this [NGC Registry Guide](https://github.com/NVIDIA/cloud-native-stack/blob/master/install-guides/NGC_Registry_Guide_v1.0.md). Visit the [public NGC documentation](https://docs.nvidia.com/ngc) for more information.
+
+The steps in this section use the publicly available DeepStream - Intelligent Video Analytics (IVA) demo application Helm Chart. The application can validate the full NVIDIA Cloud Native Stack and test the connectivity of NVIDIA Cloud Native Stack to remote sensors. DeepStream delivers real-time AI-based video and image understanding and multi-sensor processing on GPUs. For more information, please refer to the [Helm Chart](https://ngc.nvidia.com/catalog/helm-charts/nvidia:video-analytics-demo).
+
+There are two ways to configure the DeepStream - Intelligent Video Analytics Demo Application on your NVIDIA Cloud Native Stack
+
+- Using a camera
+- Using the integrated video file (no camera required)
+
+#### Using a camera
+
+##### Prerequisites: 
+- RTSP Camera stream
+
+Go through the below steps to install the demo application:
+```
+1. helm fetch https://helm.ngc.nvidia.com/nvidia/charts/video-analytics-demo-0.1.9.tgz --untar
+
+2. cd into the folder video-analytics-demo and update the file values.yaml
+
+3. Go to the section Cameras in the values.yaml file and add the address of your IP camera. Read the comments section on how it can be added. Single or multiple cameras can be added as shown below
+
+cameras:
+ camera1: rtsp://XXXX
+```
+
+Execute the following command to deploy the demo application:
+```
+helm install video-analytics-demo --name-template iva
+```
+
+Once the Helm chart is deployed, access the application with the VLC player. See the instructions below. 
+
+#### Using the integrated video file (no camera)
+
+If you dont have a camera input, please execute the below commands to use the default video already integrated into the application:
+
+```
+$ helm fetch https://helm.ngc.nvidia.com/nvidia/charts/video-analytics-demo-0.1.9.tgz
+
+$ helm install video-analytics-demo-0.1.9.tgz --name-template iva
+```
+
+Once the helm chart is deployed, access the application with the VLC player as per the below instructions. 
+For more information about the demo application, please refer to the [application NGC page](https://ngc.nvidia.com/catalog/helm-charts/nvidia:video-analytics-demo)
+
+#### Access from WebUI
+
+Use the below WebUI URL to access the video analytic demo application from the browser:
+```
+http://IPAddress of Node:31115/
+```
+
+#### Access from VLC
+
+Download VLC Player from https://www.videolan.org/vlc/ on the machine where you intend to view the video stream.
+
+View the video stream in VLC by navigating to Media > Open Network Stream > Entering the following URL:
+
+```
+rtsp://IPAddress of Node:31113/ds-test
+```
+
+You should see the video output like below with the AI model detecting objects.
+
+![Deepstream_Video](screenshots/Deepstream.png)
+
+`NOTE:` Video stream in VLC will change if you provide an input RTSP camera.
+
+
+### Uninstalling the GPU Operator 
+
+Execute the below commands to uninstall the GPU Operator:
+
+```
+$ helm ls
+NAME                    NAMESPACE                      REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
+gpu-operator-1606173805 nvidia-gpu-operator            1               2025-11-24 20:23:28.063421701 +0000 UTC deployed        gpu-operator-25.10.1      v25.10.1
+
+$ helm del gpu-operator-1606173805 -n nvidia-gpu-operator
+```
diff --git a/install-guides/Ubuntu-24-04_Server_Developer-x86-arm64_v16.1.md b/install-guides/Ubuntu-24-04_Server_Developer-x86-arm64_v16.1.md
new file mode 100644
index 00000000..8f8cf8b0
--- /dev/null
+++ b/install-guides/Ubuntu-24-04_Server_Developer-x86-arm64_v16.1.md
@@ -0,0 +1,949 @@
+# NVIDIA Cloud Native Stack v16.1 - Install Guide for Developers
+## Introduction
+
+NVIDIA Cloud Native Stack for Developers is focused to provide the Docker based experince. This document describes how to setup the NVIDIA Cloud Native Stack collection on a single or multiple systems. NVIDIA Cloud Native Stack can be configured to create a single node Kubernetes cluster or to create/add additional worker nodes to join an existing cluster.
+
+NVIDIA Cloud Native Stack v16.1 includes:
+- Ubuntu 24.04 LTS
+- Containerd 2.2.0
+- Kubernetes version 1.33.6
+- Helm 4.0.0
+- NVIDIA GPU Driver: 580.105.08
+- NVIDIA Container Toolkit: 1.18.0
+- NVIDIA GPU Operator 25.10.1
+  - NVIDIA K8S Device Plugin: 0.18.1
+  - NVIDIA DCGM-Exporter: 4.4.2-4.7.0
+  - NVIDIA DCGM: 4.4.2-1
+  - NVIDIA GPU Feature Discovery: 0.18.1
+  - NVIDIA K8s MIG Manager: 0.13.1
+  - Node Feature Discovery: 0.17.3
+  - NVIDIA KubeVirt GPU Device Plugin: 1.3.1
+  - NVIDIA GDS Driver: 2.20.5
+  - NVIDIA Kata Manager for Kubernetes: 0.2.3
+  - NVIDIA Confidential Computing Manager for Kubernetes: 0.1.1
+
+## Table of Contents
+
+- [Prerequisites](#Prerequisites)
+- [Installing the Ubuntu Operating System](#Installing-the-Ubuntu-Operating-System)
+- [Installing NVIDIA Driver](#Installing-NVIDIA-Driver)
+- [Installing Docker and Nvidia Container Toolkit](#Installing-Docker-and-Nvidia-Container-Toolkit)
+- [Update the Docker Default Runtime](#Update-the-Docker-Default-Runtime)
+- [Installing Container Runtime](#Installing-Container-Runtime)
+  - [Installing Containerd](#Installing-Containerd)
+  - [Installing CRI-O](#Installing-CRI-O)
+- [Installing Kubernetes](#Installing-Kubernetes)
+- [Installing Helm](#Installing-Helm)
+- [Adding an Additional Node to NVIDIA Cloud Native Stack](#Adding-additional-node-to-NVIDIA-Cloud-Native-Stack)
+- [Installing the GPU Operator](#Installing-the-GPU-Operator)
+- [Validating the GPU Operator](#Validating-the-GPU-Operator)
+- [Build Docker Images and Deploy on Cloud Native Stack](#Build-Docker-Images-and-Deploy-on-Cloud-Native-Stack) 
+- [Validate NVIDIA Cloud Native Stack with an Application from NGC](#Validate-NVIDIA-Cloud-Native-Stack-with-an-application-from-NGC)
+- [Uninstalling the GPU Operator](#Uninstalling-the-GPU-Operator)
+
+### Prerequisites
+ 
+The following instructions assume the following:
+
+- You have [NVIDIA-Certified Systems](https://docs.nvidia.com/ngc/ngc-deploy-on-premises/nvidia-certified-systems/index.html) with Mellanox CX NICs for x86-64 servers 
+- You have [NVIDIA Qualified Systems](https://www.nvidia.com/en-us/data-center/data-center-gpus/qualified-system-catalog/?start=0&count=50&pageNumber=1&filters=eyJmaWx0ZXJzIjpbXSwic3ViRmlsdGVycyI6eyJwcm9jZXNzb3JUeXBlIjpbIkFSTS1UaHVuZGVyWDIiLCJBUk0tQWx0cmEiXX0sImNlcnRpZmllZEZpbHRlcnMiOnt9LCJwYXlsb2FkIjpbXX0=) for arm64 servers 
+  `NOTE:` For ARM systems, NVIDIA Network Operator is not supported yet. 
+- You will perform a clean install.
+
+To determine if your system qualifies as an NVIDIA Certified System, review the list of NVIDIA Certified Systems [here](https://docs.nvidia.com/ngc/ngc-deploy-on-premises/nvidia-certified-systems/index.html). 
+
+Please note that NVIDIA Cloud Native Stack is validated only on systems with the default kernel (not HWE).
+
+### Installing the Ubuntu Operating System
+These instructions require having Ubuntu Server LTS 24.04 on your system. The Ubuntu Server can be downloaded from http://cdimage.ubuntu.com/releases/24.04/release/.
+
+For more information on installing Ubuntu server please reference the [Ubuntu Server Installation Guide](https://ubuntu.com/tutorials/tutorial-install-ubuntu-server#1-overview).
+
+### Installing NVIDIA Driver 
+Install NVIDIA TRD Driver
+
+```
+sudo apt update 
+```
+```
+wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
+```
+```
+sudo dpkg -i cuda-keyring_1.1-1_all.deb
+```
+
+Update package index:
+
+```
+sudo apt update
+```
+
+Install Cuda Drivers
+
+```
+sudo apt install cuda -y
+```
+
+Once the NVIDIA Drivers installed, please reboot the system and run the below command to validate NVIDIA drivers are loaded 
+
+```
+nvidia-smi
+```
+
+Expected Output:
+
+``` 
+Mon Nov 24 20:39:28 2025
++-----------------------------------------------------------------------------------------+
+| NVIDIA-SMI 580.105.08             Driver Version: 580.105.08     CUDA Version: 13.0       |
+|-----------------------------------------+------------------------+----------------------+
+| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
+| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
+|                                         |                        |               MIG M. |
+|=========================================+========================+======================|
+|   0  NVIDIA A100-SXM4-80GB          On  |   00000000:03:00.0 Off |                    0 |
+| N/A   29C    P0             50W /  275W |       1MiB /  81920MiB |      0%      Default |
+|                                         |                        |             Disabled |
++-----------------------------------------+------------------------+----------------------+
+
++-----------------------------------------------------------------------------------------+
+| Processes:                                                                              |
+|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
+|        ID   ID                                                               Usage      |
+|=========================================================================================|
+|  No running processes found                                                             |
++-----------------------------------------------------------------------------------------+
+```
+
+### Installing Docker and NVIDIA Container Runtime
+
+#### Installing Docker-CE
+
+Set up the repository and update the apt package index:
+
+```
+sudo apt update
+```
+
+Install packages to allow apt to use a repository over HTTPS:
+
+```
+sudo apt install -y \
+    apt-transport-https \
+    ca-certificates \
+    curl \
+    gnupg-agent \
+    software-properties-common
+```
+
+```
+sudo install -m 0755 -d /etc/apt/keyrings
+```
+
+Add Docker's official GPG key:
+
+```
+sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
+```
+
+```
+sudo chmod a+r /etc/apt/keyrings/docker.asc
+```
+Use the following command to set up the stable repository:
+
+```
+echo \
+  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
+  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
+  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
+```
+
+Install Docker Engine - Community
+
+Update the apt package index:
+
+```
+sudo apt update
+```
+
+Install Docker Engine:
+
+```
+sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
+```
+
+Verify that Docker Engine - Community is installed correctly by running the hello-world image:
+
+```
+sudo docker run hello-world
+```
+
+More information on how to install Docker can be found at https://docs.docker.com/install/linux/docker-ce/ubuntu/. 
+
+#### Installing NVIDIA Container Toolkit
+
+Setup the pacakge repository 
+
+```
+distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
+      && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
+      && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
+            sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
+            sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
+```
+
+Update the package index
+
+```
+sudo apt update
+```
+
+Install NVIDIA Conatiner Toolkit
+
+```
+sudo apt install -y nvidia-container-toolkit=1.18.1-1
+```
+
+
+### Update the Docker Default Runtime
+
+
+Edit the docker daemon configuration to add the following line and save the file:
+
+```
+"default-runtime" : "nvidia"
+```
+
+Example: 
+```
+$ sudo nano /etc/docker/daemon.json
+ 
+{
+   "runtimes": {
+   	"nvidia": {
+       	"path": "nvidia-container-runtime",
+           "runtimeArgs": []
+   	}
+   },
+   "default-runtime" : "nvidia"
+}
+```
+
+Now execute the below commands to restart the docker daemon:
+```
+sudo systemctl daemon-reload && sudo systemctl restart docker
+```
+
+#### Validate docker default runtime
+
+Execute the below command to validate docker default runtime as NVIDIA:
+
+```
+$ sudo docker info | grep -i runtime
+```
+
+Output:
+```
+Runtimes: nvidia runc
+Default Runtime: nvidia
+```
+
+
+
+## Installing Container Runtime
+
+You need to install a container runtime into each node in the cluster so that Pods can run there. Currently Cloud Native Stack provides below container runtimes
+
+- [Installing Containerd](#Installing-Containerd)
+- [Installing CRI-O](#Installing-CRI-O)
+
+`NOTE:` Only install one of either `Containerd` or `CRI-O`, not both!
+
+These steps apply to both runtimes.
+
+Set up the repository and update the apt package index:
+
+```
+sudo apt update
+```
+
+Install packages to allow apt to use a repository over HTTPS:
+
+```
+sudo apt install -y apt-transport-https ca-certificates gnupg-agent libseccomp2 autotools-dev debhelper software-properties-common
+```
+
+Configure the `overlay` and `br_netfilter` kernel modules required by Kubernetes:
+
+```
+cat <<EOF | sudo tee /etc/modules-load.d/kubernetes.conf
+overlay
+br_netfilter
+EOF
+```
+
+```
+sudo modprobe overlay
+```
+```
+sudo modprobe br_netfilter
+```
+
+Setup required sysctl params; these persist across reboots.
+```
+cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
+net.bridge.bridge-nf-call-iptables  = 1
+net.ipv4.ip_forward                 = 1
+net.bridge.bridge-nf-call-ip6tables = 1
+EOF
+```
+
+Apply sysctl params without reboot
+```
+sudo sysctl --system
+```
+
+### Installing Containerd(Option 1)
+
+Download the Containerd for `x86-64` system:
+
+```
+wget https://github.com/containerd/containerd/releases/download/v2.2.0/containerd-2.2.0-linux-amd64.tar.gz
+```
+
+```
+sudo tar --no-overwrite-dir -C / -xzf containerd-2.2.0-linux-amd64.tar.gz
+```
+
+```
+rm -rf containerd-2.2.0-linux-amd64.tar.gz
+```
+
+
+Download the Containerd for `ARM` system:
+
+```
+wget https://github.com/containerd/containerd/releases/download/v2.2.0/containerd-2.2.0-linux-arm64.tar.gz
+```
+
+```
+sudo tar --no-overwrite-dir -C / -xzf containerd-2.2.0-linux-arm64.tar.gz
+```
+
+```
+rm -rf containerd-2.2.0-linux-arm64.tar.gz
+```
+
+Install the Containerd
+```
+sudo mkdir -p /etc/containerd
+```
+
+```
+ wget  https://raw.githubusercontent.com/NVIDIA/cloud-native-stack/master/playbooks/files/config.toml
+```
+
+```
+sudo mv config.toml /etc/containerd/ && sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
+```
+
+```
+sudo systemctl restart containerd
+```
+
+Install Runc
+
+```
+wget https://github.com/opencontainers/runc/releases/download/v1.2.6/runc.amd64
+install -m 755 runc.amd64 /usr/local/sbin/runc
+```
+
+Install CNI Plugins
+
+```
+wget https://github.com/containernetworking/plugins/releases/download/v1.6.2/cni-plugins-linux-amd64-v1.6.2.tgz
+sudo mkdir -p /opt/cni/bin
+sudo tar -C /opt/cni/bin -xzvf cni-plugins-linux-amd64-v1.6.2.tgz
+sudo systemctl restart containerd
+```
+
+For additional information on installing Containerd, please reference [Install Containerd with Release Tarball](https://github.com/containerd/containerd/blob/master/docs/cri/installation.md).
+
+### Installing CRI-O(Option 2)
+
+Setup the Apt repositry for CRI-O
+
+```
+OS=xUbuntu_24.04
+VERSION=1.33
+```
+`NOTE:` VERSION (CRI-O version) is same as kubernetes major version 
+
+```
+sudo mkdir -p /usr/share/keyrings
+```
+
+```
+echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
+```
+
+```
+curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo gpg --dearmor -o /usr/share/keyrings/libcontainers-archive-keyring.gpg
+```
+
+```
+echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list
+```
+
+```
+curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/Release.key | sudo gpg --dearmor -o /usr/share/keyrings/libcontainers-crio-archive-keyring.gpg
+```
+
+Install the CRI-O and dependencies 
+
+```
+sudo apt update && sudo apt install cri-o cri-o-runc cri-tools -y
+```
+
+Create OCI hook for NVIDIA Container Runtime
+```
+nano /usr/share/containers/oci/hooks.d/oci-nvidia-hook.json
+```
+
+```
+{
+  "version": "1.0.0",
+  "hook": {
+    "path": "/usr/bin/nvidia-container-runtime-hook",
+    "args": [
+      "nvidia-container-runtime-hook",
+      "prestart"
+    ],
+    "env": [
+      "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
+    ]
+  },
+  "when": {
+    "always": true,
+    "commands": [
+      ".*"
+    ]
+  },
+  "stages": [
+    "prestart"
+  ]
+}
+```
+
+
+Enable and Start the CRI-O service 
+
+```
+sudo systemctl enable crio.service && sudo systemctl start crio.service
+```
+
+### Installing Kubernetes 
+
+Make sure your container runtime has been started and enabled before beginning installation:
+
+```
+ sudo systemctl start containerd && sudo systemctl enable containerd
+```
+
+Execute the following to add apt keys:
+
+```
+ sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl gpg
+```
+
+```
+curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
+sudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg
+```
+
+```
+ sudo mkdir -p  /etc/apt/sources.list.d/
+```
+
+Create kubernetes.list:
+
+```
+echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
+sudo chmod 644 /etc/apt/sources.list.d/kubernetes.list 
+```
+
+Now execute the below to install kubelet, kubeadm, and kubectl:
+
+```
+ sudo apt update
+```
+```
+ sudo apt install -y -q kubelet=1.33.6-1.1  kubectl=1.33.6-1.1  kubeadm=1.33.6-1.1 
+```
+```
+ sudo apt-mark hold kubelet kubeadm kubectl
+```
+
+Create a kubelet default with your container runtime:
+
+`NOTE:`  The container runtime endpoint will be `unix:/run/containerd/containerd.sock` or `unix:/run/crio/crio.sock` depending on which container runtime you chose in the previous steps.
+
+For `Containerd` system:
+
+```
+ cat <<EOF | sudo tee /etc/default/kubelet
+KUBELET_EXTRA_ARGS=--cgroup-driver=systemd --runtime-request-timeout=15m --container-runtime-endpoint="unix:/run/containerd/containerd.sock"
+EOF
+```
+
+For `CRI-O` system:
+
+```
+cat <<EOF | sudo tee /etc/default/kubelet
+KUBELET_EXTRA_ARGS=--cgroup-driver=systemd --runtime-request-timeout=15m --container-runtime-endpoint="unix:/run/crio/crio.sock"
+EOF
+```
+
+Reload the system daemon:
+```
+ sudo systemctl daemon-reload
+```
+
+Disable swap:
+```
+ sudo swapoff -a
+```
+```
+ sudo nano /etc/fstab
+```
+
+`NOTE:` Add a # before all the lines that start with /swap. # is a comment, and the result should look something like this:
+
+```
+UUID=e879fda9-4306-4b5b-8512-bba726093f1d / ext4 defaults 0 0
+UUID=DCD4-535C /boot/efi vfat defaults 0 0
+#/swap.img       none    swap    sw      0       0
+```
+
+#### Initializing the Kubernetes cluster to run as a control-plane node
+
+
+Execute the following command for `Containerd` systems:
+
+```
+sudo kubeadm init --pod-network-cidr=192.168.32.0/22 --cri-socket=/run/containerd/containerd.sock --kubernetes-version="v1.33.6"
+```
+
+Eecute the following command for `CRI-O` systems:
+
+```
+sudo kubeadm init --pod-network-cidr=192.168.32.0/22 --cri-socket=unix:/run/crio/crio.sock --kubernetes-version="v1.33.6"
+```
+
+Output:
+```
+Your Kubernetes control-plane has initialized successfully!
+ 
+To start using your cluster, you need to run the following as a regular user:
+ 
+  mkdir -p $HOME/.kube
+  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
+  sudo chown $(id -u):$(id -g) $HOME/.kube/config
+ 
+Alternatively, if you are the root user, you can run:
+ 
+  export KUBECONFIG=/etc/kubernetes/admin.conf
+ 
+You should now deploy a pod network to the cluster.
+Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
+  https://kubernetes.io/docs/concepts/cluster-administration/addons/
+ 
+Then you can join any number of worker nodes by running the following on each as root:
+ 
+kubeadm join <your-host-IP>:6443 --token 489oi5.sm34l9uh7dk4z6cm \
+        --discovery-token-ca-cert-hash sha256:17165b6c4a4b95d73a3a2a83749a957a10161ae34d2dfd02cd730597579b4b34
+```
+
+
+Following the instructions in the output, execute the commands as shown below:
+
+```
+ mkdir -p $HOME/.kube
+ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
+ sudo chown $(id -u):$(id -g) $HOME/.kube/config
+```
+
+With the following command, you install a pod-network add-on to the control plane node. We are using calico as the pod-network add-on here:
+
+```
+ kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.2/manifests/calico.yaml 
+```
+
+Update the Calico Daemonset 
+
+```
+kubectl set env daemonset/calico-node -n kube-system IP_AUTODETECTION_METHOD=interface=ens\*,eth\*,enc\*,enp\*
+```
+
+You can execute the below commands to ensure that all pods are up and running:
+
+```
+ kubectl get pods --all-namespaces
+```
+
+Output:
+
+```
+NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
+kube-system   calico-kube-controllers-65b8787765-bjc8h   1/1     Running   0          2m8s
+kube-system   calico-node-c2tmk                          1/1     Running   0          2m8s
+kube-system   coredns-5c98db65d4-d4kgh                   1/1     Running   0          9m8s
+kube-system   coredns-5c98db65d4-h6x8m                   1/1     Running   0          9m8s
+kube-system   etcd-#yourhost                             1/1     Running   0          8m25s
+kube-system   kube-apiserver-#yourhost                   1/1     Running   0          8m7s
+kube-system   kube-controller-manager-#yourhost          1/1     Running   0          8m3s
+kube-system   kube-proxy-6sh42                           1/1     Running   0          9m7s
+kube-system   kube-scheduler-#yourhost                   1/1     Running   0          8m26s
+```
+
+The get nodes command shows that the control-plane node is up and ready:
+
+```
+ kubectl get nodes
+```
+
+Output:
+
+```
+NAME             STATUS   ROLES                  AGE   VERSION
+#yourhost        Ready    control-plane,master   10m   v1.33.6
+```
+
+Since we are using a single-node Kubernetes cluster, the cluster will not schedule pods on the control plane node by default. To schedule pods on the control plane node, we have to remove the taint by executing the following command:
+
+```
+kubectl taint nodes --all node-role.kubernetes.io/control-plane-
+```
+
+Refer to [Installing Kubeadm](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/)
+for more information.
+
+### Installing Helm 
+
+Execute the following command to download and install Helm 4.0.0 for `x86-64` system: 
+
+```
+wget https://get.helm.sh/helm-v4.0.0-linux-amd64.tar.gz
+```
+
+```
+tar -zxvf helm-v4.0.0-linux-amd64.tar.gz
+ ```
+ 
+ ```
+sudo mv linux-amd64/helm /usr/local/bin/helm
+ ```
+
+ ```
+rm -rf helm-v4.0.0-linux-amd64.tar.gz linux-amd64/
+```
+
+Download and install Helm 4.0.0 for `ARM` system: 
+
+```
+wget https://get.helm.sh/helm-v4.0.0-linux-arm64.tar.gz
+```
+
+```
+tar -zxvf helm-v4.0.0-linux-arm64.tar.gz
+ ```
+ 
+```
+sudo mv linux-arm64/helm /usr/local/bin/helm
+```
+
+```
+rm -rf helm-v4.0.0-linux-arm64.tar.gz linux-arm64/
+```
+
+Refer to the Helm 4.0.0 [release notes](https://github.com/helm/helm/releases) and the [Installing Helm guide](https://helm.sh/docs/using_helm/#installing-helm) for more information.
+
+### Adding an Additional Node to NVIDIA Cloud Native Stack
+
+`NOTE:` If you're not adding additional nodes, please skip this step and proceed to the next step [Installing NVIDIA Network Operator](#Installing-NVIDIA-Network-Operator)
+
+Make sure to install the Containerd and Kubernetes packages on additional nodes.
+
+Prerequisites: 
+- [Installing Docker and NVIDIA Container Toolkit](#Installing-Docker-and-NVIDIA-Container-Toolkit)
+- [Installing Containerd](#Installing-Containerd)
+- [Installing Kubernetes](#Installing-Kubernetes)
+- [Disable swap](#Disable-swap)
+
+Once the prerequisites are completed on the additional nodes, execute the below command on the control-plane node and then execute the join command output on an additional node to add the additional node to NVIDIA Cloud Native Stack:
+
+```
+ sudo kubeadm token create --print-join-command
+```
+
+Output:
+```
+example: 
+sudo kubeadm join 10.110.0.34:6443 --token kg2h7r.e45g9uyrbm1c0w3k     --discovery-token-ca-cert-hash sha256:77fd6571644373ea69074dd4af7b077bbf5bd15a3ed720daee98f4b04a8f524e
+```
+`NOTE`: control-plane node and worker node should not have the same node name. 
+
+The get nodes command shows that the master and worker nodes are up and ready:
+
+```
+ kubectl get nodes
+```
+
+Output:
+
+```
+NAME             STATUS   ROLES                  AGE   VERSION
+#yourhost        Ready    control-plane,master   10m   v1.33.6
+#yourhost-worker Ready                           10m   v1.33.6
+```
+
+### Installing GPU Operator
+
+Add the NVIDIA repo:
+
+```
+ helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
+```
+
+Update the Helm repo:
+
+```
+ helm repo update
+```
+
+Install GPU Operator:
+
+`NOTE:` As we are preinstalled with NVIDIA Driver and NVIDIA Container Toolkit, we need to set as `false` when installing the GPU Operator
+
+```
+ helm install --version 25.10.1 --create-namespace --namespace nvidia-gpu-operator --devel nvidia/gpu-operator --set driver.enabled=false,toolkit.enabled=false --wait --generate-name
+```
+
+#### Validating the State of the GPU Operator:
+
+Please note that the installation of the GPU Operator can take a couple of minutes. How long the installation will take depends on your internet speed.
+
+```
+kubectl get pods --all-namespaces | grep -v kube-system
+```
+
+```
+NAMESPACE                NAME                                                              READY   STATUS      RESTARTS   AGE
+default                  gpu-operator-1622656274-node-feature-discovery-master-5cddq96gq   1/1     Running     0          2m39s
+default                  gpu-operator-1622656274-node-feature-discovery-worker-wr88v       1/1     Running     0          2m39s
+default                  gpu-operator-7db468cfdf-mdrdp                                     1/1     Running     0          2m39s
+nvidia-gpu-operator      gpu-feature-discovery-g425f                                       1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-cuda-validator-s6x2p                                       0/1     Completed   0          48s
+nvidia-gpu-operator      nvidia-dcgm-exporter-wtxnx                                        1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-dcgm-jbz94                                                 1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-device-plugin-daemonset-hzzdt                              1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-device-plugin-validator-9nkxq                              0/1     Completed   0          17s
+nvidia-gpu-operator      nvidia-operator-validator-cw4j5                                   1/1     Running     0          2m20s
+
+```
+
+Please refer to the [GPU Operator page](https://ngc.nvidia.com/catalog/helm-charts/nvidia:gpu-operator) on NGC for more information.
+
+For multiple worker nodes, execute the below command to fix the CoreDNS and Node Feature Discovery. 
+
+```
+kubectl delete pods $(kubectl get pods -n kube-system | grep core | awk '{print $1}') -n kube-system; kubectl delete pod $(kubectl get pods -o wide -n nvidia-gpu-operator | grep node-feature-discovery | grep -v master | awk '{print $1}') -n nvidia-gpu-operator
+```
+
+#### GPU Operator with MIG
+
+`NOTE:` Only A100 and A30 GPUs are supported for GPU Operator with MIG
+
+Multi-Instance GPU (MIG) allows GPUs based on the NVIDIA Ampere architecture (such as NVIDIA A100) to be securely partitioned into separate GPU instances for CUDA applications. For more information about enabling the MIG capability, please refer to [GPU Operator with MIG](https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/gpu-operator-mig.html) 
+
+
+### Validating the GPU Operator
+
+GPU Operator validates the  through the nvidia-device-plugin-validation pod and the nvidia-driver-validation pod. If both are completed successfully (see output from kubectl get pods --all-namespaces | grep -v kube-system), NVIDIA Cloud Native Stack is working as expected. This section provides two examples of validating that the GPU is usable from within a pod to validate the  manually.
+
+#### Example 1: nvidia-smi
+
+Execute the following:
+
+```
+cat <<EOF | tee nvidia-smi.yaml
+apiVersion: v1
+kind: Pod
+metadata:
+  name: nvidia-smi
+spec:
+  restartPolicy: OnFailure
+  containers:
+    - name: nvidia-smi
+      image: "nvidia/cuda:12.8.0-base-ubuntu24.04"
+      args: ["nvidia-smi"]
+EOF
+```
+
+```
+kubectl apply -f nvidia-smi.yaml
+```
+
+```
+kubectl logs nvidia-smi
+```
+
+Output:
+``` 
+Mon Nov 24 20:39:28 2025
++-----------------------------------------------------------------------------------------+
+| NVIDIA-SMI 580.105.08             Driver Version: 580.105.08     CUDA Version: 13.0       |
+|-----------------------------------------+------------------------+----------------------+
+| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
+| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
+|                                         |                        |               MIG M. |
+|=========================================+========================+======================|
+|   0  NVIDIA A100-SXM4-80GB          On  |   00000000:03:00.0 Off |                    0 |
+| N/A   29C    P0             50W /  275W |       1MiB /  81920MiB |      0%      Default |
+|                                         |                        |             Disabled |
++-----------------------------------------+------------------------+----------------------+
+
++-----------------------------------------------------------------------------------------+
+| Processes:                                                                              |
+|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
+|        ID   ID                                                               Usage      |
+|=========================================================================================|
+|  No running processes found                                                             |
++-----------------------------------------------------------------------------------------+
+```
+
+#### Example 2: CUDA-Vector-Add
+
+Create a pod YAML file:
+
+```
+$ cat <<EOF | tee cuda-samples.yaml
+apiVersion: v1
+kind: Pod
+metadata:
+  name: cuda-vector-add
+spec:
+  restartPolicy: OnFailure
+  containers:
+    - name: cuda-vector-add
+      image: "k8s.gcr.io/cuda-vector-add:v0.1"
+EOF
+```
+
+Execute the below command to create a sample GPU pod:
+
+```
+$ kubectl apply -f cuda-samples.yaml
+```
+
+Confirm the cuda-samples pod was created:
+
+```
+$ kubectl get pods
+``` 
+
+NVIDIA Cloud Native Stack works as expected if the get pods command shows the pod status as completed.
+
+### Build Docker Images and Deploy on Cloud Native Stack 
+You can build the docker images using docker CLI but you can not use them directly on Cloud Native Stack. Please find the below steps to import the docker image into Cloud Native Stack. 
+
+```
+sudo docker save test-image:0.1.0 > test-image.tgz; sudo ctr -n=k8s.io images import test-image.tgz
+```
+
+### Validate NVIDIA Cloud Native Stack with an Application from NGC
+Another option to validate NVIDIA Cloud Native Stack is by running a demo application hosted on NGC.
+
+NGC is NVIDIA's GPU-optimized software hub. NGC provides a curated set of GPU-optimized software for AI, HPC, and visualization. The content provided by NVIDIA and third-party ISVs simplify building, customizing, and integrating GPU-optimized software into workflows, accelerating the time to solutions for users.
+
+Containers, pre-trained models, Helm charts for Kubernetes deployments, and industry-specific AI toolkits with software development kits (SDKs) are hosted on NGC. For more information about how to deploy an application that is hosted on NGC or the NGC Private Registry, please refer to this [NGC Registry Guide](https://github.com/NVIDIA/cloud-native-stack/blob/master/install-guides/NGC_Registry_Guide_v1.0.md). Visit the [public NGC documentation](https://docs.nvidia.com/ngc) for more information.
+
+The steps in this section use the publicly available DeepStream - Intelligent Video Analytics (IVA) demo application Helm Chart. The application can validate the full NVIDIA Cloud Native Stack and test the connectivity of NVIDIA Cloud Native Stack to remote sensors. DeepStream delivers real-time AI-based video and image understanding and multi-sensor processing on GPUs. For more information, please refer to the [Helm Chart](https://ngc.nvidia.com/catalog/helm-charts/nvidia:video-analytics-demo).
+
+There are two ways to configure the DeepStream - Intelligent Video Analytics Demo Application on your NVIDIA Cloud Native Stack
+
+- Using a camera
+- Using the integrated video file (no camera required)
+
+#### Using a camera
+
+##### Prerequisites: 
+- RTSP Camera stream
+
+Go through the below steps to install the demo application:
+```
+1. helm fetch https://helm.ngc.nvidia.com/nvidia/charts/video-analytics-demo-0.1.9.tgz --untar
+
+2. cd into the folder video-analytics-demo and update the file values.yaml
+
+3. Go to the section Cameras in the values.yaml file and add the address of your IP camera. Read the comments section on how it can be added. Single or multiple cameras can be added as shown below
+
+cameras:
+ camera1: rtsp://XXXX
+```
+
+Execute the following command to deploy the demo application:
+```
+helm install video-analytics-demo --name-template iva
+```
+
+Once the Helm chart is deployed, access the application with the VLC player. See the instructions below. 
+
+#### Using the integrated video file (no camera)
+
+If you dont have a camera input, please execute the below commands to use the default video already integrated into the application:
+
+```
+$ helm fetch https://helm.ngc.nvidia.com/nvidia/charts/video-analytics-demo-0.1.9.tgz
+
+$ helm install video-analytics-demo-0.1.9.tgz --name-template iva
+```
+
+Once the helm chart is deployed, access the application with the VLC player as per the below instructions. 
+For more information about the demo application, please refer to the [application NGC page](https://ngc.nvidia.com/catalog/helm-charts/nvidia:video-analytics-demo)
+
+#### Access from WebUI
+
+Use the below WebUI URL to access the video analytic demo application from the browser:
+```
+http://IPAddress of Node:31115/
+```
+
+#### Access from VLC
+
+Download VLC Player from https://www.videolan.org/vlc/ on the machine where you intend to view the video stream.
+
+View the video stream in VLC by navigating to Media > Open Network Stream > Entering the following URL:
+
+```
+rtsp://IPAddress of Node:31113/ds-test
+```
+
+You should see the video output like below with the AI model detecting objects.
+
+![Deepstream_Video](screenshots/Deepstream.png)
+
+`NOTE:` Video stream in VLC will change if you provide an input RTSP camera.
+
+
+### Uninstalling the GPU Operator 
+
+Execute the below commands to uninstall the GPU Operator:
+
+```
+$ helm ls
+NAME                    NAMESPACE                      REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
+gpu-operator-1606173805 nvidia-gpu-operator            1               2025-11-24 20:23:28.063421701 +0000 UTC deployed        gpu-operator-25.10.1      v25.10.1
+
+$ helm del gpu-operator-1606173805 -n nvidia-gpu-operator
+```
diff --git a/install-guides/Ubuntu-24-04_Server_Developer-x86-arm64_v17.0.md b/install-guides/Ubuntu-24-04_Server_Developer-x86-arm64_v17.0.md
new file mode 100644
index 00000000..c007e26d
--- /dev/null
+++ b/install-guides/Ubuntu-24-04_Server_Developer-x86-arm64_v17.0.md
@@ -0,0 +1,949 @@
+# NVIDIA Cloud Native Stack v17.0 - Install Guide for Developers
+## Introduction
+
+NVIDIA Cloud Native Stack for Developers is focused to provide the Docker based experince. This document describes how to setup the NVIDIA Cloud Native Stack collection on a single or multiple systems. NVIDIA Cloud Native Stack can be configured to create a single node Kubernetes cluster or to create/add additional worker nodes to join an existing cluster.
+
+NVIDIA Cloud Native Stack v17.0 includes:
+- Ubuntu 24.04 LTS
+- Containerd 2.2.0
+- Kubernetes version 1.34.2
+- Helm 4.0.0
+- NVIDIA GPU Driver: 580.105.08
+- NVIDIA Container Toolkit: 1.18.0
+- NVIDIA GPU Operator 25.10.1
+  - NVIDIA K8S Device Plugin: 0.18.1
+  - NVIDIA DCGM-Exporter: 4.4.2-4.7.0
+  - NVIDIA DCGM: 4.4.2-1
+  - NVIDIA GPU Feature Discovery: 0.18.1
+  - NVIDIA K8s MIG Manager: 0.13.1
+  - Node Feature Discovery: 0.17.3
+  - NVIDIA KubeVirt GPU Device Plugin: 1.3.1
+  - NVIDIA GDS Driver: 2.20.5
+  - NVIDIA Kata Manager for Kubernetes: 0.2.3
+  - NVIDIA Confidential Computing Manager for Kubernetes: 0.1.1
+
+## Table of Contents
+
+- [Prerequisites](#Prerequisites)
+- [Installing the Ubuntu Operating System](#Installing-the-Ubuntu-Operating-System)
+- [Installing NVIDIA Driver](#Installing-NVIDIA-Driver)
+- [Installing Docker and Nvidia Container Toolkit](#Installing-Docker-and-Nvidia-Container-Toolkit)
+- [Update the Docker Default Runtime](#Update-the-Docker-Default-Runtime)
+- [Installing Container Runtime](#Installing-Container-Runtime)
+  - [Installing Containerd](#Installing-Containerd)
+  - [Installing CRI-O](#Installing-CRI-O)
+- [Installing Kubernetes](#Installing-Kubernetes)
+- [Installing Helm](#Installing-Helm)
+- [Adding an Additional Node to NVIDIA Cloud Native Stack](#Adding-additional-node-to-NVIDIA-Cloud-Native-Stack)
+- [Installing the GPU Operator](#Installing-the-GPU-Operator)
+- [Validating the GPU Operator](#Validating-the-GPU-Operator)
+- [Build Docker Images and Deploy on Cloud Native Stack](#Build-Docker-Images-and-Deploy-on-Cloud-Native-Stack) 
+- [Validate NVIDIA Cloud Native Stack with an Application from NGC](#Validate-NVIDIA-Cloud-Native-Stack-with-an-application-from-NGC)
+- [Uninstalling the GPU Operator](#Uninstalling-the-GPU-Operator)
+
+### Prerequisites
+ 
+The following instructions assume the following:
+
+- You have [NVIDIA-Certified Systems](https://docs.nvidia.com/ngc/ngc-deploy-on-premises/nvidia-certified-systems/index.html) with Mellanox CX NICs for x86-64 servers 
+- You have [NVIDIA Qualified Systems](https://www.nvidia.com/en-us/data-center/data-center-gpus/qualified-system-catalog/?start=0&count=50&pageNumber=1&filters=eyJmaWx0ZXJzIjpbXSwic3ViRmlsdGVycyI6eyJwcm9jZXNzb3JUeXBlIjpbIkFSTS1UaHVuZGVyWDIiLCJBUk0tQWx0cmEiXX0sImNlcnRpZmllZEZpbHRlcnMiOnt9LCJwYXlsb2FkIjpbXX0=) for arm64 servers 
+  `NOTE:` For ARM systems, NVIDIA Network Operator is not supported yet. 
+- You will perform a clean install.
+
+To determine if your system qualifies as an NVIDIA Certified System, review the list of NVIDIA Certified Systems [here](https://docs.nvidia.com/ngc/ngc-deploy-on-premises/nvidia-certified-systems/index.html). 
+
+Please note that NVIDIA Cloud Native Stack is validated only on systems with the default kernel (not HWE).
+
+### Installing the Ubuntu Operating System
+These instructions require having Ubuntu Server LTS 24.04 on your system. The Ubuntu Server can be downloaded from http://cdimage.ubuntu.com/releases/24.04/release/.
+
+For more information on installing Ubuntu server please reference the [Ubuntu Server Installation Guide](https://ubuntu.com/tutorials/tutorial-install-ubuntu-server#1-overview).
+
+### Installing NVIDIA Driver 
+Install NVIDIA TRD Driver
+
+```
+sudo apt update 
+```
+```
+wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
+```
+```
+sudo dpkg -i cuda-keyring_1.1-1_all.deb
+```
+
+Update package index:
+
+```
+sudo apt update
+```
+
+Install Cuda Drivers
+
+```
+sudo apt install cuda -y
+```
+
+Once the NVIDIA Drivers installed, please reboot the system and run the below command to validate NVIDIA drivers are loaded 
+
+```
+nvidia-smi
+```
+
+Expected Output:
+
+``` 
+Mon Nov 24 20:39:28 2025
++-----------------------------------------------------------------------------------------+
+| NVIDIA-SMI 580.105.08             Driver Version: 580.105.08     CUDA Version: 13.0       |
+|-----------------------------------------+------------------------+----------------------+
+| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
+| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
+|                                         |                        |               MIG M. |
+|=========================================+========================+======================|
+|   0  NVIDIA A100-SXM4-80GB          On  |   00000000:03:00.0 Off |                    0 |
+| N/A   29C    P0             50W /  275W |       1MiB /  81920MiB |      0%      Default |
+|                                         |                        |             Disabled |
++-----------------------------------------+------------------------+----------------------+
+
++-----------------------------------------------------------------------------------------+
+| Processes:                                                                              |
+|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
+|        ID   ID                                                               Usage      |
+|=========================================================================================|
+|  No running processes found                                                             |
++-----------------------------------------------------------------------------------------+
+```
+
+### Installing Docker and NVIDIA Container Runtime
+
+#### Installing Docker-CE
+
+Set up the repository and update the apt package index:
+
+```
+sudo apt update
+```
+
+Install packages to allow apt to use a repository over HTTPS:
+
+```
+sudo apt install -y \
+    apt-transport-https \
+    ca-certificates \
+    curl \
+    gnupg-agent \
+    software-properties-common
+```
+
+```
+sudo install -m 0755 -d /etc/apt/keyrings
+```
+
+Add Docker's official GPG key:
+
+```
+sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
+```
+
+```
+sudo chmod a+r /etc/apt/keyrings/docker.asc
+```
+Use the following command to set up the stable repository:
+
+```
+echo \
+  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
+  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
+  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
+```
+
+Install Docker Engine - Community
+
+Update the apt package index:
+
+```
+sudo apt update
+```
+
+Install Docker Engine:
+
+```
+sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
+```
+
+Verify that Docker Engine - Community is installed correctly by running the hello-world image:
+
+```
+sudo docker run hello-world
+```
+
+More information on how to install Docker can be found at https://docs.docker.com/install/linux/docker-ce/ubuntu/. 
+
+#### Installing NVIDIA Container Toolkit
+
+Setup the pacakge repository 
+
+```
+distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
+      && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
+      && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
+            sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
+            sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
+```
+
+Update the package index
+
+```
+sudo apt update
+```
+
+Install NVIDIA Conatiner Toolkit
+
+```
+sudo apt install -y nvidia-container-toolkit=1.18.1-1
+```
+
+
+### Update the Docker Default Runtime
+
+
+Edit the docker daemon configuration to add the following line and save the file:
+
+```
+"default-runtime" : "nvidia"
+```
+
+Example: 
+```
+$ sudo nano /etc/docker/daemon.json
+ 
+{
+   "runtimes": {
+   	"nvidia": {
+       	"path": "nvidia-container-runtime",
+           "runtimeArgs": []
+   	}
+   },
+   "default-runtime" : "nvidia"
+}
+```
+
+Now execute the below commands to restart the docker daemon:
+```
+sudo systemctl daemon-reload && sudo systemctl restart docker
+```
+
+#### Validate docker default runtime
+
+Execute the below command to validate docker default runtime as NVIDIA:
+
+```
+$ sudo docker info | grep -i runtime
+```
+
+Output:
+```
+Runtimes: nvidia runc
+Default Runtime: nvidia
+```
+
+
+
+## Installing Container Runtime
+
+You need to install a container runtime into each node in the cluster so that Pods can run there. Currently Cloud Native Stack provides below container runtimes
+
+- [Installing Containerd](#Installing-Containerd)
+- [Installing CRI-O](#Installing-CRI-O)
+
+`NOTE:` Only install one of either `Containerd` or `CRI-O`, not both!
+
+These steps apply to both runtimes.
+
+Set up the repository and update the apt package index:
+
+```
+sudo apt update
+```
+
+Install packages to allow apt to use a repository over HTTPS:
+
+```
+sudo apt install -y apt-transport-https ca-certificates gnupg-agent libseccomp2 autotools-dev debhelper software-properties-common
+```
+
+Configure the `overlay` and `br_netfilter` kernel modules required by Kubernetes:
+
+```
+cat <<EOF | sudo tee /etc/modules-load.d/kubernetes.conf
+overlay
+br_netfilter
+EOF
+```
+
+```
+sudo modprobe overlay
+```
+```
+sudo modprobe br_netfilter
+```
+
+Setup required sysctl params; these persist across reboots.
+```
+cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
+net.bridge.bridge-nf-call-iptables  = 1
+net.ipv4.ip_forward                 = 1
+net.bridge.bridge-nf-call-ip6tables = 1
+EOF
+```
+
+Apply sysctl params without reboot
+```
+sudo sysctl --system
+```
+
+### Installing Containerd(Option 1)
+
+Download the Containerd for `x86-64` system:
+
+```
+wget https://github.com/containerd/containerd/releases/download/v2.2.0/containerd-2.2.0-linux-amd64.tar.gz
+```
+
+```
+sudo tar --no-overwrite-dir -C / -xzf containerd-2.2.0-linux-amd64.tar.gz
+```
+
+```
+rm -rf containerd-2.2.0-linux-amd64.tar.gz
+```
+
+
+Download the Containerd for `ARM` system:
+
+```
+wget https://github.com/containerd/containerd/releases/download/v2.2.0/containerd-2.2.0-linux-arm64.tar.gz
+```
+
+```
+sudo tar --no-overwrite-dir -C / -xzf containerd-2.2.0-linux-arm64.tar.gz
+```
+
+```
+rm -rf containerd-2.2.0-linux-arm64.tar.gz
+```
+
+Install the Containerd
+```
+sudo mkdir -p /etc/containerd
+```
+
+```
+ wget  https://raw.githubusercontent.com/NVIDIA/cloud-native-stack/master/playbooks/files/config.toml
+```
+
+```
+sudo mv config.toml /etc/containerd/ && sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
+```
+
+```
+sudo systemctl restart containerd
+```
+
+Install Runc
+
+```
+wget https://github.com/opencontainers/runc/releases/download/v1.2.6/runc.amd64
+install -m 755 runc.amd64 /usr/local/sbin/runc
+```
+
+Install CNI Plugins
+
+```
+wget https://github.com/containernetworking/plugins/releases/download/v1.6.2/cni-plugins-linux-amd64-v1.6.2.tgz
+sudo mkdir -p /opt/cni/bin
+sudo tar -C /opt/cni/bin -xzvf cni-plugins-linux-amd64-v1.6.2.tgz
+sudo systemctl restart containerd
+```
+
+For additional information on installing Containerd, please reference [Install Containerd with Release Tarball](https://github.com/containerd/containerd/blob/master/docs/cri/installation.md).
+
+### Installing CRI-O(Option 2)
+
+Setup the Apt repositry for CRI-O
+
+```
+OS=xUbuntu_24.04
+VERSION=1.34
+```
+`NOTE:` VERSION (CRI-O version) is same as kubernetes major version 
+
+```
+sudo mkdir -p /usr/share/keyrings
+```
+
+```
+echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
+```
+
+```
+curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo gpg --dearmor -o /usr/share/keyrings/libcontainers-archive-keyring.gpg
+```
+
+```
+echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list
+```
+
+```
+curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/Release.key | sudo gpg --dearmor -o /usr/share/keyrings/libcontainers-crio-archive-keyring.gpg
+```
+
+Install the CRI-O and dependencies 
+
+```
+sudo apt update && sudo apt install cri-o cri-o-runc cri-tools -y
+```
+
+Create OCI hook for NVIDIA Container Runtime
+```
+nano /usr/share/containers/oci/hooks.d/oci-nvidia-hook.json
+```
+
+```
+{
+  "version": "1.0.0",
+  "hook": {
+    "path": "/usr/bin/nvidia-container-runtime-hook",
+    "args": [
+      "nvidia-container-runtime-hook",
+      "prestart"
+    ],
+    "env": [
+      "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
+    ]
+  },
+  "when": {
+    "always": true,
+    "commands": [
+      ".*"
+    ]
+  },
+  "stages": [
+    "prestart"
+  ]
+}
+```
+
+
+Enable and Start the CRI-O service 
+
+```
+sudo systemctl enable crio.service && sudo systemctl start crio.service
+```
+
+### Installing Kubernetes 
+
+Make sure your container runtime has been started and enabled before beginning installation:
+
+```
+ sudo systemctl start containerd && sudo systemctl enable containerd
+```
+
+Execute the following to add apt keys:
+
+```
+ sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl gpg
+```
+
+```
+curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.34/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
+sudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg
+```
+
+```
+ sudo mkdir -p  /etc/apt/sources.list.d/
+```
+
+Create kubernetes.list:
+
+```
+echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.34/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
+sudo chmod 644 /etc/apt/sources.list.d/kubernetes.list 
+```
+
+Now execute the below to install kubelet, kubeadm, and kubectl:
+
+```
+ sudo apt update
+```
+```
+ sudo apt install -y -q kubelet=1.34.2-1.1  kubectl=1.34.2-1.1  kubeadm=1.34.2-1.1 
+```
+```
+ sudo apt-mark hold kubelet kubeadm kubectl
+```
+
+Create a kubelet default with your container runtime:
+
+`NOTE:`  The container runtime endpoint will be `unix:/run/containerd/containerd.sock` or `unix:/run/crio/crio.sock` depending on which container runtime you chose in the previous steps.
+
+For `Containerd` system:
+
+```
+ cat <<EOF | sudo tee /etc/default/kubelet
+KUBELET_EXTRA_ARGS=--cgroup-driver=systemd --runtime-request-timeout=15m --container-runtime-endpoint="unix:/run/containerd/containerd.sock"
+EOF
+```
+
+For `CRI-O` system:
+
+```
+cat <<EOF | sudo tee /etc/default/kubelet
+KUBELET_EXTRA_ARGS=--cgroup-driver=systemd --runtime-request-timeout=15m --container-runtime-endpoint="unix:/run/crio/crio.sock"
+EOF
+```
+
+Reload the system daemon:
+```
+ sudo systemctl daemon-reload
+```
+
+Disable swap:
+```
+ sudo swapoff -a
+```
+```
+ sudo nano /etc/fstab
+```
+
+`NOTE:` Add a # before all the lines that start with /swap. # is a comment, and the result should look something like this:
+
+```
+UUID=e879fda9-4306-4b5b-8512-bba726093f1d / ext4 defaults 0 0
+UUID=DCD4-535C /boot/efi vfat defaults 0 0
+#/swap.img       none    swap    sw      0       0
+```
+
+#### Initializing the Kubernetes cluster to run as a control-plane node
+
+
+Execute the following command for `Containerd` systems:
+
+```
+sudo kubeadm init --pod-network-cidr=192.168.32.0/22 --cri-socket=/run/containerd/containerd.sock --kubernetes-version="v1.34.2"
+```
+
+Eecute the following command for `CRI-O` systems:
+
+```
+sudo kubeadm init --pod-network-cidr=192.168.32.0/22 --cri-socket=unix:/run/crio/crio.sock --kubernetes-version="v1.34.2"
+```
+
+Output:
+```
+Your Kubernetes control-plane has initialized successfully!
+ 
+To start using your cluster, you need to run the following as a regular user:
+ 
+  mkdir -p $HOME/.kube
+  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
+  sudo chown $(id -u):$(id -g) $HOME/.kube/config
+ 
+Alternatively, if you are the root user, you can run:
+ 
+  export KUBECONFIG=/etc/kubernetes/admin.conf
+ 
+You should now deploy a pod network to the cluster.
+Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
+  https://kubernetes.io/docs/concepts/cluster-administration/addons/
+ 
+Then you can join any number of worker nodes by running the following on each as root:
+ 
+kubeadm join <your-host-IP>:6443 --token 489oi5.sm34l9uh7dk4z6cm \
+        --discovery-token-ca-cert-hash sha256:17165b6c4a4b95d73a3a2a83749a957a10161ae34d2dfd02cd730597579b4b34
+```
+
+
+Following the instructions in the output, execute the commands as shown below:
+
+```
+ mkdir -p $HOME/.kube
+ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
+ sudo chown $(id -u):$(id -g) $HOME/.kube/config
+```
+
+With the following command, you install a pod-network add-on to the control plane node. We are using calico as the pod-network add-on here:
+
+```
+ kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.2/manifests/calico.yaml 
+```
+
+Update the Calico Daemonset 
+
+```
+kubectl set env daemonset/calico-node -n kube-system IP_AUTODETECTION_METHOD=interface=ens\*,eth\*,enc\*,enp\*
+```
+
+You can execute the below commands to ensure that all pods are up and running:
+
+```
+ kubectl get pods --all-namespaces
+```
+
+Output:
+
+```
+NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
+kube-system   calico-kube-controllers-65b8787765-bjc8h   1/1     Running   0          2m8s
+kube-system   calico-node-c2tmk                          1/1     Running   0          2m8s
+kube-system   coredns-5c98db65d4-d4kgh                   1/1     Running   0          9m8s
+kube-system   coredns-5c98db65d4-h6x8m                   1/1     Running   0          9m8s
+kube-system   etcd-#yourhost                             1/1     Running   0          8m25s
+kube-system   kube-apiserver-#yourhost                   1/1     Running   0          8m7s
+kube-system   kube-controller-manager-#yourhost          1/1     Running   0          8m3s
+kube-system   kube-proxy-6sh42                           1/1     Running   0          9m7s
+kube-system   kube-scheduler-#yourhost                   1/1     Running   0          8m26s
+```
+
+The get nodes command shows that the control-plane node is up and ready:
+
+```
+ kubectl get nodes
+```
+
+Output:
+
+```
+NAME             STATUS   ROLES                  AGE   VERSION
+#yourhost        Ready    control-plane,master   10m   v1.34.2
+```
+
+Since we are using a single-node Kubernetes cluster, the cluster will not schedule pods on the control plane node by default. To schedule pods on the control plane node, we have to remove the taint by executing the following command:
+
+```
+kubectl taint nodes --all node-role.kubernetes.io/control-plane-
+```
+
+Refer to [Installing Kubeadm](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/)
+for more information.
+
+### Installing Helm 
+
+Execute the following command to download and install Helm 4.0.0 for `x86-64` system: 
+
+```
+wget https://get.helm.sh/helm-v4.0.0-linux-amd64.tar.gz
+```
+
+```
+tar -zxvf helm-v4.0.0-linux-amd64.tar.gz
+ ```
+ 
+ ```
+sudo mv linux-amd64/helm /usr/local/bin/helm
+ ```
+
+ ```
+rm -rf helm-v4.0.0-linux-amd64.tar.gz linux-amd64/
+```
+
+Download and install Helm 4.0.0 for `ARM` system: 
+
+```
+wget https://get.helm.sh/helm-v4.0.0-linux-arm64.tar.gz
+```
+
+```
+tar -zxvf helm-v4.0.0-linux-arm64.tar.gz
+ ```
+ 
+```
+sudo mv linux-arm64/helm /usr/local/bin/helm
+```
+
+```
+rm -rf helm-v4.0.0-linux-arm64.tar.gz linux-arm64/
+```
+
+Refer to the Helm 4.0.0 [release notes](https://github.com/helm/helm/releases) and the [Installing Helm guide](https://helm.sh/docs/using_helm/#installing-helm) for more information.
+
+### Adding an Additional Node to NVIDIA Cloud Native Stack
+
+`NOTE:` If you're not adding additional nodes, please skip this step and proceed to the next step [Installing NVIDIA Network Operator](#Installing-NVIDIA-Network-Operator)
+
+Make sure to install the Containerd and Kubernetes packages on additional nodes.
+
+Prerequisites: 
+- [Installing Docker and NVIDIA Container Toolkit](#Installing-Docker-and-NVIDIA-Container-Toolkit)
+- [Installing Containerd](#Installing-Containerd)
+- [Installing Kubernetes](#Installing-Kubernetes)
+- [Disable swap](#Disable-swap)
+
+Once the prerequisites are completed on the additional nodes, execute the below command on the control-plane node and then execute the join command output on an additional node to add the additional node to NVIDIA Cloud Native Stack:
+
+```
+ sudo kubeadm token create --print-join-command
+```
+
+Output:
+```
+example: 
+sudo kubeadm join 10.110.0.34:6443 --token kg2h7r.e45g9uyrbm1c0w3k     --discovery-token-ca-cert-hash sha256:77fd6571644373ea69074dd4af7b077bbf5bd15a3ed720daee98f4b04a8f524e
+```
+`NOTE`: control-plane node and worker node should not have the same node name. 
+
+The get nodes command shows that the master and worker nodes are up and ready:
+
+```
+ kubectl get nodes
+```
+
+Output:
+
+```
+NAME             STATUS   ROLES                  AGE   VERSION
+#yourhost        Ready    control-plane,master   10m   v1.34.2
+#yourhost-worker Ready                           10m   v1.34.2
+```
+
+### Installing GPU Operator
+
+Add the NVIDIA repo:
+
+```
+ helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
+```
+
+Update the Helm repo:
+
+```
+ helm repo update
+```
+
+Install GPU Operator:
+
+`NOTE:` As we are preinstalled with NVIDIA Driver and NVIDIA Container Toolkit, we need to set as `false` when installing the GPU Operator
+
+```
+ helm install --version 25.10.1 --create-namespace --namespace nvidia-gpu-operator --devel nvidia/gpu-operator --set driver.enabled=false,toolkit.enabled=false --wait --generate-name
+```
+
+#### Validating the State of the GPU Operator:
+
+Please note that the installation of the GPU Operator can take a couple of minutes. How long the installation will take depends on your internet speed.
+
+```
+kubectl get pods --all-namespaces | grep -v kube-system
+```
+
+```
+NAMESPACE                NAME                                                              READY   STATUS      RESTARTS   AGE
+default                  gpu-operator-1622656274-node-feature-discovery-master-5cddq96gq   1/1     Running     0          2m39s
+default                  gpu-operator-1622656274-node-feature-discovery-worker-wr88v       1/1     Running     0          2m39s
+default                  gpu-operator-7db468cfdf-mdrdp                                     1/1     Running     0          2m39s
+nvidia-gpu-operator      gpu-feature-discovery-g425f                                       1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-cuda-validator-s6x2p                                       0/1     Completed   0          48s
+nvidia-gpu-operator      nvidia-dcgm-exporter-wtxnx                                        1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-dcgm-jbz94                                                 1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-device-plugin-daemonset-hzzdt                              1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-device-plugin-validator-9nkxq                              0/1     Completed   0          17s
+nvidia-gpu-operator      nvidia-operator-validator-cw4j5                                   1/1     Running     0          2m20s
+
+```
+
+Please refer to the [GPU Operator page](https://ngc.nvidia.com/catalog/helm-charts/nvidia:gpu-operator) on NGC for more information.
+
+For multiple worker nodes, execute the below command to fix the CoreDNS and Node Feature Discovery. 
+
+```
+kubectl delete pods $(kubectl get pods -n kube-system | grep core | awk '{print $1}') -n kube-system; kubectl delete pod $(kubectl get pods -o wide -n nvidia-gpu-operator | grep node-feature-discovery | grep -v master | awk '{print $1}') -n nvidia-gpu-operator
+```
+
+#### GPU Operator with MIG
+
+`NOTE:` Only A100 and A30 GPUs are supported for GPU Operator with MIG
+
+Multi-Instance GPU (MIG) allows GPUs based on the NVIDIA Ampere architecture (such as NVIDIA A100) to be securely partitioned into separate GPU instances for CUDA applications. For more information about enabling the MIG capability, please refer to [GPU Operator with MIG](https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/gpu-operator-mig.html) 
+
+
+### Validating the GPU Operator
+
+GPU Operator validates the  through the nvidia-device-plugin-validation pod and the nvidia-driver-validation pod. If both are completed successfully (see output from kubectl get pods --all-namespaces | grep -v kube-system), NVIDIA Cloud Native Stack is working as expected. This section provides two examples of validating that the GPU is usable from within a pod to validate the  manually.
+
+#### Example 1: nvidia-smi
+
+Execute the following:
+
+```
+cat <<EOF | tee nvidia-smi.yaml
+apiVersion: v1
+kind: Pod
+metadata:
+  name: nvidia-smi
+spec:
+  restartPolicy: OnFailure
+  containers:
+    - name: nvidia-smi
+      image: "nvidia/cuda:12.8.0-base-ubuntu24.04"
+      args: ["nvidia-smi"]
+EOF
+```
+
+```
+kubectl apply -f nvidia-smi.yaml
+```
+
+```
+kubectl logs nvidia-smi
+```
+
+Output:
+``` 
+Mon Nov 24 20:39:28 2025
++-----------------------------------------------------------------------------------------+
+| NVIDIA-SMI 580.105.08             Driver Version: 580.105.08     CUDA Version: 13.0       |
+|-----------------------------------------+------------------------+----------------------+
+| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
+| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
+|                                         |                        |               MIG M. |
+|=========================================+========================+======================|
+|   0  NVIDIA A100-SXM4-80GB          On  |   00000000:03:00.0 Off |                    0 |
+| N/A   29C    P0             50W /  275W |       1MiB /  81920MiB |      0%      Default |
+|                                         |                        |             Disabled |
++-----------------------------------------+------------------------+----------------------+
+
++-----------------------------------------------------------------------------------------+
+| Processes:                                                                              |
+|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
+|        ID   ID                                                               Usage      |
+|=========================================================================================|
+|  No running processes found                                                             |
++-----------------------------------------------------------------------------------------+
+```
+
+#### Example 2: CUDA-Vector-Add
+
+Create a pod YAML file:
+
+```
+$ cat <<EOF | tee cuda-samples.yaml
+apiVersion: v1
+kind: Pod
+metadata:
+  name: cuda-vector-add
+spec:
+  restartPolicy: OnFailure
+  containers:
+    - name: cuda-vector-add
+      image: "k8s.gcr.io/cuda-vector-add:v0.1"
+EOF
+```
+
+Execute the below command to create a sample GPU pod:
+
+```
+$ kubectl apply -f cuda-samples.yaml
+```
+
+Confirm the cuda-samples pod was created:
+
+```
+$ kubectl get pods
+``` 
+
+NVIDIA Cloud Native Stack works as expected if the get pods command shows the pod status as completed.
+
+### Build Docker Images and Deploy on Cloud Native Stack 
+You can build the docker images using docker CLI but you can not use them directly on Cloud Native Stack. Please find the below steps to import the docker image into Cloud Native Stack. 
+
+```
+sudo docker save test-image:0.1.0 > test-image.tgz; sudo ctr -n=k8s.io images import test-image.tgz
+```
+
+### Validate NVIDIA Cloud Native Stack with an Application from NGC
+Another option to validate NVIDIA Cloud Native Stack is by running a demo application hosted on NGC.
+
+NGC is NVIDIA's GPU-optimized software hub. NGC provides a curated set of GPU-optimized software for AI, HPC, and visualization. The content provided by NVIDIA and third-party ISVs simplify building, customizing, and integrating GPU-optimized software into workflows, accelerating the time to solutions for users.
+
+Containers, pre-trained models, Helm charts for Kubernetes deployments, and industry-specific AI toolkits with software development kits (SDKs) are hosted on NGC. For more information about how to deploy an application that is hosted on NGC or the NGC Private Registry, please refer to this [NGC Registry Guide](https://github.com/NVIDIA/cloud-native-stack/blob/master/install-guides/NGC_Registry_Guide_v1.0.md). Visit the [public NGC documentation](https://docs.nvidia.com/ngc) for more information.
+
+The steps in this section use the publicly available DeepStream - Intelligent Video Analytics (IVA) demo application Helm Chart. The application can validate the full NVIDIA Cloud Native Stack and test the connectivity of NVIDIA Cloud Native Stack to remote sensors. DeepStream delivers real-time AI-based video and image understanding and multi-sensor processing on GPUs. For more information, please refer to the [Helm Chart](https://ngc.nvidia.com/catalog/helm-charts/nvidia:video-analytics-demo).
+
+There are two ways to configure the DeepStream - Intelligent Video Analytics Demo Application on your NVIDIA Cloud Native Stack
+
+- Using a camera
+- Using the integrated video file (no camera required)
+
+#### Using a camera
+
+##### Prerequisites: 
+- RTSP Camera stream
+
+Go through the below steps to install the demo application:
+```
+1. helm fetch https://helm.ngc.nvidia.com/nvidia/charts/video-analytics-demo-0.1.9.tgz --untar
+
+2. cd into the folder video-analytics-demo and update the file values.yaml
+
+3. Go to the section Cameras in the values.yaml file and add the address of your IP camera. Read the comments section on how it can be added. Single or multiple cameras can be added as shown below
+
+cameras:
+ camera1: rtsp://XXXX
+```
+
+Execute the following command to deploy the demo application:
+```
+helm install video-analytics-demo --name-template iva
+```
+
+Once the Helm chart is deployed, access the application with the VLC player. See the instructions below. 
+
+#### Using the integrated video file (no camera)
+
+If you dont have a camera input, please execute the below commands to use the default video already integrated into the application:
+
+```
+$ helm fetch https://helm.ngc.nvidia.com/nvidia/charts/video-analytics-demo-0.1.9.tgz
+
+$ helm install video-analytics-demo-0.1.9.tgz --name-template iva
+```
+
+Once the helm chart is deployed, access the application with the VLC player as per the below instructions. 
+For more information about the demo application, please refer to the [application NGC page](https://ngc.nvidia.com/catalog/helm-charts/nvidia:video-analytics-demo)
+
+#### Access from WebUI
+
+Use the below WebUI URL to access the video analytic demo application from the browser:
+```
+http://IPAddress of Node:31115/
+```
+
+#### Access from VLC
+
+Download VLC Player from https://www.videolan.org/vlc/ on the machine where you intend to view the video stream.
+
+View the video stream in VLC by navigating to Media > Open Network Stream > Entering the following URL:
+
+```
+rtsp://IPAddress of Node:31113/ds-test
+```
+
+You should see the video output like below with the AI model detecting objects.
+
+![Deepstream_Video](screenshots/Deepstream.png)
+
+`NOTE:` Video stream in VLC will change if you provide an input RTSP camera.
+
+
+### Uninstalling the GPU Operator 
+
+Execute the below commands to uninstall the GPU Operator:
+
+```
+$ helm ls
+NAME                    NAMESPACE                      REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
+gpu-operator-1606173805 nvidia-gpu-operator            1               2025-11-24 20:23:28.063421701 +0000 UTC deployed        gpu-operator-25.10.1      v25.10.1
+
+$ helm del gpu-operator-1606173805 -n nvidia-gpu-operator
+```
diff --git a/install-guides/Ubuntu-24-04_Server_x86-arm64_v15.2.md b/install-guides/Ubuntu-24-04_Server_x86-arm64_v15.2.md
new file mode 100644
index 00000000..3d1f1285
--- /dev/null
+++ b/install-guides/Ubuntu-24-04_Server_x86-arm64_v15.2.md
@@ -0,0 +1,1143 @@
+# NVIDIA Cloud Native Stack v15.2 - Install Guide for Ubuntu Server
+## Introduction
+
+This document describes how to setup the NVIDIA Cloud Native Stack collection on a single or multiple NVIDIA Certified Systems. NVIDIA Cloud Native Stack can be configured to create a single node Kubernetes cluster or to create/add additional worker nodes to join an existing cluster.
+
+NVIDIA Cloud Native Stack v15.2 includes:
+- Ubuntu 24.04 LTS
+- Containerd 2.2.0
+- Kubernetes version 1.32.10
+- Helm 4.0.2
+- NVIDIA GPU Operator 25.10.1
+  - NVIDIA GPU Driver: 580.105.08
+  - NVIDIA Container Toolkit: 1.18.1
+  - NVIDIA K8S Device Plugin: 0.18.1
+  - NVIDIA DCGM-Exporter: 4.4.2-4.7.0
+  - NVIDIA DCGM: 4.4.2-1
+  - NVIDIA GPU Feature Discovery: 0.18.1
+  - NVIDIA K8s MIG Manager: 0.13.1
+  - Node Feature Discovery: 0.17.3
+  - NVIDIA KubeVirt GPU Device Plugin: 1.3.1
+  - NVIDIA GDS Driver: 2.20.5
+  - NVIDIA Kata Manager for Kubernetes: 0.2.3
+  - NVIDIA Confidential Computing Manager for Kubernetes: 0.1.1
+- NVIDIA Network Operator 25.7.0
+  - Node Feature Discovery: 25.7.0
+  - Mellanox MOFED/DOCA Driver 25.07-0.6.1.0-0
+  - RDMA Shared Device Plugin 1.5.3
+  - SRIOV Device Plugin 3.9.0
+  - Container Networking Plugins 1.6.2
+  - Multus 4.1.0
+  - Whereabouts 0.7.0
+
+## Table of Contents
+
+- [Prerequisites](#Prerequisites)
+- [Installing the Ubuntu Operating System](#Installing-the-Ubuntu-Operating-System)
+- [Installing Container Runtime](#Installing-Container-Runtime)
+  - [Installing Containerd](#Installing-Containerd)
+  - [Installing CRI-O](#Installing-CRI-O)
+- [Installing Kubernetes](#Installing-Kubernetes)
+- [Installing Helm](#Installing-Helm)
+- [Adding an Additional Node to NVIDIA Cloud Native Stack](#Adding-additional-node-to-NVIDIA-Cloud-Native-Stack)
+- [Installing NVIDIA Network Operator](#Installing-NVIDIA-Network-Operator)
+- [Installing the GPU Operator](#Installing-the-GPU-Operator)
+- [Validating the Network Operator with GPUDirect RDMA](#Validating-the-Network-Operator-with-GPUDirect-RDMA)
+- [Validating the GPU Operator](#Validating-the-GPU-Operator)
+- [Validate NVIDIA Cloud Native Stack with an Application from NGC](#Validate-NVIDIA-Cloud-Native-Stack-with-an-application-from-NGC)
+- [Uninstalling the GPU Operator](#Uninstalling-the-GPU-Operator)
+- [Uninstalling the Network Operator](#Uninstalling-the-Network-Operator)
+
+### Prerequisites
+ 
+The following instructions assume the following:
+
+- You have [NVIDIA-Certified Systems](https://docs.nvidia.com/ngc/ngc-deploy-on-premises/nvidia-certified-systems/index.html) with Mellanox CX NICs for x86-64 servers 
+- You have [NVIDIA Qualified Systems](https://www.nvidia.com/en-us/data-center/data-center-gpus/qualified-system-catalog/?start=0&count=50&pageNumber=1&filters=eyJmaWx0ZXJzIjpbXSwic3ViRmlsdGVycyI6eyJwcm9jZXNzb3JUeXBlIjpbIkFSTS1UaHVuZGVyWDIiLCJBUk0tQWx0cmEiXX0sImNlcnRpZmllZEZpbHRlcnMiOnt9LCJwYXlsb2FkIjpbXX0=) for ARM servers 
+  `NOTE:` For ARM systems, NVIDIA Network Operator is not supported yet.
+- You will perform a clean install.
+
+To determine if your system qualifies as an NVIDIA Certified System, review the list of NVIDIA Certified Systems [here](https://docs.nvidia.com/ngc/ngc-deploy-on-premises/nvidia-certified-systems/index.html). 
+
+Please note that NVIDIA Cloud Native Stack is validated only on systems with the default kernel (not HWE).
+
+
+### Installing the Ubuntu Operating System
+These instructions require installing Ubuntu Server LTS 24.04 Ubuntu Server can be downloaded [here](http://cdimage.ubuntu.com/releases/24.04/release/).
+
+Please reference the [Ubuntu Server Installation Guide](https://ubuntu.com/tutorials/tutorial-install-ubuntu-server#1-overview).
+
+## Installing Container Runtime
+
+You need to install a container runtime into each node in the cluster so that Pods can run there. Currently Cloud Native Stack provides below container runtimes:
+
+- [Installing Containerd](#Installing-Containerd)
+- [Installing CRI-O](#Installing-CRI-O)
+
+`NOTE:` Only install one of either `Containerd` or `CRI-O`, not both!
+
+These steps apply to both runtimes.
+
+Set up the repository and update the apt package index:
+
+```
+sudo apt update
+```
+
+Install packages to allow apt to use a repository over HTTPS:
+
+```
+sudo apt install -y apt-transport-https ca-certificates gnupg-agent libseccomp2 autotools-dev debhelper software-properties-common
+```
+
+Configure the `overlay` and `br_netfilter` kernel modules required by Kubernetes:
+
+```
+cat <<EOF | sudo tee /etc/modules-load.d/kubernetes.conf
+overlay
+br_netfilter
+EOF
+```
+
+```
+sudo modprobe overlay
+```
+```
+sudo modprobe br_netfilter
+```
+
+Setup required sysctl params; these persist across reboots.
+```
+cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
+net.bridge.bridge-nf-call-iptables  = 1
+net.ipv4.ip_forward                 = 1
+net.bridge.bridge-nf-call-ip6tables = 1
+EOF
+```
+
+Apply sysctl params without reboot
+```
+sudo sysctl --system
+```
+### Installing Containerd(Option 1)
+
+Download the Containerd for `x86-64` system:
+
+```
+wget https://github.com/containerd/containerd/releases/download/v2.2.0/containerd-2.2.0-linux-amd64.tar.gz
+```
+
+```
+sudo tar --no-overwrite-dir -C / -xzf containerd-2.2.0-linux-amd64.tar.gz
+```
+
+```
+rm -rf containerd-2.2.0-linux-amd64.tar.gz
+```
+
+
+Download the Containerd for `ARM` system:
+
+```
+wget https://github.com/containerd/containerd/releases/download/v2.2.0/containerd-2.2.0-linux-arm64.tar.gz
+```
+
+```
+sudo tar --no-overwrite-dir -C / -xzf containerd-2.2.0-linux-arm64.tar.gz
+```
+
+```
+rm -rf containerd-2.2.0-linux-arm64.tar.gz
+```
+
+Install the Containerd
+```
+sudo mkdir -p /etc/containerd
+```
+
+```
+containerd config default | sudo tee /etc/containerd/config.toml
+```
+
+```
+sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
+```
+
+```
+sudo systemctl restart containerd
+```
+
+Install Runc
+
+```
+wget https://github.com/opencontainers/runc/releases/download/v1.2.6/runc.amd64
+install -m 755 runc.amd64 /usr/local/sbin/runc
+```
+
+Install CNI Plugins
+
+```
+wget https://github.com/containernetworking/plugins/releases/download/v1.6.2/cni-plugins-linux-amd64-v1.6.2.tgz
+sudo mkdir -p /opt/cni/bin
+sudo tar -C /opt/cni/bin -xzvf cni-plugins-linux-amd64-v1.6.2.tgz
+sudo systemctl restart containerd
+```
+
+For additional information on installing Containerd, please reference [Install Containerd with Release Tarball](https://github.com/containerd/containerd/blob/master/docs/cri/installation.md).
+
+### Installing CRI-O(Option 2)
+
+Setup the Apt repositry for CRI-O
+
+```
+OS=xUbuntu_24.04
+VERSION=1.32
+```
+`NOTE:` VERSION (CRI-O version) is same as kubernetes major version 
+
+```
+echo "deb [signed-by=/usr/share/keyrings/libcontainers-archive-keyring.gpg] https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
+```
+
+```
+sudo mkdir -p /usr/share/keyrings
+```
+
+```
+curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo gpg --dearmor -o /usr/share/keyrings/libcontainers-archive-keyring.gpg
+```
+
+```
+echo "deb [signed-by=/usr/share/keyrings/libcontainers-crio-archive-keyring.gpg] http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list
+```
+
+```
+curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/Release.key | sudo gpg --dearmor -o /usr/share/keyrings/libcontainers-crio-archive-keyring.gpg
+```
+
+Install the CRI-O and dependencies 
+
+```
+sudo apt update && sudo apt install cri-o cri-o-runc cri-tools -y
+```
+
+Enable and Start the CRI-O service 
+
+```
+sudo systemctl enable crio.service && sudo systemctl start crio.service
+```
+
+### Installing Kubernetes 
+
+Make sure your container runtime has been started and enabled before beginning installation:
+
+```
+ sudo systemctl start containerd && sudo systemctl enable containerd
+```
+
+Execute the following to add apt keys:
+
+```
+ sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl gpg
+```
+
+```
+curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
+sudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg
+```
+
+```
+ sudo mkdir -p  /etc/apt/sources.list.d/
+```
+
+Create kubernetes.list:
+
+```
+echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
+sudo chmod 644 /etc/apt/sources.list.d/kubernetes.list 
+```
+
+
+Now execute the below to install kubelet, kubeadm, and kubectl:
+
+```
+ sudo apt update
+```
+
+```
+ sudo apt install -y -q kubelet=1.32.10-1.1  kubectl=1.32.10-1.1  kubeadm=1.32.10-1.1 
+```
+
+```
+ sudo apt-mark hold kubelet kubeadm kubectl
+```
+
+Create a kubelet default with your container runtime:
+
+`NOTE:`  The container runtime endpoint will be `unix:/run/containerd/containerd.sock` or `unix:/run/crio/crio.sock` depending on which container runtime you chose in the previous steps.
+
+For `Containerd` system:
+
+```
+ cat <<EOF | sudo tee /etc/default/kubelet
+KUBELET_EXTRA_ARGS=--cgroup-driver=systemd --runtime-request-timeout=15m --container-runtime-endpoint="unix:/run/containerd/containerd.sock"
+EOF
+```
+
+For `CRI-O` system:
+
+```
+cat <<EOF | sudo tee /etc/default/kubelet
+KUBELET_EXTRA_ARGS=--cgroup-driver=systemd --runtime-request-timeout=15m --container-runtime-endpoint="unix:/run/crio/crio.sock"
+EOF
+```
+
+Reload the system daemon:
+```
+sudo systemctl daemon-reload
+```
+
+Disable swap:
+```
+sudo swapoff -a
+```
+
+```
+sudo nano /etc/fstab
+```
+
+`NOTE:` Add a # before all the lines that start with /swap. # is a comment, and the result should look something like this:
+
+```
+UUID=e879fda9-4306-4b5b-8512-bba726093f1d / ext4 defaults 0 0
+UUID=DCD4-535C /boot/efi vfat defaults 0 0
+#/swap.img       none    swap    sw      0       0
+```
+
+#### Initializing the Kubernetes cluster to run as a control-plane node
+
+Execute the following command for `Containerd` systems:
+
+```
+sudo kubeadm init --pod-network-cidr=192.168.32.0/22 --cri-socket=/run/containerd/containerd.sock --kubernetes-version="v1.32.10"
+```
+
+Eecute the following command for `CRI-O` systems:
+
+```
+sudo kubeadm init --pod-network-cidr=192.168.32.0/22 --cri-socket=unix:/run/crio/crio.sock --kubernetes-version="v1.32.10"
+```
+
+Output:
+```
+Your Kubernetes control-plane has initialized successfully!
+ 
+To start using your cluster, you need to run the following as a regular user:
+ 
+  mkdir -p $HOME/.kube
+  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
+  sudo chown $(id -u):$(id -g) $HOME/.kube/config
+ 
+Alternatively, if you are the root user, you can run:
+ 
+  export KUBECONFIG=/etc/kubernetes/admin.conf
+ 
+You should now deploy a pod network to the cluster.
+Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
+  https://kubernetes.io/docs/concepts/cluster-administration/addons/
+ 
+Then you can join any number of worker nodes by running the following on each as root:
+ 
+kubeadm join <your-host-IP>:6443 --token 489oi5.sm34l9uh7dk4z6cm \
+        --discovery-token-ca-cert-hash sha256:17165b6c4a4b95d73a3a2a83749a957a10161ae34d2dfd02cd730597579b4b34
+```
+
+
+Following the instructions in the output, execute the commands as shown below:
+
+```
+mkdir -p $HOME/.kube
+```
+
+```
+sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
+```
+
+```
+sudo chown $(id -u):$(id -g) $HOME/.kube/config
+```
+
+With the following command, you install a pod-network add-on to the control plane node. We are using calico as the pod-network add-on here:
+
+```
+kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.2/manifests/calico.yaml
+```
+
+Update the Calico Daemonset 
+
+```
+kubectl set env daemonset/calico-node -n kube-system IP_AUTODETECTION_METHOD=interface=ens\*,eth\*,enc\*,enp\*
+```
+
+You can execute the below commands to ensure that all pods are up and running:
+
+```
+kubectl get pods --all-namespaces
+```
+
+Output:
+
+```
+NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
+kube-system   calico-kube-controllers-65b8787765-bjc8h   1/1     Running   0          2m8s
+kube-system   calico-node-c2tmk                          1/1     Running   0          2m8s
+kube-system   coredns-5c98db65d4-d4kgh                   1/1     Running   0          9m8s
+kube-system   coredns-5c98db65d4-h6x8m                   1/1     Running   0          9m8s
+kube-system   etcd-#yourhost                             1/1     Running   0          8m25s
+kube-system   kube-apiserver-#yourhost                   1/1     Running   0          8m7s
+kube-system   kube-controller-manager-#yourhost          1/1     Running   0          8m3s
+kube-system   kube-proxy-6sh42                           1/1     Running   0          9m7s
+kube-system   kube-scheduler-#yourhost                   1/1     Running   0          8m26s
+```
+
+The get nodes command shows that the control-plane node is up and ready:
+
+```
+kubectl get nodes
+```
+
+Output:
+
+```
+NAME             STATUS   ROLES                  AGE   VERSION
+#yourhost        Ready    control-plane          10m   v1.32.10
+```
+
+Since we are using a single-node Kubernetes cluster, the cluster will not schedule pods on the control plane node by default. To schedule pods on the control plane node, we have to remove the taint by executing the following command:
+
+```
+kubectl taint nodes --all node-role.kubernetes.io/control-plane-
+```
+
+Refer to [Installing Kubeadm](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/)
+for more information.
+
+### Installing Helm 
+
+Execute the following command to download and install Helm 4.0.0 for `x86-64` system: 
+
+```
+wget https://get.helm.sh/helm-v4.0.0-linux-amd64.tar.gz
+```
+
+```
+tar -zxvf helm-v4.0.0-linux-amd64.tar.gz
+ ```
+ 
+ ```
+sudo mv linux-amd64/helm /usr/local/bin/helm
+ ```
+
+ ```
+rm -rf helm-v4.0.0-linux-amd64.tar.gz linux-amd64/
+```
+
+Download and install Helm 4.0.0 for `ARM` system: 
+
+```
+wget https://get.helm.sh/helm-v4.0.0-linux-arm64.tar.gz
+```
+
+```
+tar -zxvf helm-v4.0.0-linux-arm64.tar.gz
+ ```
+ 
+```
+sudo mv linux-arm64/helm /usr/local/bin/helm
+```
+
+```
+rm -rf helm-v4.0.0-linux-arm64.tar.gz linux-arm64/
+```
+
+Refer to the Helm 4.0.0 [release notes](https://github.com/helm/helm/releases) and the [Installing Helm guide](https://helm.sh/docs/using_helm/#installing-helm) for more information.
+
+
+### Adding an Additional Node to NVIDIA Cloud Native Stack
+
+`NOTE:` If you're not adding additional nodes, please skip this step and proceed to the next step [Installing NVIDIA Network Operator](#Installing-NVIDIA-Network-Operator)
+
+Make sure to install the Containerd and Kubernetes packages on additional nodes.
+
+Prerequisites: 
+- [Installing Containerd](#Installing-Containerd)
+- [Installing Kubernetes](#Installing-Kubernetes)
+- [Disable swap](#Disable-swap)
+
+Once the prerequisites are completed on the additional nodes, execute the below command on the control-plane node and then execute the join command output on an additional node to add the additional node to NVIDIA Cloud Native Stack:
+
+```
+sudo kubeadm token create --print-join-command
+```
+
+Output:
+```
+example: 
+sudo kubeadm join 10.110.0.34:6443 --token kg2h7r.e45g9uyrbm1c0w3k     --discovery-token-ca-cert-hash sha256:77fd6571644373ea69074dd4af7b077bbf5bd15a3ed720daee98f4b04a8f524e
+```
+`NOTE`: control-plane node and worker node should not have the same node name. 
+
+The get nodes command shows that the master and worker nodes are up and ready:
+
+```
+kubectl get nodes
+```
+
+Output:
+
+```
+NAME             STATUS   ROLES                  AGE   VERSION
+#yourhost        Ready    control-plane          10m   v1.32.10
+#yourhost-worker Ready                           10m   v1.32.10
+```
+
+### Installing NVIDIA Network Operator
+
+`NOTE:` If Mellanox NICs are not connected to your nodes, please skip this step and proceed to the next step [Installing GPU Operator](#Installing-GPU-Operator)
+
+The below instructions assume that Mellanox NICs are connected to your machines.
+
+Execute the below command to verify Mellanox NICs are enabled on your machines:
+
+```
+lspci | grep -i "Mellanox"
+```
+
+Output:
+```
+0c:00.0 Ethernet controller: Mellanox Technologies MT2892 Family [ConnectX-6 Dx]
+0c:00.1 Ethernet controller: Mellanox Technologies MT2892 Family [ConnectX-6 Dx]
+```
+Execute the below command to determine which Mellanox device is active:
+
+`NOTE:` Use whicever device shows as `Link Detected: yes` in further steps. The below command works only if you add the NICs before installing the Operating System.
+
+```
+for device in `sudo lshw -class network -short | grep -i ConnectX | awk '{print $2}' | egrep -v 'Device|path' | sed '/^$/d'`;do echo -n $device; sudo ethtool $device | grep -i "Link detected"; done
+```
+Output:
+```
+ens160f0        Link detected: yes
+ens160f1        Link detected: no
+```
+
+Create the custom network operator values.yaml and update the active Mellanox device from the above command:
+```
+nano network-operator-values.yaml
+deployCR: true
+ofedDriver:
+  deploy: true
+rdmaSharedDevicePlugin:
+  deploy: true
+  resources:
+    - name: rdma_shared_device_a
+      vendors: [15b3]
+      devices: [ens160f0]
+```
+
+For more information about custom network operator values.yaml, please refer [Network Operator](https://docs.mellanox.com/display/COKAN10/Network+Operator#NetworkOperator-Example2:RDMADevicePluginConfiguration)
+
+Add the NVIDIA repo:
+```
+helm repo add mellanox https://mellanox.github.io/network-operator
+```
+
+Update the Helm repo:
+```
+ helm repo update
+```
+Install Network Operator:
+```
+kubectl label nodes --all node-role.kubernetes.io/master- --overwrite
+```
+
+```
+helm install -f --version 25.7.0 ./network-operator-values.yaml -n network-operator --create-namespace --wait network-operator mellanox/network-operator
+```
+#### Validating the State of the Network Operator
+
+Please note that the installation of the Network Operator can take a couple of minutes. How long the installation will take depends on your internet speed.
+
+```
+kubectl get pods --all-namespaces | egrep 'network-operator|nvidia-network-operator-resources'
+```
+
+```
+NAMESPACE                           NAME                                                              READY   STATUS      RESTARTS   AGE
+network-operator                    network-operator-547cb8d999-mn2h9                                 1/1     Running            0          17m
+network-operator                    network-operator-node-feature-discovery-master-596fb8b7cb-qrmvv   1/1     Running            0          17m
+network-operator                    network-operator-node-feature-discovery-worker-qt5xt              1/1     Running            0          17m
+nvidia-network-operator-resources   cni-plugins-ds-dl5vl                                              1/1     Running            0          17m
+nvidia-network-operator-resources   kube-multus-ds-w82rv                                              1/1     Running            0          17m
+nvidia-network-operator-resources   mofed-ubuntu20.04-ds-xfpzl                                        1/1     Running            0          17m
+nvidia-network-operator-resources   rdma-shared-dp-ds-2hgb6                                           1/1     Running            0          17m
+nvidia-network-operator-resources   sriov-device-plugin-ch7bz                                         1/1     Running            0          10m
+nvidia-network-operator-resources   whereabouts-56ngr                                                 1/1     Running            0          10m
+```
+
+Please refer to the [Network Operator page](https://docs.mellanox.com/display/COKAN10/Network+Operator) for more information.
+
+### Installing GPU Operator
+
+Add the NVIDIA repo:
+
+```
+helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
+```
+
+Update the Helm repo:
+
+```
+helm repo update
+```
+
+Install GPU Operator:
+
+`NOTE:` If you installed Network Operator, please skip the below command and follow the [GPU Operator with RDMA](#GPU-Operator-with-RDMA)
+
+```
+helm install --version 25.10.1 --create-namespace --namespace nvidia-gpu-operator nvidia/gpu-operator  --set driver.version=580.82.07 --wait --generate-name
+```
+
+#### GPU Operator with RDMA 
+
+- Prerequisites:
+  - Please install the [Network Operator](#Installing NVIDIA Network Operator) to ensure that the MOFED drivers are installed. 
+
+After Network Operator installation is completed, execute the below command to install the GPU Operator to load nv_peer_mem modules:
+
+```
+ helm install --version 25.10.1 --create-namespace --namespace nvidia-gpu-operator nvidia/gpu-operator  --set driver.rdma.enabled=true  --wait --generate-name
+```
+
+#### GPU Operator with Host MOFED Driver and RDMA 
+
+If the host is already installed MOFED driver without network operator, execute the below command to install the GPU Operator to load nv_peer_mem module 
+
+```
+ helm install --version 25.10.1 --create-namespace --namespace nvidia-gpu-operator nvidia/gpu-operator --set driver.rdma.enabled=true,driver.rdma.useHostMofed=true --wait --generate-name 
+
+```
+
+### GPU Operator with GPU Direct Storage(GDS) 
+
+Execute the below command to enable the GPU Direct Storage Driver on GPU Operator 
+
+```
+helm install --version 25.10.1 --create-namespace --namespace nvidia-gpu-operator nvidia/gpu-operator --set gds.enabled=true
+```
+For more information refer, [GPU Direct Storage](https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/gpu-operator-rdma.html)
+
+#### Validating the State of the GPU Operator:
+
+Please note that the installation of the GPU Operator can take a couple of minutes. How long the installation will take depends on your internet speed.
+
+```
+kubectl get pods --all-namespaces | grep -v kube-system
+```
+
+```
+NAMESPACE                NAME                                                              READY   STATUS      RESTARTS   AGE
+default                  gpu-operator-1622656274-node-feature-discovery-master-5cddq96gq   1/1     Running     0          2m39s
+default                  gpu-operator-1622656274-node-feature-discovery-worker-wr88v       1/1     Running     0          2m39s
+default                  gpu-operator-7db468cfdf-mdrdp                                     1/1     Running     0          2m39s
+nvidia-gpu-operator      gpu-feature-discovery-g425f                                       1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-container-toolkit-daemonset-mcmxj                          1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-cuda-validator-s6x2p                                       0/1     Completed   0          48s
+nvidia-gpu-operator      nvidia-dcgm-exporter-wtxnx                                        1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-dcgm-jbz94                                                 1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-device-plugin-daemonset-hzzdt                              1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-device-plugin-validator-9nkxq                              0/1     Completed   0          17s
+nvidia-gpu-operator      nvidia-driver-daemonset-kt8g5                                     1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-operator-validator-cw4j5                                   1/1     Running     0          2m20s
+
+```
+
+Please refer to the [GPU Operator page](https://ngc.nvidia.com/catalog/helm-charts/nvidia:gpu-operator) on NGC for more information.
+
+For multiple worker nodes, execute the below command to fix the CoreDNS and Node Feature Discovery. 
+
+```
+kubectl delete pods $(kubectl get pods -n kube-system | grep core | awk '{print $1}') -n kube-system; kubectl delete pod $(kubectl get pods -o wide -n nvidia-gpu-operator | grep node-feature-discovery | grep -v master | awk '{print $1}') -n nvidia-gpu-operator
+```
+
+#### GPU Operator with MIG
+
+`NOTE:` Only A100 and A30 GPUs are supported for GPU Operator with MIG
+
+Multi-Instance GPU (MIG) allows GPUs based on the NVIDIA Ampere architecture (such as NVIDIA A100) to be securely partitioned into separate GPU instances for CUDA applications. For more information about enabling the MIG capability, please refer to [GPU Operator with MIG](https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/gpu-operator-mig.html) 
+
+### Validating the Network Operator with GPUDirect RDMA
+
+Execute the below command to list the Mellanox NIC's with the status:
+```
+kubectl exec -it $(kubectl get pods -n nvidia-network-operator-resources | grep mofed | awk '{print $1}') -n nvidia-network-operator-resources -- ibdev2netdev
+```
+Output:
+```
+mlx5_0 port 1 ==> ens192f0 (Up)
+mlx5_1 port 1 ==> ens192f1 (Down)
+```
+
+Create network definition for IPAM and replace the `ens192f0` with an active Mellanox device for `master`:
+```
+$ nano networkdefinition.yaml 
+apiVersion: k8s.cni.cncf.io/v1
+kind: NetworkAttachmentDefinition
+metadata:
+  annotations:
+    k8s.v1.cni.cncf.io/resourceName: rdma/rdma_shared_device_a
+  name: rdma-net-ipam
+  namespace: default
+spec:
+  config: |-
+    {
+        "cniVersion": "0.3.1",
+        "name": "rdma-net-ipam",
+        "plugins": [
+            {
+                "ipam": {
+                    "datastore": "kubernetes",
+                    "kubernetes": {
+                        "kubeconfig": "/etc/cni/net.d/whereabouts.d/whereabouts.kubeconfig"
+                    },
+                    "log_file": "/tmp/whereabouts.log",
+                    "log_level": "debug",
+                    "range": "192.168.112.0/24",
+                    "type": "whereabouts"
+                },
+                "type": "macvlan",
+                "master": "ens192f0"
+            },
+            {
+                "mtu": 1500,
+                "type": "tuning"
+            }
+        ]
+    }
+EOF
+``` 
+`NOTE:` If you do not have VLAN-based networking on the high-performance side, please set "vlan": 0
+
+ 
+Execute the below command to install network definition on NVIDIA Cloud Native Stack from the control-plane node:
+ 
+ ```
+kubectl apply -f networkdefinition.yaml 
+ ```
+ 
+Now create the pod YAML with the below content:
+
+``` 
+cat <<EOF | tee mellanox-test.yaml
+apiVersion: v1
+kind: Pod
+metadata:
+  name: rdma-test-pod-1
+  annotations:
+    k8s.v1.cni.cncf.io/networks: rdma-net-ipam
+    # If a network with static IPAM is used replace network annotation with the below.
+    #k8s.v1.cni.cncf.io/networks: '[
+    #  { "name": "rmda-net-ipam",
+    #    "ips": ["192.168.111.101/24"],
+    #    "gateway": ["192.168.111.1"]
+    #  }
+    #]'
+spec:
+  restartPolicy: OnFailure
+  containers:
+  - image: mellanox/rping-test
+    name: rdma-test-ctr
+    securityContext:
+      capabilities:
+        add: [ "IPC_LOCK" ]
+    resources:
+      limits:
+        rdma/rdma_shared_device_a: 1
+      requests:
+        rdma/rdma_shared_device_a: 1
+    command:
+    - sh
+    - -c
+    - |
+      ls -l /dev/infiniband /sys/class/net
+      sleep infinity
+---
+apiVersion: v1
+kind: Pod
+metadata:
+  name: rdma-test-pod-2
+  annotations:
+    k8s.v1.cni.cncf.io/networks: rdma-net-ipam
+    # If a network with static IPAM is used replace network annotation with the below.
+    #k8s.v1.cni.cncf.io/networks: '[
+    #  { "name": "rmda-net-ipam",
+    #    "ips": ["192.168.111.101/24"],
+    #    "gateway": ["192.168.111.1"]
+    #  }
+    #]'
+spec:
+  restartPolicy: OnFailure
+  containers:
+  - image: mellanox/rping-test
+    name: rdma-test-ctr
+    securityContext:
+      capabilities:
+        add: [ "IPC_LOCK" ]
+    resources:
+      limits:
+        rdma/rdma_shared_device_a: 1
+      requests:
+        rdma/rdma_shared_device_a: 1
+    command:
+    - sh
+    - -c
+    - |
+      ls -l /dev/infiniband /sys/class/net
+      sleep infinity
+EOF
+ ```
+
+Apply the Mellanox test pod to the NVIDIA Cloud Native Stack  for the validation:
+```
+kubectl apply -f mellanox-test.yaml
+```
+
+Once you apply, verify the `rdma-test-pod-1` pod logs. You should see the expected output as shown below:
+`NOTE:` How long the pods take to run depends on your internet speed.
+
+Expected Output:
+```
+kubectl logs rdma-test-pod-1
+
+/dev/infiniband:
+total 0
+crw------- 1 root root 231,  64 Jun 1 02:26 issm0
+crw-rw-rw- 1 root root  10,  54 Jun 1 02:26 rdma_cm
+crw------- 1 root root 231,   0 Jun 1 02:26 umad0
+crw-rw-rw- 1 root root 231, 192 Jun 1 02:26 uverbs0
+ 
+/sys/class/net:
+total 0
+lrwxrwxrwx 1 root root 0 Jun 1 02:26 eth0 -> ../../devices/virtual/net/eth0
+lrwxrwxrwx 1 root root 0 Jun 1 02:26 lo -> ../../devices/virtual/net/lo
+lrwxrwxrwx 1 root root 0 Jun 1 02:26 net1 -> ../../devices/virtual/net/net1
+lrwxrwxrwx 1 root root 0 Jun 1 02:26 tunl0 -> ../../devices/virtual/net/tunl0
+```
+
+Execute the below command to list the Mellanox NIC's with the status:
+```
+kubectl exec -it $(kubectl get pods -n nvidia-network-operator-resources | grep mofed | awk '{print $1}') -n nvidia-network-operator-resources -- ibdev2netdev
+```
+Output:
+```
+mlx5_0 port 1 ==> ens192f0 (Up)
+mlx5_1 port 1 ==> ens192f1 (Down)
+```
+
+Update the above Mellanox NIC, for which status is `Up` in the below command:
+
+```
+kubectl exec -it rdma-test-pod-1 -- bash
+
+[root@rdma-test-pod-1 /]# ib_write_bw -d mlx5_0 -a -F --report_gbits -q 1
+************************************
+* Waiting for client to connect... *
+************************************
+```
+
+In a separate terminal, print the network address of the secondary interface on the `rdma-test-pod-1` pod:
+
+```
+$ kubectl exec rdma-test-pod-1 -- ip addr show dev net1
+5: net1@if24: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc noqueue state UP group default
+    link/ether 62:51:fb:13:88:ce brd ff:ff:ff:ff:ff:ff link-netnsid 0
+    inet 192.168.111.1/24 brd 192.168.111.255 scope global net1
+       valid_lft forever preferred_lft forever
+```
+
+Execute the below command with the above inet address to verify the nv_peer_memory performance on NVIDIA Cloud Native Stack:
+```
+$ kubectl exec -it rdma-test-pod-2 -- bash
+[root@rdma-test-pod-1 /]# ib_write_bw -d mlx5_0 -a -F --report_gbits -q 1 192.168.111.2
+---------------------------------------------------------------------------------------
+                    RDMA_Write BW Test
+ Dual-port       : OFF		Device         : mlx5_0
+ Number of qps   : 1		Transport type : IB
+ Connection type : RC		Using SRQ      : OFF
+ TX depth        : 128
+ CQ Moderation   : 100
+ Mtu             : 1024[B]
+ Link type       : Ethernet
+ GID index       : 4
+ Max inline data : 0[B]
+ rdma_cm QPs	 : OFF
+ Data ex. method : Ethernet
+---------------------------------------------------------------------------------------
+ local address: LID 0000 QPN 0x0137 PSN 0x3c5d65 RKey 0x00370e VAddr 0x007ff44bf1d000
+ GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:111:01
+ remote address: LID 0000 QPN 0x0136 PSN 0x475031 RKey 0x002c23 VAddr 0x007fd3d83cb000
+ GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:111:02
+---------------------------------------------------------------------------------------
+ #bytes     #iterations    BW peak[Gb/sec]    BW average[Gb/sec]   MsgRate[Mpps]
+ 2          5000           0.080755            0.073090            4.568094
+ 4          5000             0.16               0.15   		   4.588128
+ 8          5000             0.31               0.29   		   4.567442
+ 16         5000             0.66               0.59   		   4.647555
+ 32         5000             1.35               1.22   		   4.776518
+ 64         5000             2.50               2.29   		   4.481806
+ 128        5000             5.34               4.73   		   4.621828
+ 256        5000             10.53              9.11   		   4.448153
+ 512        5000             21.03              17.05  		   4.162100
+ 1024       5000             38.67              34.16  		   4.169397
+ 2048       5000             47.11              43.50  		   2.655219
+ 4096       5000             51.29              51.02  		   1.557094
+ 8192       5000             52.00              51.98  		   0.793178
+ 16384      5000             52.33              52.32  		   0.399164
+ 32768      5000             52.47              52.47  		   0.200143
+ 65536      5000             52.51              52.50  		   0.100143
+ 131072     5000             52.51              52.51  		   0.050078
+ 262144     5000             52.49              52.49  		   0.025029
+ 524288     5000             52.50              52.50  		   0.012517
+ 1048576    5000             52.51              52.51  		   0.006260
+ 2097152    5000             52.51              52.51  		   0.003130
+ 4194304    5000             52.51              52.51  		   0.001565
+ 8388608    5000             52.52              52.52  		   0.000783
+---------------------------------------------------------------------------------------
+```
+
+```
+[root@rdma-test-pod-1 /]# ib_write_bw -d mlx5_0 -a -F --report_gbits -q 1
+
+************************************
+* Waiting for client to connect... *
+************************************
+---------------------------------------------------------------------------------------
+                    RDMA_Write BW Test
+ Dual-port       : OFF		Device         : mlx5_0
+ Number of qps   : 1		Transport type : IB
+ Connection type : RC		Using SRQ      : OFF
+ CQ Moderation   : 100
+ Mtu             : 1024[B]
+ Link type       : Ethernet
+ GID index       : 8
+ Max inline data : 0[B]
+ rdma_cm QPs	 : OFF
+ Data ex. method : Ethernet
+---------------------------------------------------------------------------------------
+ local address: LID 0000 QPN 0x0136 PSN 0x475031 RKey 0x002c23 VAddr 0x007fd3d83cb000
+ GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:111:02
+ remote address: LID 0000 QPN 0x0137 PSN 0x3c5d65 RKey 0x00370e VAddr 0x007ff44bf1d000
+ GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:111:01
+---------------------------------------------------------------------------------------
+ #bytes     #iterations    BW peak[Gb/sec]    BW average[Gb/sec]   MsgRate[Mpps]
+ 8388608    5000             52.52              52.52  		   0.000783
+---------------------------------------------------------------------------------------
+```
+The benchmark achieved approximately 52 Gbps throughput.
+
+Exit from RDMA test pods and then delete the RDMA test pods with the below command:
+
+```
+$ kubectl delete pod rdma-test-pod-1 rdma-test-pod-2
+```
+
+### Validating the GPU Operator
+
+GPU Operator validates the  through the nvidia-device-plugin-validation pod and the nvidia-driver-validation pod. If both are completed successfully (see output from kubectl get pods --all-namespaces | grep -v kube-system), NVIDIA Cloud Native Stack is working as expected. This section provides two examples of validating that the GPU is usable from within a pod to validate the  manually.
+
+#### Example 1: nvidia-smi
+
+Execute the following:
+
+```
+cat <<EOF | tee nvidia-smi.yaml
+apiVersion: v1
+kind: Pod
+metadata:
+  name: nvidia-smi
+spec:
+  restartPolicy: OnFailure
+  containers:
+    - name: nvidia-smi
+      image: "nvidia/cuda:12.8.0-base-ubuntu24.04"
+      args: ["nvidia-smi"]
+EOF
+```
+
+```
+kubectl apply -f nvidia-smi.yaml
+```
+
+```
+kubectl logs nvidia-smi
+```
+
+Output:
+
+``` 
+Mon Nov 24 20:39:28 2025
++-----------------------------------------------------------------------------------------+
+| NVIDIA-SMI 580.105.08             Driver Version: 580.105.08     CUDA Version: 13.0       |
+|-----------------------------------------+------------------------+----------------------+
+| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
+| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
+|                                         |                        |               MIG M. |
+|=========================================+========================+======================|
+|   0  NVIDIA A100-SXM4-80GB          On  |   00000000:03:00.0 Off |                    0 |
+| N/A   29C    P0             50W /  275W |       1MiB /  81920MiB |      0%      Default |
+|                                         |                        |             Disabled |
++-----------------------------------------+------------------------+----------------------+
+
++-----------------------------------------------------------------------------------------+
+| Processes:                                                                              |
+|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
+|        ID   ID                                                               Usage      |
+|=========================================================================================|
+|  No running processes found                                                             |
++-----------------------------------------------------------------------------------------+
+```
+
+#### Example 2: CUDA-Vector-Add
+
+`NOTE:` CUDA Vector Validation is not available for ARM systems yet.
+
+Create a pod YAML file:
+
+```
+cat <<EOF | tee cuda-samples.yaml
+apiVersion: v1
+kind: Pod
+metadata:
+  name: cuda-vector-add
+spec:
+  restartPolicy: OnFailure
+  containers:
+    - name: cuda-vector-add
+      image: "k8s.gcr.io/cuda-vector-add:v0.1"
+EOF
+```
+
+Execute the below command to create a sample GPU pod:
+
+```
+kubectl apply -f cuda-samples.yaml
+```
+
+Confirm the cuda-samples pod was created:
+
+```
+kubectl get pods
+``` 
+
+NVIDIA Cloud Native Stack works as expected if the get pods command shows the pod status as completed.
+
+### Validate NVIDIA Cloud Native Stack with an Application from NGC
+Another option to validate NVIDIA Cloud Native Stack is by running a demo application hosted on NGC.
+
+NGC is NVIDIA's GPU-optimized software hub. NGC provides a curated set of GPU-optimized software for AI, HPC, and visualization. The content provided by NVIDIA and third-party ISVs simplify building, customizing, and integrating GPU-optimized software into workflows, accelerating the time to solutions for users.
+
+Containers, pre-trained models, Helm charts for Kubernetes deployments, and industry-specific AI toolkits with software development kits (SDKs) are hosted on NGC. For more information about how to deploy an application that is hosted on NGC or the NGC Private Registry, please refer to this [NGC Registry Guide](https://github.com/NVIDIA/cloud-native-stack/blob/master/install-guides/NGC_Registry_Guide_v1.0.md). Visit the [public NGC documentation](https://docs.nvidia.com/ngc) for more information.
+
+The steps in this section use the publicly available DeepStream - Intelligent Video Analytics (IVA) demo application Helm Chart. The application can validate the full NVIDIA Cloud Native Stack and test the connectivity of NVIDIA Cloud Native Stack to remote sensors. DeepStream delivers real-time AI-based video and image understanding and multi-sensor processing on GPUs. For more information, please refer to the [Helm Chart](https://ngc.nvidia.com/catalog/helm-charts/nvidia:video-analytics-demo).
+
+There are two ways to configure the DeepStream - Intelligent Video Analytics Demo Application on your NVIDIA Cloud Native Stack
+
+- Using a camera
+- Using the integrated video file (no camera required)
+
+#### Using a camera
+
+##### Prerequisites: 
+- RTSP Camera stream
+
+Go through the below steps to install the demo application:
+```
+1. helm fetch https://helm.ngc.nvidia.com/nvidia/charts/video-analytics-demo-0.1.9.tgz --untar
+
+2. cd into the folder video-analytics-demo and update the file values.yaml
+
+3. Go to the section Cameras in the values.yaml file and add the address of your IP camera. Read the comments section on how it can be added. Single or multiple cameras can be added as shown below
+
+cameras:
+ camera1: rtsp://XXXX
+```
+
+Execute the following command to deploy the demo application:
+```
+helm install video-analytics-demo --name-template iva
+```
+
+Once the Helm chart is deployed, access the application with the VLC player. See the instructions below. 
+
+#### Using the integrated video file (no camera)
+
+If you dont have a camera input, please execute the below commands to use the default video already integrated into the application:
+
+```
+helm fetch https://helm.ngc.nvidia.com/nvidia/charts/video-analytics-demo-0.1.9.tgz
+
+helm install video-analytics-demo-0.1.9.tgz --name-template iva
+```
+
+Once the helm chart is deployed, access the application with the VLC player as per the below instructions. 
+For more information about the demo application, please refer to the [application NGC page](https://ngc.nvidia.com/catalog/helm-charts/nvidia:video-analytics-demo)
+
+#### Access from WebUI
+
+Use the below WebUI URL to access the video analytic demo application from the browser:
+```
+http://IPAddress of Node:31115/
+```
+
+#### Access from VLC
+
+Download VLC Player from https://www.videolan.org/vlc/ on the machine where you intend to view the video stream.
+
+View the video stream in VLC by navigating to Media > Open Network Stream > Entering the following URL:
+
+```
+rtsp://IPAddress of Node:31113/ds-test
+```
+
+You should see the video output like below with the AI model detecting objects.
+
+![Deepstream_Video](screenshots/Deepstream.png)
+
+`NOTE:` Video stream in VLC will change if you provide an input RTSP camera.
+
+
+### Uninstalling the GPU Operator 
+
+Execute the below commands to uninstall the GPU Operator:
+
+```
+$ helm ls
+NAME                    NAMESPACE                      REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
+gpu-operator-1606173805 nvidia-gpu-operator            1               2025-11-24 20:23:28.063421701 +0000 UTC deployed        gpu-operator-25.10.1      25.10.1 
+
+$ helm del gpu-operator-1606173805 -n nvidia-gpu-operator
+
+```
+
+### Uninstalling the Network Operator
+
+Execute the below commands to uninstall the Network Operator:
+
+```
+$ helm ls -n network-operator
+NAME            	NAMESPACE       	REVISION	UPDATED                                	STATUS  	CHART                 	APP VERSION
+network-operator	network-operator	1       	2025-11-24 17:09:04.665593336 +0000 UTC	deployed	network-operator-25.7.0	v25.7.0
+
+$ helm del network-operator -n network-operator
+```
diff --git a/install-guides/Ubuntu-24-04_Server_x86-arm64_v16.1.md b/install-guides/Ubuntu-24-04_Server_x86-arm64_v16.1.md
new file mode 100644
index 00000000..173bf386
--- /dev/null
+++ b/install-guides/Ubuntu-24-04_Server_x86-arm64_v16.1.md
@@ -0,0 +1,1143 @@
+# NVIDIA Cloud Native Stack v16.1 - Install Guide for Ubuntu Server
+## Introduction
+
+This document describes how to setup the NVIDIA Cloud Native Stack collection on a single or multiple NVIDIA Certified Systems. NVIDIA Cloud Native Stack can be configured to create a single node Kubernetes cluster or to create/add additional worker nodes to join an existing cluster.
+
+NVIDIA Cloud Native Stack v16.1 includes:
+- Ubuntu 24.04 LTS
+- Containerd 2.2.0
+- Kubernetes version 1.33.6
+- Helm 4.0.2
+- NVIDIA GPU Operator 25.10.1
+  - NVIDIA GPU Driver: 580.105.08
+  - NVIDIA Container Toolkit: 1.18.1
+  - NVIDIA K8S Device Plugin: 0.18.1
+  - NVIDIA DCGM-Exporter: 4.4.2-4.7.0
+  - NVIDIA DCGM: 4.4.2-1
+  - NVIDIA GPU Feature Discovery: 0.18.1
+  - NVIDIA K8s MIG Manager: 0.13.1
+  - Node Feature Discovery: 0.17.3
+  - NVIDIA KubeVirt GPU Device Plugin: 1.3.1
+  - NVIDIA GDS Driver: 2.20.5
+  - NVIDIA Kata Manager for Kubernetes: 0.2.3
+  - NVIDIA Confidential Computing Manager for Kubernetes: 0.1.1
+- NVIDIA Network Operator 25.7.0
+  - Node Feature Discovery: 25.7.0
+  - Mellanox MOFED/DOCA Driver 25.07-0.6.1.0-0
+  - RDMA Shared Device Plugin 1.5.3
+  - SRIOV Device Plugin 3.9.0
+  - Container Networking Plugins 1.6.2
+  - Multus 4.1.0
+  - Whereabouts 0.7.0
+
+## Table of Contents
+
+- [Prerequisites](#Prerequisites)
+- [Installing the Ubuntu Operating System](#Installing-the-Ubuntu-Operating-System)
+- [Installing Container Runtime](#Installing-Container-Runtime)
+  - [Installing Containerd](#Installing-Containerd)
+  - [Installing CRI-O](#Installing-CRI-O)
+- [Installing Kubernetes](#Installing-Kubernetes)
+- [Installing Helm](#Installing-Helm)
+- [Adding an Additional Node to NVIDIA Cloud Native Stack](#Adding-additional-node-to-NVIDIA-Cloud-Native-Stack)
+- [Installing NVIDIA Network Operator](#Installing-NVIDIA-Network-Operator)
+- [Installing the GPU Operator](#Installing-the-GPU-Operator)
+- [Validating the Network Operator with GPUDirect RDMA](#Validating-the-Network-Operator-with-GPUDirect-RDMA)
+- [Validating the GPU Operator](#Validating-the-GPU-Operator)
+- [Validate NVIDIA Cloud Native Stack with an Application from NGC](#Validate-NVIDIA-Cloud-Native-Stack-with-an-application-from-NGC)
+- [Uninstalling the GPU Operator](#Uninstalling-the-GPU-Operator)
+- [Uninstalling the Network Operator](#Uninstalling-the-Network-Operator)
+
+### Prerequisites
+ 
+The following instructions assume the following:
+
+- You have [NVIDIA-Certified Systems](https://docs.nvidia.com/ngc/ngc-deploy-on-premises/nvidia-certified-systems/index.html) with Mellanox CX NICs for x86-64 servers 
+- You have [NVIDIA Qualified Systems](https://www.nvidia.com/en-us/data-center/data-center-gpus/qualified-system-catalog/?start=0&count=50&pageNumber=1&filters=eyJmaWx0ZXJzIjpbXSwic3ViRmlsdGVycyI6eyJwcm9jZXNzb3JUeXBlIjpbIkFSTS1UaHVuZGVyWDIiLCJBUk0tQWx0cmEiXX0sImNlcnRpZmllZEZpbHRlcnMiOnt9LCJwYXlsb2FkIjpbXX0=) for ARM servers 
+  `NOTE:` For ARM systems, NVIDIA Network Operator is not supported yet.
+- You will perform a clean install.
+
+To determine if your system qualifies as an NVIDIA Certified System, review the list of NVIDIA Certified Systems [here](https://docs.nvidia.com/ngc/ngc-deploy-on-premises/nvidia-certified-systems/index.html). 
+
+Please note that NVIDIA Cloud Native Stack is validated only on systems with the default kernel (not HWE).
+
+
+### Installing the Ubuntu Operating System
+These instructions require installing Ubuntu Server LTS 24.04 Ubuntu Server can be downloaded [here](http://cdimage.ubuntu.com/releases/24.04/release/).
+
+Please reference the [Ubuntu Server Installation Guide](https://ubuntu.com/tutorials/tutorial-install-ubuntu-server#1-overview).
+
+## Installing Container Runtime
+
+You need to install a container runtime into each node in the cluster so that Pods can run there. Currently Cloud Native Stack provides below container runtimes:
+
+- [Installing Containerd](#Installing-Containerd)
+- [Installing CRI-O](#Installing-CRI-O)
+
+`NOTE:` Only install one of either `Containerd` or `CRI-O`, not both!
+
+These steps apply to both runtimes.
+
+Set up the repository and update the apt package index:
+
+```
+sudo apt update
+```
+
+Install packages to allow apt to use a repository over HTTPS:
+
+```
+sudo apt install -y apt-transport-https ca-certificates gnupg-agent libseccomp2 autotools-dev debhelper software-properties-common
+```
+
+Configure the `overlay` and `br_netfilter` kernel modules required by Kubernetes:
+
+```
+cat <<EOF | sudo tee /etc/modules-load.d/kubernetes.conf
+overlay
+br_netfilter
+EOF
+```
+
+```
+sudo modprobe overlay
+```
+```
+sudo modprobe br_netfilter
+```
+
+Setup required sysctl params; these persist across reboots.
+```
+cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
+net.bridge.bridge-nf-call-iptables  = 1
+net.ipv4.ip_forward                 = 1
+net.bridge.bridge-nf-call-ip6tables = 1
+EOF
+```
+
+Apply sysctl params without reboot
+```
+sudo sysctl --system
+```
+### Installing Containerd(Option 1)
+
+Download the Containerd for `x86-64` system:
+
+```
+wget https://github.com/containerd/containerd/releases/download/v2.2.0/containerd-2.2.0-linux-amd64.tar.gz
+```
+
+```
+sudo tar --no-overwrite-dir -C / -xzf containerd-2.2.0-linux-amd64.tar.gz
+```
+
+```
+rm -rf containerd-2.2.0-linux-amd64.tar.gz
+```
+
+
+Download the Containerd for `ARM` system:
+
+```
+wget https://github.com/containerd/containerd/releases/download/v2.2.0/containerd-2.2.0-linux-arm64.tar.gz
+```
+
+```
+sudo tar --no-overwrite-dir -C / -xzf containerd-2.2.0-linux-arm64.tar.gz
+```
+
+```
+rm -rf containerd-2.2.0-linux-arm64.tar.gz
+```
+
+Install the Containerd
+```
+sudo mkdir -p /etc/containerd
+```
+
+```
+containerd config default | sudo tee /etc/containerd/config.toml
+```
+
+```
+sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
+```
+
+```
+sudo systemctl restart containerd
+```
+
+Install Runc
+
+```
+wget https://github.com/opencontainers/runc/releases/download/v1.2.6/runc.amd64
+install -m 755 runc.amd64 /usr/local/sbin/runc
+```
+
+Install CNI Plugins
+
+```
+wget https://github.com/containernetworking/plugins/releases/download/v1.6.2/cni-plugins-linux-amd64-v1.6.2.tgz
+sudo mkdir -p /opt/cni/bin
+sudo tar -C /opt/cni/bin -xzvf cni-plugins-linux-amd64-v1.6.2.tgz
+sudo systemctl restart containerd
+```
+
+For additional information on installing Containerd, please reference [Install Containerd with Release Tarball](https://github.com/containerd/containerd/blob/master/docs/cri/installation.md).
+
+### Installing CRI-O(Option 2)
+
+Setup the Apt repositry for CRI-O
+
+```
+OS=xUbuntu_24.04
+VERSION=1.33
+```
+`NOTE:` VERSION (CRI-O version) is same as kubernetes major version 
+
+```
+echo "deb [signed-by=/usr/share/keyrings/libcontainers-archive-keyring.gpg] https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
+```
+
+```
+sudo mkdir -p /usr/share/keyrings
+```
+
+```
+curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo gpg --dearmor -o /usr/share/keyrings/libcontainers-archive-keyring.gpg
+```
+
+```
+echo "deb [signed-by=/usr/share/keyrings/libcontainers-crio-archive-keyring.gpg] http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list
+```
+
+```
+curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/Release.key | sudo gpg --dearmor -o /usr/share/keyrings/libcontainers-crio-archive-keyring.gpg
+```
+
+Install the CRI-O and dependencies 
+
+```
+sudo apt update && sudo apt install cri-o cri-o-runc cri-tools -y
+```
+
+Enable and Start the CRI-O service 
+
+```
+sudo systemctl enable crio.service && sudo systemctl start crio.service
+```
+
+### Installing Kubernetes 
+
+Make sure your container runtime has been started and enabled before beginning installation:
+
+```
+ sudo systemctl start containerd && sudo systemctl enable containerd
+```
+
+Execute the following to add apt keys:
+
+```
+ sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl gpg
+```
+
+```
+curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
+sudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg
+```
+
+```
+ sudo mkdir -p  /etc/apt/sources.list.d/
+```
+
+Create kubernetes.list:
+
+```
+echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
+sudo chmod 644 /etc/apt/sources.list.d/kubernetes.list 
+```
+
+
+Now execute the below to install kubelet, kubeadm, and kubectl:
+
+```
+ sudo apt update
+```
+
+```
+ sudo apt install -y -q kubelet=1.33.6-1.1  kubectl=1.33.6-1.1  kubeadm=1.33.6-1.1 
+```
+
+```
+ sudo apt-mark hold kubelet kubeadm kubectl
+```
+
+Create a kubelet default with your container runtime:
+
+`NOTE:`  The container runtime endpoint will be `unix:/run/containerd/containerd.sock` or `unix:/run/crio/crio.sock` depending on which container runtime you chose in the previous steps.
+
+For `Containerd` system:
+
+```
+ cat <<EOF | sudo tee /etc/default/kubelet
+KUBELET_EXTRA_ARGS=--cgroup-driver=systemd --runtime-request-timeout=15m --container-runtime-endpoint="unix:/run/containerd/containerd.sock"
+EOF
+```
+
+For `CRI-O` system:
+
+```
+cat <<EOF | sudo tee /etc/default/kubelet
+KUBELET_EXTRA_ARGS=--cgroup-driver=systemd --runtime-request-timeout=15m --container-runtime-endpoint="unix:/run/crio/crio.sock"
+EOF
+```
+
+Reload the system daemon:
+```
+sudo systemctl daemon-reload
+```
+
+Disable swap:
+```
+sudo swapoff -a
+```
+
+```
+sudo nano /etc/fstab
+```
+
+`NOTE:` Add a # before all the lines that start with /swap. # is a comment, and the result should look something like this:
+
+```
+UUID=e879fda9-4306-4b5b-8512-bba726093f1d / ext4 defaults 0 0
+UUID=DCD4-535C /boot/efi vfat defaults 0 0
+#/swap.img       none    swap    sw      0       0
+```
+
+#### Initializing the Kubernetes cluster to run as a control-plane node
+
+Execute the following command for `Containerd` systems:
+
+```
+sudo kubeadm init --pod-network-cidr=192.168.32.0/22 --cri-socket=/run/containerd/containerd.sock --kubernetes-version="v1.33.6"
+```
+
+Eecute the following command for `CRI-O` systems:
+
+```
+sudo kubeadm init --pod-network-cidr=192.168.32.0/22 --cri-socket=unix:/run/crio/crio.sock --kubernetes-version="v1.33.6"
+```
+
+Output:
+```
+Your Kubernetes control-plane has initialized successfully!
+ 
+To start using your cluster, you need to run the following as a regular user:
+ 
+  mkdir -p $HOME/.kube
+  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
+  sudo chown $(id -u):$(id -g) $HOME/.kube/config
+ 
+Alternatively, if you are the root user, you can run:
+ 
+  export KUBECONFIG=/etc/kubernetes/admin.conf
+ 
+You should now deploy a pod network to the cluster.
+Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
+  https://kubernetes.io/docs/concepts/cluster-administration/addons/
+ 
+Then you can join any number of worker nodes by running the following on each as root:
+ 
+kubeadm join <your-host-IP>:6443 --token 489oi5.sm34l9uh7dk4z6cm \
+        --discovery-token-ca-cert-hash sha256:17165b6c4a4b95d73a3a2a83749a957a10161ae34d2dfd02cd730597579b4b34
+```
+
+
+Following the instructions in the output, execute the commands as shown below:
+
+```
+mkdir -p $HOME/.kube
+```
+
+```
+sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
+```
+
+```
+sudo chown $(id -u):$(id -g) $HOME/.kube/config
+```
+
+With the following command, you install a pod-network add-on to the control plane node. We are using calico as the pod-network add-on here:
+
+```
+kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.2/manifests/calico.yaml
+```
+
+Update the Calico Daemonset 
+
+```
+kubectl set env daemonset/calico-node -n kube-system IP_AUTODETECTION_METHOD=interface=ens\*,eth\*,enc\*,enp\*
+```
+
+You can execute the below commands to ensure that all pods are up and running:
+
+```
+kubectl get pods --all-namespaces
+```
+
+Output:
+
+```
+NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
+kube-system   calico-kube-controllers-65b8787765-bjc8h   1/1     Running   0          2m8s
+kube-system   calico-node-c2tmk                          1/1     Running   0          2m8s
+kube-system   coredns-5c98db65d4-d4kgh                   1/1     Running   0          9m8s
+kube-system   coredns-5c98db65d4-h6x8m                   1/1     Running   0          9m8s
+kube-system   etcd-#yourhost                             1/1     Running   0          8m25s
+kube-system   kube-apiserver-#yourhost                   1/1     Running   0          8m7s
+kube-system   kube-controller-manager-#yourhost          1/1     Running   0          8m3s
+kube-system   kube-proxy-6sh42                           1/1     Running   0          9m7s
+kube-system   kube-scheduler-#yourhost                   1/1     Running   0          8m26s
+```
+
+The get nodes command shows that the control-plane node is up and ready:
+
+```
+kubectl get nodes
+```
+
+Output:
+
+```
+NAME             STATUS   ROLES                  AGE   VERSION
+#yourhost        Ready    control-plane          10m   v1.33.6
+```
+
+Since we are using a single-node Kubernetes cluster, the cluster will not schedule pods on the control plane node by default. To schedule pods on the control plane node, we have to remove the taint by executing the following command:
+
+```
+kubectl taint nodes --all node-role.kubernetes.io/control-plane-
+```
+
+Refer to [Installing Kubeadm](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/)
+for more information.
+
+### Installing Helm 
+
+Execute the following command to download and install Helm 4.0.0 for `x86-64` system: 
+
+```
+wget https://get.helm.sh/helm-v4.0.0-linux-amd64.tar.gz
+```
+
+```
+tar -zxvf helm-v4.0.0-linux-amd64.tar.gz
+ ```
+ 
+ ```
+sudo mv linux-amd64/helm /usr/local/bin/helm
+ ```
+
+ ```
+rm -rf helm-v4.0.0-linux-amd64.tar.gz linux-amd64/
+```
+
+Download and install Helm 4.0.0 for `ARM` system: 
+
+```
+wget https://get.helm.sh/helm-v4.0.0-linux-arm64.tar.gz
+```
+
+```
+tar -zxvf helm-v4.0.0-linux-arm64.tar.gz
+ ```
+ 
+```
+sudo mv linux-arm64/helm /usr/local/bin/helm
+```
+
+```
+rm -rf helm-v4.0.0-linux-arm64.tar.gz linux-arm64/
+```
+
+Refer to the Helm 4.0.0 [release notes](https://github.com/helm/helm/releases) and the [Installing Helm guide](https://helm.sh/docs/using_helm/#installing-helm) for more information.
+
+
+### Adding an Additional Node to NVIDIA Cloud Native Stack
+
+`NOTE:` If you're not adding additional nodes, please skip this step and proceed to the next step [Installing NVIDIA Network Operator](#Installing-NVIDIA-Network-Operator)
+
+Make sure to install the Containerd and Kubernetes packages on additional nodes.
+
+Prerequisites: 
+- [Installing Containerd](#Installing-Containerd)
+- [Installing Kubernetes](#Installing-Kubernetes)
+- [Disable swap](#Disable-swap)
+
+Once the prerequisites are completed on the additional nodes, execute the below command on the control-plane node and then execute the join command output on an additional node to add the additional node to NVIDIA Cloud Native Stack:
+
+```
+sudo kubeadm token create --print-join-command
+```
+
+Output:
+```
+example: 
+sudo kubeadm join 10.110.0.34:6443 --token kg2h7r.e45g9uyrbm1c0w3k     --discovery-token-ca-cert-hash sha256:77fd6571644373ea69074dd4af7b077bbf5bd15a3ed720daee98f4b04a8f524e
+```
+`NOTE`: control-plane node and worker node should not have the same node name. 
+
+The get nodes command shows that the master and worker nodes are up and ready:
+
+```
+kubectl get nodes
+```
+
+Output:
+
+```
+NAME             STATUS   ROLES                  AGE   VERSION
+#yourhost        Ready    control-plane          10m   v1.33.6
+#yourhost-worker Ready                           10m   v1.33.6
+```
+
+### Installing NVIDIA Network Operator
+
+`NOTE:` If Mellanox NICs are not connected to your nodes, please skip this step and proceed to the next step [Installing GPU Operator](#Installing-GPU-Operator)
+
+The below instructions assume that Mellanox NICs are connected to your machines.
+
+Execute the below command to verify Mellanox NICs are enabled on your machines:
+
+```
+lspci | grep -i "Mellanox"
+```
+
+Output:
+```
+0c:00.0 Ethernet controller: Mellanox Technologies MT2892 Family [ConnectX-6 Dx]
+0c:00.1 Ethernet controller: Mellanox Technologies MT2892 Family [ConnectX-6 Dx]
+```
+Execute the below command to determine which Mellanox device is active:
+
+`NOTE:` Use whicever device shows as `Link Detected: yes` in further steps. The below command works only if you add the NICs before installing the Operating System.
+
+```
+for device in `sudo lshw -class network -short | grep -i ConnectX | awk '{print $2}' | egrep -v 'Device|path' | sed '/^$/d'`;do echo -n $device; sudo ethtool $device | grep -i "Link detected"; done
+```
+Output:
+```
+ens160f0        Link detected: yes
+ens160f1        Link detected: no
+```
+
+Create the custom network operator values.yaml and update the active Mellanox device from the above command:
+```
+nano network-operator-values.yaml
+deployCR: true
+ofedDriver:
+  deploy: true
+rdmaSharedDevicePlugin:
+  deploy: true
+  resources:
+    - name: rdma_shared_device_a
+      vendors: [15b3]
+      devices: [ens160f0]
+```
+
+For more information about custom network operator values.yaml, please refer [Network Operator](https://docs.mellanox.com/display/COKAN10/Network+Operator#NetworkOperator-Example2:RDMADevicePluginConfiguration)
+
+Add the NVIDIA repo:
+```
+helm repo add mellanox https://mellanox.github.io/network-operator
+```
+
+Update the Helm repo:
+```
+ helm repo update
+```
+Install Network Operator:
+```
+kubectl label nodes --all node-role.kubernetes.io/master- --overwrite
+```
+
+```
+helm install -f --version 25.7.0 ./network-operator-values.yaml -n network-operator --create-namespace --wait network-operator mellanox/network-operator
+```
+#### Validating the State of the Network Operator
+
+Please note that the installation of the Network Operator can take a couple of minutes. How long the installation will take depends on your internet speed.
+
+```
+kubectl get pods --all-namespaces | egrep 'network-operator|nvidia-network-operator-resources'
+```
+
+```
+NAMESPACE                           NAME                                                              READY   STATUS      RESTARTS   AGE
+network-operator                    network-operator-547cb8d999-mn2h9                                 1/1     Running            0          17m
+network-operator                    network-operator-node-feature-discovery-master-596fb8b7cb-qrmvv   1/1     Running            0          17m
+network-operator                    network-operator-node-feature-discovery-worker-qt5xt              1/1     Running            0          17m
+nvidia-network-operator-resources   cni-plugins-ds-dl5vl                                              1/1     Running            0          17m
+nvidia-network-operator-resources   kube-multus-ds-w82rv                                              1/1     Running            0          17m
+nvidia-network-operator-resources   mofed-ubuntu20.04-ds-xfpzl                                        1/1     Running            0          17m
+nvidia-network-operator-resources   rdma-shared-dp-ds-2hgb6                                           1/1     Running            0          17m
+nvidia-network-operator-resources   sriov-device-plugin-ch7bz                                         1/1     Running            0          10m
+nvidia-network-operator-resources   whereabouts-56ngr                                                 1/1     Running            0          10m
+```
+
+Please refer to the [Network Operator page](https://docs.mellanox.com/display/COKAN10/Network+Operator) for more information.
+
+### Installing GPU Operator
+
+Add the NVIDIA repo:
+
+```
+helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
+```
+
+Update the Helm repo:
+
+```
+helm repo update
+```
+
+Install GPU Operator:
+
+`NOTE:` If you installed Network Operator, please skip the below command and follow the [GPU Operator with RDMA](#GPU-Operator-with-RDMA)
+
+```
+helm install --version 25.10.1 --create-namespace --namespace nvidia-gpu-operator nvidia/gpu-operator  --set driver.version=580.105.08 --wait --generate-name
+```
+
+#### GPU Operator with RDMA 
+
+- Prerequisites:
+  - Please install the [Network Operator](#Installing NVIDIA Network Operator) to ensure that the MOFED drivers are installed. 
+
+After Network Operator installation is completed, execute the below command to install the GPU Operator to load nv_peer_mem modules:
+
+```
+ helm install --version 25.10.1 --create-namespace --namespace nvidia-gpu-operator nvidia/gpu-operator  --set driver.rdma.enabled=true  --wait --generate-name
+```
+
+#### GPU Operator with Host MOFED Driver and RDMA 
+
+If the host is already installed MOFED driver without network operator, execute the below command to install the GPU Operator to load nv_peer_mem module 
+
+```
+ helm install --version 25.10.1 --create-namespace --namespace nvidia-gpu-operator nvidia/gpu-operator --set driver.rdma.enabled=true,driver.rdma.useHostMofed=true --wait --generate-name 
+
+```
+
+### GPU Operator with GPU Direct Storage(GDS) 
+
+Execute the below command to enable the GPU Direct Storage Driver on GPU Operator 
+
+```
+helm install --version 25.10.1 --create-namespace --namespace nvidia-gpu-operator nvidia/gpu-operator --set gds.enabled=true
+```
+For more information refer, [GPU Direct Storage](https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/gpu-operator-rdma.html)
+
+#### Validating the State of the GPU Operator:
+
+Please note that the installation of the GPU Operator can take a couple of minutes. How long the installation will take depends on your internet speed.
+
+```
+kubectl get pods --all-namespaces | grep -v kube-system
+```
+
+```
+NAMESPACE                NAME                                                              READY   STATUS      RESTARTS   AGE
+default                  gpu-operator-1622656274-node-feature-discovery-master-5cddq96gq   1/1     Running     0          2m39s
+default                  gpu-operator-1622656274-node-feature-discovery-worker-wr88v       1/1     Running     0          2m39s
+default                  gpu-operator-7db468cfdf-mdrdp                                     1/1     Running     0          2m39s
+nvidia-gpu-operator      gpu-feature-discovery-g425f                                       1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-container-toolkit-daemonset-mcmxj                          1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-cuda-validator-s6x2p                                       0/1     Completed   0          48s
+nvidia-gpu-operator      nvidia-dcgm-exporter-wtxnx                                        1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-dcgm-jbz94                                                 1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-device-plugin-daemonset-hzzdt                              1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-device-plugin-validator-9nkxq                              0/1     Completed   0          17s
+nvidia-gpu-operator      nvidia-driver-daemonset-kt8g5                                     1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-operator-validator-cw4j5                                   1/1     Running     0          2m20s
+
+```
+
+Please refer to the [GPU Operator page](https://ngc.nvidia.com/catalog/helm-charts/nvidia:gpu-operator) on NGC for more information.
+
+For multiple worker nodes, execute the below command to fix the CoreDNS and Node Feature Discovery. 
+
+```
+kubectl delete pods $(kubectl get pods -n kube-system | grep core | awk '{print $1}') -n kube-system; kubectl delete pod $(kubectl get pods -o wide -n nvidia-gpu-operator | grep node-feature-discovery | grep -v master | awk '{print $1}') -n nvidia-gpu-operator
+```
+
+#### GPU Operator with MIG
+
+`NOTE:` Only A100 and A30 GPUs are supported for GPU Operator with MIG
+
+Multi-Instance GPU (MIG) allows GPUs based on the NVIDIA Ampere architecture (such as NVIDIA A100) to be securely partitioned into separate GPU instances for CUDA applications. For more information about enabling the MIG capability, please refer to [GPU Operator with MIG](https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/gpu-operator-mig.html) 
+
+### Validating the Network Operator with GPUDirect RDMA
+
+Execute the below command to list the Mellanox NIC's with the status:
+```
+kubectl exec -it $(kubectl get pods -n nvidia-network-operator-resources | grep mofed | awk '{print $1}') -n nvidia-network-operator-resources -- ibdev2netdev
+```
+Output:
+```
+mlx5_0 port 1 ==> ens192f0 (Up)
+mlx5_1 port 1 ==> ens192f1 (Down)
+```
+
+Create network definition for IPAM and replace the `ens192f0` with an active Mellanox device for `master`:
+```
+$ nano networkdefinition.yaml 
+apiVersion: k8s.cni.cncf.io/v1
+kind: NetworkAttachmentDefinition
+metadata:
+  annotations:
+    k8s.v1.cni.cncf.io/resourceName: rdma/rdma_shared_device_a
+  name: rdma-net-ipam
+  namespace: default
+spec:
+  config: |-
+    {
+        "cniVersion": "0.3.1",
+        "name": "rdma-net-ipam",
+        "plugins": [
+            {
+                "ipam": {
+                    "datastore": "kubernetes",
+                    "kubernetes": {
+                        "kubeconfig": "/etc/cni/net.d/whereabouts.d/whereabouts.kubeconfig"
+                    },
+                    "log_file": "/tmp/whereabouts.log",
+                    "log_level": "debug",
+                    "range": "192.168.112.0/24",
+                    "type": "whereabouts"
+                },
+                "type": "macvlan",
+                "master": "ens192f0"
+            },
+            {
+                "mtu": 1500,
+                "type": "tuning"
+            }
+        ]
+    }
+EOF
+``` 
+`NOTE:` If you do not have VLAN-based networking on the high-performance side, please set "vlan": 0
+
+ 
+Execute the below command to install network definition on NVIDIA Cloud Native Stack from the control-plane node:
+ 
+ ```
+kubectl apply -f networkdefinition.yaml 
+ ```
+ 
+Now create the pod YAML with the below content:
+
+``` 
+cat <<EOF | tee mellanox-test.yaml
+apiVersion: v1
+kind: Pod
+metadata:
+  name: rdma-test-pod-1
+  annotations:
+    k8s.v1.cni.cncf.io/networks: rdma-net-ipam
+    # If a network with static IPAM is used replace network annotation with the below.
+    #k8s.v1.cni.cncf.io/networks: '[
+    #  { "name": "rmda-net-ipam",
+    #    "ips": ["192.168.111.101/24"],
+    #    "gateway": ["192.168.111.1"]
+    #  }
+    #]'
+spec:
+  restartPolicy: OnFailure
+  containers:
+  - image: mellanox/rping-test
+    name: rdma-test-ctr
+    securityContext:
+      capabilities:
+        add: [ "IPC_LOCK" ]
+    resources:
+      limits:
+        rdma/rdma_shared_device_a: 1
+      requests:
+        rdma/rdma_shared_device_a: 1
+    command:
+    - sh
+    - -c
+    - |
+      ls -l /dev/infiniband /sys/class/net
+      sleep infinity
+---
+apiVersion: v1
+kind: Pod
+metadata:
+  name: rdma-test-pod-2
+  annotations:
+    k8s.v1.cni.cncf.io/networks: rdma-net-ipam
+    # If a network with static IPAM is used replace network annotation with the below.
+    #k8s.v1.cni.cncf.io/networks: '[
+    #  { "name": "rmda-net-ipam",
+    #    "ips": ["192.168.111.101/24"],
+    #    "gateway": ["192.168.111.1"]
+    #  }
+    #]'
+spec:
+  restartPolicy: OnFailure
+  containers:
+  - image: mellanox/rping-test
+    name: rdma-test-ctr
+    securityContext:
+      capabilities:
+        add: [ "IPC_LOCK" ]
+    resources:
+      limits:
+        rdma/rdma_shared_device_a: 1
+      requests:
+        rdma/rdma_shared_device_a: 1
+    command:
+    - sh
+    - -c
+    - |
+      ls -l /dev/infiniband /sys/class/net
+      sleep infinity
+EOF
+ ```
+
+Apply the Mellanox test pod to the NVIDIA Cloud Native Stack  for the validation:
+```
+kubectl apply -f mellanox-test.yaml
+```
+
+Once you apply, verify the `rdma-test-pod-1` pod logs. You should see the expected output as shown below:
+`NOTE:` How long the pods take to run depends on your internet speed.
+
+Expected Output:
+```
+kubectl logs rdma-test-pod-1
+
+/dev/infiniband:
+total 0
+crw------- 1 root root 231,  64 Jun 1 02:26 issm0
+crw-rw-rw- 1 root root  10,  54 Jun 1 02:26 rdma_cm
+crw------- 1 root root 231,   0 Jun 1 02:26 umad0
+crw-rw-rw- 1 root root 231, 192 Jun 1 02:26 uverbs0
+ 
+/sys/class/net:
+total 0
+lrwxrwxrwx 1 root root 0 Jun 1 02:26 eth0 -> ../../devices/virtual/net/eth0
+lrwxrwxrwx 1 root root 0 Jun 1 02:26 lo -> ../../devices/virtual/net/lo
+lrwxrwxrwx 1 root root 0 Jun 1 02:26 net1 -> ../../devices/virtual/net/net1
+lrwxrwxrwx 1 root root 0 Jun 1 02:26 tunl0 -> ../../devices/virtual/net/tunl0
+```
+
+Execute the below command to list the Mellanox NIC's with the status:
+```
+kubectl exec -it $(kubectl get pods -n nvidia-network-operator-resources | grep mofed | awk '{print $1}') -n nvidia-network-operator-resources -- ibdev2netdev
+```
+Output:
+```
+mlx5_0 port 1 ==> ens192f0 (Up)
+mlx5_1 port 1 ==> ens192f1 (Down)
+```
+
+Update the above Mellanox NIC, for which status is `Up` in the below command:
+
+```
+kubectl exec -it rdma-test-pod-1 -- bash
+
+[root@rdma-test-pod-1 /]# ib_write_bw -d mlx5_0 -a -F --report_gbits -q 1
+************************************
+* Waiting for client to connect... *
+************************************
+```
+
+In a separate terminal, print the network address of the secondary interface on the `rdma-test-pod-1` pod:
+
+```
+$ kubectl exec rdma-test-pod-1 -- ip addr show dev net1
+5: net1@if24: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc noqueue state UP group default
+    link/ether 62:51:fb:13:88:ce brd ff:ff:ff:ff:ff:ff link-netnsid 0
+    inet 192.168.111.1/24 brd 192.168.111.255 scope global net1
+       valid_lft forever preferred_lft forever
+```
+
+Execute the below command with the above inet address to verify the nv_peer_memory performance on NVIDIA Cloud Native Stack:
+```
+$ kubectl exec -it rdma-test-pod-2 -- bash
+[root@rdma-test-pod-1 /]# ib_write_bw -d mlx5_0 -a -F --report_gbits -q 1 192.168.111.2
+---------------------------------------------------------------------------------------
+                    RDMA_Write BW Test
+ Dual-port       : OFF		Device         : mlx5_0
+ Number of qps   : 1		Transport type : IB
+ Connection type : RC		Using SRQ      : OFF
+ TX depth        : 128
+ CQ Moderation   : 100
+ Mtu             : 1024[B]
+ Link type       : Ethernet
+ GID index       : 4
+ Max inline data : 0[B]
+ rdma_cm QPs	 : OFF
+ Data ex. method : Ethernet
+---------------------------------------------------------------------------------------
+ local address: LID 0000 QPN 0x0137 PSN 0x3c5d65 RKey 0x00370e VAddr 0x007ff44bf1d000
+ GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:111:01
+ remote address: LID 0000 QPN 0x0136 PSN 0x475031 RKey 0x002c23 VAddr 0x007fd3d83cb000
+ GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:111:02
+---------------------------------------------------------------------------------------
+ #bytes     #iterations    BW peak[Gb/sec]    BW average[Gb/sec]   MsgRate[Mpps]
+ 2          5000           0.080755            0.073090            4.568094
+ 4          5000             0.16               0.15   		   4.588128
+ 8          5000             0.31               0.29   		   4.567442
+ 16         5000             0.66               0.59   		   4.647555
+ 32         5000             1.35               1.22   		   4.776518
+ 64         5000             2.50               2.29   		   4.481806
+ 128        5000             5.34               4.73   		   4.621828
+ 256        5000             10.53              9.11   		   4.448153
+ 512        5000             21.03              17.05  		   4.162100
+ 1024       5000             38.67              34.16  		   4.169397
+ 2048       5000             47.11              43.50  		   2.655219
+ 4096       5000             51.29              51.02  		   1.557094
+ 8192       5000             52.00              51.98  		   0.793178
+ 16384      5000             52.33              52.32  		   0.399164
+ 32768      5000             52.47              52.47  		   0.200143
+ 65536      5000             52.51              52.50  		   0.100143
+ 131072     5000             52.51              52.51  		   0.050078
+ 262144     5000             52.49              52.49  		   0.025029
+ 524288     5000             52.50              52.50  		   0.012517
+ 1048576    5000             52.51              52.51  		   0.006260
+ 2097152    5000             52.51              52.51  		   0.003130
+ 4194304    5000             52.51              52.51  		   0.001565
+ 8388608    5000             52.52              52.52  		   0.000783
+---------------------------------------------------------------------------------------
+```
+
+```
+[root@rdma-test-pod-1 /]# ib_write_bw -d mlx5_0 -a -F --report_gbits -q 1
+
+************************************
+* Waiting for client to connect... *
+************************************
+---------------------------------------------------------------------------------------
+                    RDMA_Write BW Test
+ Dual-port       : OFF		Device         : mlx5_0
+ Number of qps   : 1		Transport type : IB
+ Connection type : RC		Using SRQ      : OFF
+ CQ Moderation   : 100
+ Mtu             : 1024[B]
+ Link type       : Ethernet
+ GID index       : 8
+ Max inline data : 0[B]
+ rdma_cm QPs	 : OFF
+ Data ex. method : Ethernet
+---------------------------------------------------------------------------------------
+ local address: LID 0000 QPN 0x0136 PSN 0x475031 RKey 0x002c23 VAddr 0x007fd3d83cb000
+ GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:111:02
+ remote address: LID 0000 QPN 0x0137 PSN 0x3c5d65 RKey 0x00370e VAddr 0x007ff44bf1d000
+ GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:111:01
+---------------------------------------------------------------------------------------
+ #bytes     #iterations    BW peak[Gb/sec]    BW average[Gb/sec]   MsgRate[Mpps]
+ 8388608    5000             52.52              52.52  		   0.000783
+---------------------------------------------------------------------------------------
+```
+The benchmark achieved approximately 52 Gbps throughput.
+
+Exit from RDMA test pods and then delete the RDMA test pods with the below command:
+
+```
+$ kubectl delete pod rdma-test-pod-1 rdma-test-pod-2
+```
+
+### Validating the GPU Operator
+
+GPU Operator validates the  through the nvidia-device-plugin-validation pod and the nvidia-driver-validation pod. If both are completed successfully (see output from kubectl get pods --all-namespaces | grep -v kube-system), NVIDIA Cloud Native Stack is working as expected. This section provides two examples of validating that the GPU is usable from within a pod to validate the  manually.
+
+#### Example 1: nvidia-smi
+
+Execute the following:
+
+```
+cat <<EOF | tee nvidia-smi.yaml
+apiVersion: v1
+kind: Pod
+metadata:
+  name: nvidia-smi
+spec:
+  restartPolicy: OnFailure
+  containers:
+    - name: nvidia-smi
+      image: "nvidia/cuda:12.8.0-base-ubuntu24.04"
+      args: ["nvidia-smi"]
+EOF
+```
+
+```
+kubectl apply -f nvidia-smi.yaml
+```
+
+```
+kubectl logs nvidia-smi
+```
+
+Output:
+
+``` 
+Mon Nov 24 20:39:28 2025
++-----------------------------------------------------------------------------------------+
+| NVIDIA-SMI 580.105.08             Driver Version: 580.105.08     CUDA Version: 13.0       |
+|-----------------------------------------+------------------------+----------------------+
+| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
+| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
+|                                         |                        |               MIG M. |
+|=========================================+========================+======================|
+|   0  NVIDIA A100-SXM4-80GB          On  |   00000000:03:00.0 Off |                    0 |
+| N/A   29C    P0             50W /  275W |       1MiB /  81920MiB |      0%      Default |
+|                                         |                        |             Disabled |
++-----------------------------------------+------------------------+----------------------+
+
++-----------------------------------------------------------------------------------------+
+| Processes:                                                                              |
+|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
+|        ID   ID                                                               Usage      |
+|=========================================================================================|
+|  No running processes found                                                             |
++-----------------------------------------------------------------------------------------+
+```
+
+#### Example 2: CUDA-Vector-Add
+
+`NOTE:` CUDA Vector Validation is not available for ARM systems yet.
+
+Create a pod YAML file:
+
+```
+cat <<EOF | tee cuda-samples.yaml
+apiVersion: v1
+kind: Pod
+metadata:
+  name: cuda-vector-add
+spec:
+  restartPolicy: OnFailure
+  containers:
+    - name: cuda-vector-add
+      image: "k8s.gcr.io/cuda-vector-add:v0.1"
+EOF
+```
+
+Execute the below command to create a sample GPU pod:
+
+```
+kubectl apply -f cuda-samples.yaml
+```
+
+Confirm the cuda-samples pod was created:
+
+```
+kubectl get pods
+``` 
+
+NVIDIA Cloud Native Stack works as expected if the get pods command shows the pod status as completed.
+
+### Validate NVIDIA Cloud Native Stack with an Application from NGC
+Another option to validate NVIDIA Cloud Native Stack is by running a demo application hosted on NGC.
+
+NGC is NVIDIA's GPU-optimized software hub. NGC provides a curated set of GPU-optimized software for AI, HPC, and visualization. The content provided by NVIDIA and third-party ISVs simplify building, customizing, and integrating GPU-optimized software into workflows, accelerating the time to solutions for users.
+
+Containers, pre-trained models, Helm charts for Kubernetes deployments, and industry-specific AI toolkits with software development kits (SDKs) are hosted on NGC. For more information about how to deploy an application that is hosted on NGC or the NGC Private Registry, please refer to this [NGC Registry Guide](https://github.com/NVIDIA/cloud-native-stack/blob/master/install-guides/NGC_Registry_Guide_v1.0.md). Visit the [public NGC documentation](https://docs.nvidia.com/ngc) for more information.
+
+The steps in this section use the publicly available DeepStream - Intelligent Video Analytics (IVA) demo application Helm Chart. The application can validate the full NVIDIA Cloud Native Stack and test the connectivity of NVIDIA Cloud Native Stack to remote sensors. DeepStream delivers real-time AI-based video and image understanding and multi-sensor processing on GPUs. For more information, please refer to the [Helm Chart](https://ngc.nvidia.com/catalog/helm-charts/nvidia:video-analytics-demo).
+
+There are two ways to configure the DeepStream - Intelligent Video Analytics Demo Application on your NVIDIA Cloud Native Stack
+
+- Using a camera
+- Using the integrated video file (no camera required)
+
+#### Using a camera
+
+##### Prerequisites: 
+- RTSP Camera stream
+
+Go through the below steps to install the demo application:
+```
+1. helm fetch https://helm.ngc.nvidia.com/nvidia/charts/video-analytics-demo-0.1.9.tgz --untar
+
+2. cd into the folder video-analytics-demo and update the file values.yaml
+
+3. Go to the section Cameras in the values.yaml file and add the address of your IP camera. Read the comments section on how it can be added. Single or multiple cameras can be added as shown below
+
+cameras:
+ camera1: rtsp://XXXX
+```
+
+Execute the following command to deploy the demo application:
+```
+helm install video-analytics-demo --name-template iva
+```
+
+Once the Helm chart is deployed, access the application with the VLC player. See the instructions below. 
+
+#### Using the integrated video file (no camera)
+
+If you dont have a camera input, please execute the below commands to use the default video already integrated into the application:
+
+```
+helm fetch https://helm.ngc.nvidia.com/nvidia/charts/video-analytics-demo-0.1.9.tgz
+
+helm install video-analytics-demo-0.1.9.tgz --name-template iva
+```
+
+Once the helm chart is deployed, access the application with the VLC player as per the below instructions. 
+For more information about the demo application, please refer to the [application NGC page](https://ngc.nvidia.com/catalog/helm-charts/nvidia:video-analytics-demo)
+
+#### Access from WebUI
+
+Use the below WebUI URL to access the video analytic demo application from the browser:
+```
+http://IPAddress of Node:31115/
+```
+
+#### Access from VLC
+
+Download VLC Player from https://www.videolan.org/vlc/ on the machine where you intend to view the video stream.
+
+View the video stream in VLC by navigating to Media > Open Network Stream > Entering the following URL:
+
+```
+rtsp://IPAddress of Node:31113/ds-test
+```
+
+You should see the video output like below with the AI model detecting objects.
+
+![Deepstream_Video](screenshots/Deepstream.png)
+
+`NOTE:` Video stream in VLC will change if you provide an input RTSP camera.
+
+
+### Uninstalling the GPU Operator 
+
+Execute the below commands to uninstall the GPU Operator:
+
+```
+$ helm ls
+NAME                    NAMESPACE                      REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
+gpu-operator-1606173805 nvidia-gpu-operator            1               2025-11-24 20:23:28.063421701 +0000 UTC deployed        gpu-operator-25.10.1      25.10.1 
+
+$ helm del gpu-operator-1606173805 -n nvidia-gpu-operator
+
+```
+
+### Uninstalling the Network Operator
+
+Execute the below commands to uninstall the Network Operator:
+
+```
+$ helm ls -n network-operator
+NAME            	NAMESPACE       	REVISION	UPDATED                                	STATUS  	CHART                 	APP VERSION
+network-operator	network-operator	1       	2025-11-24 17:09:04.665593336 +0000 UTC	deployed	network-operator-25.7.0	v25.7.0
+
+$ helm del network-operator -n network-operator
+```
diff --git a/install-guides/Ubuntu-24-04_Server_x86-arm64_v17.0.md b/install-guides/Ubuntu-24-04_Server_x86-arm64_v17.0.md
new file mode 100644
index 00000000..faedfbb0
--- /dev/null
+++ b/install-guides/Ubuntu-24-04_Server_x86-arm64_v17.0.md
@@ -0,0 +1,1143 @@
+# NVIDIA Cloud Native Stack v17.0 - Install Guide for Ubuntu Server
+## Introduction
+
+This document describes how to setup the NVIDIA Cloud Native Stack collection on a single or multiple NVIDIA Certified Systems. NVIDIA Cloud Native Stack can be configured to create a single node Kubernetes cluster or to create/add additional worker nodes to join an existing cluster.
+
+NVIDIA Cloud Native Stack v17.0 includes:
+- Ubuntu 24.04 LTS
+- Containerd 2.2.0
+- Kubernetes version 1.34.2
+- Helm 4.0.0
+- NVIDIA GPU Operator 25.10.1
+  - NVIDIA GPU Driver: 580.105.08
+  - NVIDIA Container Toolkit: 1.18.1
+  - NVIDIA K8S Device Plugin: 0.18.1
+  - NVIDIA DCGM-Exporter: 4.4.2-4.7.0
+  - NVIDIA DCGM: 4.4.2-1
+  - NVIDIA GPU Feature Discovery: 0.18.2
+  - NVIDIA K8s MIG Manager: 0.13.1
+  - Node Feature Discovery: 0.17.3
+  - NVIDIA KubeVirt GPU Device Plugin: 1.3.1
+  - NVIDIA GDS Driver: 2.20.5
+  - NVIDIA Kata Manager for Kubernetes: 0.2.3
+  - NVIDIA Confidential Computing Manager for Kubernetes: 0.1.1
+- NVIDIA Network Operator 25.7.0
+  - Node Feature Discovery: 25.7.0
+  - Mellanox MOFED/DOCA Driver 25.07-0.6.1.0-0
+  - RDMA Shared Device Plugin 1.5.3
+  - SRIOV Device Plugin 3.9.0
+  - Container Networking Plugins 1.6.2
+  - Multus 4.1.0
+  - Whereabouts 0.7.0
+
+## Table of Contents
+
+- [Prerequisites](#Prerequisites)
+- [Installing the Ubuntu Operating System](#Installing-the-Ubuntu-Operating-System)
+- [Installing Container Runtime](#Installing-Container-Runtime)
+  - [Installing Containerd](#Installing-Containerd)
+  - [Installing CRI-O](#Installing-CRI-O)
+- [Installing Kubernetes](#Installing-Kubernetes)
+- [Installing Helm](#Installing-Helm)
+- [Adding an Additional Node to NVIDIA Cloud Native Stack](#Adding-additional-node-to-NVIDIA-Cloud-Native-Stack)
+- [Installing NVIDIA Network Operator](#Installing-NVIDIA-Network-Operator)
+- [Installing the GPU Operator](#Installing-the-GPU-Operator)
+- [Validating the Network Operator with GPUDirect RDMA](#Validating-the-Network-Operator-with-GPUDirect-RDMA)
+- [Validating the GPU Operator](#Validating-the-GPU-Operator)
+- [Validate NVIDIA Cloud Native Stack with an Application from NGC](#Validate-NVIDIA-Cloud-Native-Stack-with-an-application-from-NGC)
+- [Uninstalling the GPU Operator](#Uninstalling-the-GPU-Operator)
+- [Uninstalling the Network Operator](#Uninstalling-the-Network-Operator)
+
+### Prerequisites
+ 
+The following instructions assume the following:
+
+- You have [NVIDIA-Certified Systems](https://docs.nvidia.com/ngc/ngc-deploy-on-premises/nvidia-certified-systems/index.html) with Mellanox CX NICs for x86-64 servers 
+- You have [NVIDIA Qualified Systems](https://www.nvidia.com/en-us/data-center/data-center-gpus/qualified-system-catalog/?start=0&count=50&pageNumber=1&filters=eyJmaWx0ZXJzIjpbXSwic3ViRmlsdGVycyI6eyJwcm9jZXNzb3JUeXBlIjpbIkFSTS1UaHVuZGVyWDIiLCJBUk0tQWx0cmEiXX0sImNlcnRpZmllZEZpbHRlcnMiOnt9LCJwYXlsb2FkIjpbXX0=) for ARM servers 
+  `NOTE:` For ARM systems, NVIDIA Network Operator is not supported yet.
+- You will perform a clean install.
+
+To determine if your system qualifies as an NVIDIA Certified System, review the list of NVIDIA Certified Systems [here](https://docs.nvidia.com/ngc/ngc-deploy-on-premises/nvidia-certified-systems/index.html). 
+
+Please note that NVIDIA Cloud Native Stack is validated only on systems with the default kernel (not HWE).
+
+
+### Installing the Ubuntu Operating System
+These instructions require installing Ubuntu Server LTS 24.04 Ubuntu Server can be downloaded [here](http://cdimage.ubuntu.com/releases/24.04/release/).
+
+Please reference the [Ubuntu Server Installation Guide](https://ubuntu.com/tutorials/tutorial-install-ubuntu-server#1-overview).
+
+## Installing Container Runtime
+
+You need to install a container runtime into each node in the cluster so that Pods can run there. Currently Cloud Native Stack provides below container runtimes:
+
+- [Installing Containerd](#Installing-Containerd)
+- [Installing CRI-O](#Installing-CRI-O)
+
+`NOTE:` Only install one of either `Containerd` or `CRI-O`, not both!
+
+These steps apply to both runtimes.
+
+Set up the repository and update the apt package index:
+
+```
+sudo apt update
+```
+
+Install packages to allow apt to use a repository over HTTPS:
+
+```
+sudo apt install -y apt-transport-https ca-certificates gnupg-agent libseccomp2 autotools-dev debhelper software-properties-common
+```
+
+Configure the `overlay` and `br_netfilter` kernel modules required by Kubernetes:
+
+```
+cat <<EOF | sudo tee /etc/modules-load.d/kubernetes.conf
+overlay
+br_netfilter
+EOF
+```
+
+```
+sudo modprobe overlay
+```
+```
+sudo modprobe br_netfilter
+```
+
+Setup required sysctl params; these persist across reboots.
+```
+cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
+net.bridge.bridge-nf-call-iptables  = 1
+net.ipv4.ip_forward                 = 1
+net.bridge.bridge-nf-call-ip6tables = 1
+EOF
+```
+
+Apply sysctl params without reboot
+```
+sudo sysctl --system
+```
+### Installing Containerd(Option 1)
+
+Download the Containerd for `x86-64` system:
+
+```
+wget https://github.com/containerd/containerd/releases/download/v2.2.0/containerd-2.2.0-linux-amd64.tar.gz
+```
+
+```
+sudo tar --no-overwrite-dir -C / -xzf containerd-2.2.0-linux-amd64.tar.gz
+```
+
+```
+rm -rf containerd-2.2.0-linux-amd64.tar.gz
+```
+
+
+Download the Containerd for `ARM` system:
+
+```
+wget https://github.com/containerd/containerd/releases/download/v2.2.0/containerd-2.2.0-linux-arm64.tar.gz
+```
+
+```
+sudo tar --no-overwrite-dir -C / -xzf containerd-2.2.0-linux-arm64.tar.gz
+```
+
+```
+rm -rf containerd-2.2.0-linux-arm64.tar.gz
+```
+
+Install the Containerd
+```
+sudo mkdir -p /etc/containerd
+```
+
+```
+containerd config default | sudo tee /etc/containerd/config.toml
+```
+
+```
+sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
+```
+
+```
+sudo systemctl restart containerd
+```
+
+Install Runc
+
+```
+wget https://github.com/opencontainers/runc/releases/download/v1.2.6/runc.amd64
+install -m 755 runc.amd64 /usr/local/sbin/runc
+```
+
+Install CNI Plugins
+
+```
+wget https://github.com/containernetworking/plugins/releases/download/v1.6.2/cni-plugins-linux-amd64-v1.6.2.tgz
+sudo mkdir -p /opt/cni/bin
+sudo tar -C /opt/cni/bin -xzvf cni-plugins-linux-amd64-v1.6.2.tgz
+sudo systemctl restart containerd
+```
+
+For additional information on installing Containerd, please reference [Install Containerd with Release Tarball](https://github.com/containerd/containerd/blob/master/docs/cri/installation.md).
+
+### Installing CRI-O(Option 2)
+
+Setup the Apt repositry for CRI-O
+
+```
+OS=xUbuntu_24.04
+VERSION=1.34
+```
+`NOTE:` VERSION (CRI-O version) is same as kubernetes major version 
+
+```
+echo "deb [signed-by=/usr/share/keyrings/libcontainers-archive-keyring.gpg] https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
+```
+
+```
+sudo mkdir -p /usr/share/keyrings
+```
+
+```
+curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo gpg --dearmor -o /usr/share/keyrings/libcontainers-archive-keyring.gpg
+```
+
+```
+echo "deb [signed-by=/usr/share/keyrings/libcontainers-crio-archive-keyring.gpg] http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list
+```
+
+```
+curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/Release.key | sudo gpg --dearmor -o /usr/share/keyrings/libcontainers-crio-archive-keyring.gpg
+```
+
+Install the CRI-O and dependencies 
+
+```
+sudo apt update && sudo apt install cri-o cri-o-runc cri-tools -y
+```
+
+Enable and Start the CRI-O service 
+
+```
+sudo systemctl enable crio.service && sudo systemctl start crio.service
+```
+
+### Installing Kubernetes 
+
+Make sure your container runtime has been started and enabled before beginning installation:
+
+```
+ sudo systemctl start containerd && sudo systemctl enable containerd
+```
+
+Execute the following to add apt keys:
+
+```
+ sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl gpg
+```
+
+```
+curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.34/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
+sudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg
+```
+
+```
+ sudo mkdir -p  /etc/apt/sources.list.d/
+```
+
+Create kubernetes.list:
+
+```
+echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.34/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
+sudo chmod 644 /etc/apt/sources.list.d/kubernetes.list 
+```
+
+
+Now execute the below to install kubelet, kubeadm, and kubectl:
+
+```
+ sudo apt update
+```
+
+```
+ sudo apt install -y -q kubelet=1.34.2-1.1  kubectl=1.34.2-1.1  kubeadm=1.34.2-1.1 
+```
+
+```
+ sudo apt-mark hold kubelet kubeadm kubectl
+```
+
+Create a kubelet default with your container runtime:
+
+`NOTE:`  The container runtime endpoint will be `unix:/run/containerd/containerd.sock` or `unix:/run/crio/crio.sock` depending on which container runtime you chose in the previous steps.
+
+For `Containerd` system:
+
+```
+ cat <<EOF | sudo tee /etc/default/kubelet
+KUBELET_EXTRA_ARGS=--cgroup-driver=systemd --runtime-request-timeout=15m --container-runtime-endpoint="unix:/run/containerd/containerd.sock"
+EOF
+```
+
+For `CRI-O` system:
+
+```
+cat <<EOF | sudo tee /etc/default/kubelet
+KUBELET_EXTRA_ARGS=--cgroup-driver=systemd --runtime-request-timeout=15m --container-runtime-endpoint="unix:/run/crio/crio.sock"
+EOF
+```
+
+Reload the system daemon:
+```
+sudo systemctl daemon-reload
+```
+
+Disable swap:
+```
+sudo swapoff -a
+```
+
+```
+sudo nano /etc/fstab
+```
+
+`NOTE:` Add a # before all the lines that start with /swap. # is a comment, and the result should look something like this:
+
+```
+UUID=e879fda9-4306-4b5b-8512-bba726093f1d / ext4 defaults 0 0
+UUID=DCD4-535C /boot/efi vfat defaults 0 0
+#/swap.img       none    swap    sw      0       0
+```
+
+#### Initializing the Kubernetes cluster to run as a control-plane node
+
+Execute the following command for `Containerd` systems:
+
+```
+sudo kubeadm init --pod-network-cidr=192.168.32.0/22 --cri-socket=/run/containerd/containerd.sock --kubernetes-version="v1.34.2"
+```
+
+Eecute the following command for `CRI-O` systems:
+
+```
+sudo kubeadm init --pod-network-cidr=192.168.32.0/22 --cri-socket=unix:/run/crio/crio.sock --kubernetes-version="v1.34.2"
+```
+
+Output:
+```
+Your Kubernetes control-plane has initialized successfully!
+ 
+To start using your cluster, you need to run the following as a regular user:
+ 
+  mkdir -p $HOME/.kube
+  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
+  sudo chown $(id -u):$(id -g) $HOME/.kube/config
+ 
+Alternatively, if you are the root user, you can run:
+ 
+  export KUBECONFIG=/etc/kubernetes/admin.conf
+ 
+You should now deploy a pod network to the cluster.
+Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
+  https://kubernetes.io/docs/concepts/cluster-administration/addons/
+ 
+Then you can join any number of worker nodes by running the following on each as root:
+ 
+kubeadm join <your-host-IP>:6443 --token 489oi5.sm34l9uh7dk4z6cm \
+        --discovery-token-ca-cert-hash sha256:17165b6c4a4b95d73a3a2a83749a957a10161ae34d2dfd02cd730597579b4b34
+```
+
+
+Following the instructions in the output, execute the commands as shown below:
+
+```
+mkdir -p $HOME/.kube
+```
+
+```
+sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
+```
+
+```
+sudo chown $(id -u):$(id -g) $HOME/.kube/config
+```
+
+With the following command, you install a pod-network add-on to the control plane node. We are using calico as the pod-network add-on here:
+
+```
+kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.2/manifests/calico.yaml
+```
+
+Update the Calico Daemonset 
+
+```
+kubectl set env daemonset/calico-node -n kube-system IP_AUTODETECTION_METHOD=interface=ens\*,eth\*,enc\*,enp\*
+```
+
+You can execute the below commands to ensure that all pods are up and running:
+
+```
+kubectl get pods --all-namespaces
+```
+
+Output:
+
+```
+NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
+kube-system   calico-kube-controllers-65b8787765-bjc8h   1/1     Running   0          2m8s
+kube-system   calico-node-c2tmk                          1/1     Running   0          2m8s
+kube-system   coredns-5c98db65d4-d4kgh                   1/1     Running   0          9m8s
+kube-system   coredns-5c98db65d4-h6x8m                   1/1     Running   0          9m8s
+kube-system   etcd-#yourhost                             1/1     Running   0          8m25s
+kube-system   kube-apiserver-#yourhost                   1/1     Running   0          8m7s
+kube-system   kube-controller-manager-#yourhost          1/1     Running   0          8m3s
+kube-system   kube-proxy-6sh42                           1/1     Running   0          9m7s
+kube-system   kube-scheduler-#yourhost                   1/1     Running   0          8m26s
+```
+
+The get nodes command shows that the control-plane node is up and ready:
+
+```
+kubectl get nodes
+```
+
+Output:
+
+```
+NAME             STATUS   ROLES                  AGE   VERSION
+#yourhost        Ready    control-plane          10m   v1.34.2
+```
+
+Since we are using a single-node Kubernetes cluster, the cluster will not schedule pods on the control plane node by default. To schedule pods on the control plane node, we have to remove the taint by executing the following command:
+
+```
+kubectl taint nodes --all node-role.kubernetes.io/control-plane-
+```
+
+Refer to [Installing Kubeadm](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/)
+for more information.
+
+### Installing Helm 
+
+Execute the following command to download and install Helm 4.0.0 for `x86-64` system: 
+
+```
+wget https://get.helm.sh/helm-v4.0.0-linux-amd64.tar.gz
+```
+
+```
+tar -zxvf helm-v4.0.0-linux-amd64.tar.gz
+ ```
+ 
+ ```
+sudo mv linux-amd64/helm /usr/local/bin/helm
+ ```
+
+ ```
+rm -rf helm-v4.0.0-linux-amd64.tar.gz linux-amd64/
+```
+
+Download and install Helm 4.0.0 for `ARM` system: 
+
+```
+wget https://get.helm.sh/helm-v4.0.0-linux-arm64.tar.gz
+```
+
+```
+tar -zxvf helm-v4.0.0-linux-arm64.tar.gz
+ ```
+ 
+```
+sudo mv linux-arm64/helm /usr/local/bin/helm
+```
+
+```
+rm -rf helm-v4.0.0-linux-arm64.tar.gz linux-arm64/
+```
+
+Refer to the Helm 4.0.0 [release notes](https://github.com/helm/helm/releases) and the [Installing Helm guide](https://helm.sh/docs/using_helm/#installing-helm) for more information.
+
+
+### Adding an Additional Node to NVIDIA Cloud Native Stack
+
+`NOTE:` If you're not adding additional nodes, please skip this step and proceed to the next step [Installing NVIDIA Network Operator](#Installing-NVIDIA-Network-Operator)
+
+Make sure to install the Containerd and Kubernetes packages on additional nodes.
+
+Prerequisites: 
+- [Installing Containerd](#Installing-Containerd)
+- [Installing Kubernetes](#Installing-Kubernetes)
+- [Disable swap](#Disable-swap)
+
+Once the prerequisites are completed on the additional nodes, execute the below command on the control-plane node and then execute the join command output on an additional node to add the additional node to NVIDIA Cloud Native Stack:
+
+```
+sudo kubeadm token create --print-join-command
+```
+
+Output:
+```
+example: 
+sudo kubeadm join 10.110.0.34:6443 --token kg2h7r.e45g9uyrbm1c0w3k     --discovery-token-ca-cert-hash sha256:77fd6571644373ea69074dd4af7b077bbf5bd15a3ed720daee98f4b04a8f524e
+```
+`NOTE`: control-plane node and worker node should not have the same node name. 
+
+The get nodes command shows that the master and worker nodes are up and ready:
+
+```
+kubectl get nodes
+```
+
+Output:
+
+```
+NAME             STATUS   ROLES                  AGE   VERSION
+#yourhost        Ready    control-plane          10m   v1.34.2
+#yourhost-worker Ready                           10m   v1.34.2
+```
+
+### Installing NVIDIA Network Operator
+
+`NOTE:` If Mellanox NICs are not connected to your nodes, please skip this step and proceed to the next step [Installing GPU Operator](#Installing-GPU-Operator)
+
+The below instructions assume that Mellanox NICs are connected to your machines.
+
+Execute the below command to verify Mellanox NICs are enabled on your machines:
+
+```
+lspci | grep -i "Mellanox"
+```
+
+Output:
+```
+0c:00.0 Ethernet controller: Mellanox Technologies MT2892 Family [ConnectX-6 Dx]
+0c:00.1 Ethernet controller: Mellanox Technologies MT2892 Family [ConnectX-6 Dx]
+```
+Execute the below command to determine which Mellanox device is active:
+
+`NOTE:` Use whicever device shows as `Link Detected: yes` in further steps. The below command works only if you add the NICs before installing the Operating System.
+
+```
+for device in `sudo lshw -class network -short | grep -i ConnectX | awk '{print $2}' | egrep -v 'Device|path' | sed '/^$/d'`;do echo -n $device; sudo ethtool $device | grep -i "Link detected"; done
+```
+Output:
+```
+ens160f0        Link detected: yes
+ens160f1        Link detected: no
+```
+
+Create the custom network operator values.yaml and update the active Mellanox device from the above command:
+```
+nano network-operator-values.yaml
+deployCR: true
+ofedDriver:
+  deploy: true
+rdmaSharedDevicePlugin:
+  deploy: true
+  resources:
+    - name: rdma_shared_device_a
+      vendors: [15b3]
+      devices: [ens160f0]
+```
+
+For more information about custom network operator values.yaml, please refer [Network Operator](https://docs.mellanox.com/display/COKAN10/Network+Operator#NetworkOperator-Example2:RDMADevicePluginConfiguration)
+
+Add the NVIDIA repo:
+```
+helm repo add mellanox https://mellanox.github.io/network-operator
+```
+
+Update the Helm repo:
+```
+ helm repo update
+```
+Install Network Operator:
+```
+kubectl label nodes --all node-role.kubernetes.io/master- --overwrite
+```
+
+```
+helm install -f --version 25.7.0 ./network-operator-values.yaml -n network-operator --create-namespace --wait network-operator mellanox/network-operator
+```
+#### Validating the State of the Network Operator
+
+Please note that the installation of the Network Operator can take a couple of minutes. How long the installation will take depends on your internet speed.
+
+```
+kubectl get pods --all-namespaces | egrep 'network-operator|nvidia-network-operator-resources'
+```
+
+```
+NAMESPACE                           NAME                                                              READY   STATUS      RESTARTS   AGE
+network-operator                    network-operator-547cb8d999-mn2h9                                 1/1     Running            0          17m
+network-operator                    network-operator-node-feature-discovery-master-596fb8b7cb-qrmvv   1/1     Running            0          17m
+network-operator                    network-operator-node-feature-discovery-worker-qt5xt              1/1     Running            0          17m
+nvidia-network-operator-resources   cni-plugins-ds-dl5vl                                              1/1     Running            0          17m
+nvidia-network-operator-resources   kube-multus-ds-w82rv                                              1/1     Running            0          17m
+nvidia-network-operator-resources   mofed-ubuntu20.04-ds-xfpzl                                        1/1     Running            0          17m
+nvidia-network-operator-resources   rdma-shared-dp-ds-2hgb6                                           1/1     Running            0          17m
+nvidia-network-operator-resources   sriov-device-plugin-ch7bz                                         1/1     Running            0          10m
+nvidia-network-operator-resources   whereabouts-56ngr                                                 1/1     Running            0          10m
+```
+
+Please refer to the [Network Operator page](https://docs.mellanox.com/display/COKAN10/Network+Operator) for more information.
+
+### Installing GPU Operator
+
+Add the NVIDIA repo:
+
+```
+helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
+```
+
+Update the Helm repo:
+
+```
+helm repo update
+```
+
+Install GPU Operator:
+
+`NOTE:` If you installed Network Operator, please skip the below command and follow the [GPU Operator with RDMA](#GPU-Operator-with-RDMA)
+
+```
+helm install --version 25.10.1 --create-namespace --namespace nvidia-gpu-operator nvidia/gpu-operator  --set driver.version=580.105.08 --wait --generate-name
+```
+
+#### GPU Operator with RDMA 
+
+- Prerequisites:
+  - Please install the [Network Operator](#Installing NVIDIA Network Operator) to ensure that the MOFED drivers are installed. 
+
+After Network Operator installation is completed, execute the below command to install the GPU Operator to load nv_peer_mem modules:
+
+```
+ helm install --version 25.10.1 --create-namespace --namespace nvidia-gpu-operator nvidia/gpu-operator  --set driver.rdma.enabled=true  --wait --generate-name
+```
+
+#### GPU Operator with Host MOFED Driver and RDMA 
+
+If the host is already installed MOFED driver without network operator, execute the below command to install the GPU Operator to load nv_peer_mem module 
+
+```
+ helm install --version 25.10.1 --create-namespace --namespace nvidia-gpu-operator nvidia/gpu-operator --set driver.rdma.enabled=true,driver.rdma.useHostMofed=true --wait --generate-name 
+
+```
+
+### GPU Operator with GPU Direct Storage(GDS) 
+
+Execute the below command to enable the GPU Direct Storage Driver on GPU Operator 
+
+```
+helm install --version 25.10.1 --create-namespace --namespace nvidia-gpu-operator nvidia/gpu-operator --set gds.enabled=true
+```
+For more information refer, [GPU Direct Storage](https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/gpu-operator-rdma.html)
+
+#### Validating the State of the GPU Operator:
+
+Please note that the installation of the GPU Operator can take a couple of minutes. How long the installation will take depends on your internet speed.
+
+```
+kubectl get pods --all-namespaces | grep -v kube-system
+```
+
+```
+NAMESPACE                NAME                                                              READY   STATUS      RESTARTS   AGE
+default                  gpu-operator-1622656274-node-feature-discovery-master-5cddq96gq   1/1     Running     0          2m39s
+default                  gpu-operator-1622656274-node-feature-discovery-worker-wr88v       1/1     Running     0          2m39s
+default                  gpu-operator-7db468cfdf-mdrdp                                     1/1     Running     0          2m39s
+nvidia-gpu-operator      gpu-feature-discovery-g425f                                       1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-container-toolkit-daemonset-mcmxj                          1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-cuda-validator-s6x2p                                       0/1     Completed   0          48s
+nvidia-gpu-operator      nvidia-dcgm-exporter-wtxnx                                        1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-dcgm-jbz94                                                 1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-device-plugin-daemonset-hzzdt                              1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-device-plugin-validator-9nkxq                              0/1     Completed   0          17s
+nvidia-gpu-operator      nvidia-driver-daemonset-kt8g5                                     1/1     Running     0          2m20s
+nvidia-gpu-operator      nvidia-operator-validator-cw4j5                                   1/1     Running     0          2m20s
+
+```
+
+Please refer to the [GPU Operator page](https://ngc.nvidia.com/catalog/helm-charts/nvidia:gpu-operator) on NGC for more information.
+
+For multiple worker nodes, execute the below command to fix the CoreDNS and Node Feature Discovery. 
+
+```
+kubectl delete pods $(kubectl get pods -n kube-system | grep core | awk '{print $1}') -n kube-system; kubectl delete pod $(kubectl get pods -o wide -n nvidia-gpu-operator | grep node-feature-discovery | grep -v master | awk '{print $1}') -n nvidia-gpu-operator
+```
+
+#### GPU Operator with MIG
+
+`NOTE:` Only A100 and A30 GPUs are supported for GPU Operator with MIG
+
+Multi-Instance GPU (MIG) allows GPUs based on the NVIDIA Ampere architecture (such as NVIDIA A100) to be securely partitioned into separate GPU instances for CUDA applications. For more information about enabling the MIG capability, please refer to [GPU Operator with MIG](https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/gpu-operator-mig.html) 
+
+### Validating the Network Operator with GPUDirect RDMA
+
+Execute the below command to list the Mellanox NIC's with the status:
+```
+kubectl exec -it $(kubectl get pods -n nvidia-network-operator-resources | grep mofed | awk '{print $1}') -n nvidia-network-operator-resources -- ibdev2netdev
+```
+Output:
+```
+mlx5_0 port 1 ==> ens192f0 (Up)
+mlx5_1 port 1 ==> ens192f1 (Down)
+```
+
+Create network definition for IPAM and replace the `ens192f0` with an active Mellanox device for `master`:
+```
+$ nano networkdefinition.yaml 
+apiVersion: k8s.cni.cncf.io/v1
+kind: NetworkAttachmentDefinition
+metadata:
+  annotations:
+    k8s.v1.cni.cncf.io/resourceName: rdma/rdma_shared_device_a
+  name: rdma-net-ipam
+  namespace: default
+spec:
+  config: |-
+    {
+        "cniVersion": "0.3.1",
+        "name": "rdma-net-ipam",
+        "plugins": [
+            {
+                "ipam": {
+                    "datastore": "kubernetes",
+                    "kubernetes": {
+                        "kubeconfig": "/etc/cni/net.d/whereabouts.d/whereabouts.kubeconfig"
+                    },
+                    "log_file": "/tmp/whereabouts.log",
+                    "log_level": "debug",
+                    "range": "192.168.112.0/24",
+                    "type": "whereabouts"
+                },
+                "type": "macvlan",
+                "master": "ens192f0"
+            },
+            {
+                "mtu": 1500,
+                "type": "tuning"
+            }
+        ]
+    }
+EOF
+``` 
+`NOTE:` If you do not have VLAN-based networking on the high-performance side, please set "vlan": 0
+
+ 
+Execute the below command to install network definition on NVIDIA Cloud Native Stack from the control-plane node:
+ 
+ ```
+kubectl apply -f networkdefinition.yaml 
+ ```
+ 
+Now create the pod YAML with the below content:
+
+``` 
+cat <<EOF | tee mellanox-test.yaml
+apiVersion: v1
+kind: Pod
+metadata:
+  name: rdma-test-pod-1
+  annotations:
+    k8s.v1.cni.cncf.io/networks: rdma-net-ipam
+    # If a network with static IPAM is used replace network annotation with the below.
+    #k8s.v1.cni.cncf.io/networks: '[
+    #  { "name": "rmda-net-ipam",
+    #    "ips": ["192.168.111.101/24"],
+    #    "gateway": ["192.168.111.1"]
+    #  }
+    #]'
+spec:
+  restartPolicy: OnFailure
+  containers:
+  - image: mellanox/rping-test
+    name: rdma-test-ctr
+    securityContext:
+      capabilities:
+        add: [ "IPC_LOCK" ]
+    resources:
+      limits:
+        rdma/rdma_shared_device_a: 1
+      requests:
+        rdma/rdma_shared_device_a: 1
+    command:
+    - sh
+    - -c
+    - |
+      ls -l /dev/infiniband /sys/class/net
+      sleep infinity
+---
+apiVersion: v1
+kind: Pod
+metadata:
+  name: rdma-test-pod-2
+  annotations:
+    k8s.v1.cni.cncf.io/networks: rdma-net-ipam
+    # If a network with static IPAM is used replace network annotation with the below.
+    #k8s.v1.cni.cncf.io/networks: '[
+    #  { "name": "rmda-net-ipam",
+    #    "ips": ["192.168.111.101/24"],
+    #    "gateway": ["192.168.111.1"]
+    #  }
+    #]'
+spec:
+  restartPolicy: OnFailure
+  containers:
+  - image: mellanox/rping-test
+    name: rdma-test-ctr
+    securityContext:
+      capabilities:
+        add: [ "IPC_LOCK" ]
+    resources:
+      limits:
+        rdma/rdma_shared_device_a: 1
+      requests:
+        rdma/rdma_shared_device_a: 1
+    command:
+    - sh
+    - -c
+    - |
+      ls -l /dev/infiniband /sys/class/net
+      sleep infinity
+EOF
+ ```
+
+Apply the Mellanox test pod to the NVIDIA Cloud Native Stack  for the validation:
+```
+kubectl apply -f mellanox-test.yaml
+```
+
+Once you apply, verify the `rdma-test-pod-1` pod logs. You should see the expected output as shown below:
+`NOTE:` How long the pods take to run depends on your internet speed.
+
+Expected Output:
+```
+kubectl logs rdma-test-pod-1
+
+/dev/infiniband:
+total 0
+crw------- 1 root root 231,  64 Jun 1 02:26 issm0
+crw-rw-rw- 1 root root  10,  54 Jun 1 02:26 rdma_cm
+crw------- 1 root root 231,   0 Jun 1 02:26 umad0
+crw-rw-rw- 1 root root 231, 192 Jun 1 02:26 uverbs0
+ 
+/sys/class/net:
+total 0
+lrwxrwxrwx 1 root root 0 Jun 1 02:26 eth0 -> ../../devices/virtual/net/eth0
+lrwxrwxrwx 1 root root 0 Jun 1 02:26 lo -> ../../devices/virtual/net/lo
+lrwxrwxrwx 1 root root 0 Jun 1 02:26 net1 -> ../../devices/virtual/net/net1
+lrwxrwxrwx 1 root root 0 Jun 1 02:26 tunl0 -> ../../devices/virtual/net/tunl0
+```
+
+Execute the below command to list the Mellanox NIC's with the status:
+```
+kubectl exec -it $(kubectl get pods -n nvidia-network-operator-resources | grep mofed | awk '{print $1}') -n nvidia-network-operator-resources -- ibdev2netdev
+```
+Output:
+```
+mlx5_0 port 1 ==> ens192f0 (Up)
+mlx5_1 port 1 ==> ens192f1 (Down)
+```
+
+Update the above Mellanox NIC, for which status is `Up` in the below command:
+
+```
+kubectl exec -it rdma-test-pod-1 -- bash
+
+[root@rdma-test-pod-1 /]# ib_write_bw -d mlx5_0 -a -F --report_gbits -q 1
+************************************
+* Waiting for client to connect... *
+************************************
+```
+
+In a separate terminal, print the network address of the secondary interface on the `rdma-test-pod-1` pod:
+
+```
+$ kubectl exec rdma-test-pod-1 -- ip addr show dev net1
+5: net1@if24: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc noqueue state UP group default
+    link/ether 62:51:fb:13:88:ce brd ff:ff:ff:ff:ff:ff link-netnsid 0
+    inet 192.168.111.1/24 brd 192.168.111.255 scope global net1
+       valid_lft forever preferred_lft forever
+```
+
+Execute the below command with the above inet address to verify the nv_peer_memory performance on NVIDIA Cloud Native Stack:
+```
+$ kubectl exec -it rdma-test-pod-2 -- bash
+[root@rdma-test-pod-1 /]# ib_write_bw -d mlx5_0 -a -F --report_gbits -q 1 192.168.111.2
+---------------------------------------------------------------------------------------
+                    RDMA_Write BW Test
+ Dual-port       : OFF		Device         : mlx5_0
+ Number of qps   : 1		Transport type : IB
+ Connection type : RC		Using SRQ      : OFF
+ TX depth        : 128
+ CQ Moderation   : 100
+ Mtu             : 1024[B]
+ Link type       : Ethernet
+ GID index       : 4
+ Max inline data : 0[B]
+ rdma_cm QPs	 : OFF
+ Data ex. method : Ethernet
+---------------------------------------------------------------------------------------
+ local address: LID 0000 QPN 0x0137 PSN 0x3c5d65 RKey 0x00370e VAddr 0x007ff44bf1d000
+ GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:111:01
+ remote address: LID 0000 QPN 0x0136 PSN 0x475031 RKey 0x002c23 VAddr 0x007fd3d83cb000
+ GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:111:02
+---------------------------------------------------------------------------------------
+ #bytes     #iterations    BW peak[Gb/sec]    BW average[Gb/sec]   MsgRate[Mpps]
+ 2          5000           0.080755            0.073090            4.568094
+ 4          5000             0.16               0.15   		   4.588128
+ 8          5000             0.31               0.29   		   4.567442
+ 16         5000             0.66               0.59   		   4.647555
+ 32         5000             1.35               1.22   		   4.776518
+ 64         5000             2.50               2.29   		   4.481806
+ 128        5000             5.34               4.73   		   4.621828
+ 256        5000             10.53              9.11   		   4.448153
+ 512        5000             21.03              17.05  		   4.162100
+ 1024       5000             38.67              34.16  		   4.169397
+ 2048       5000             47.11              43.50  		   2.655219
+ 4096       5000             51.29              51.02  		   1.557094
+ 8192       5000             52.00              51.98  		   0.793178
+ 16384      5000             52.33              52.32  		   0.399164
+ 32768      5000             52.47              52.47  		   0.200143
+ 65536      5000             52.51              52.50  		   0.100143
+ 131072     5000             52.51              52.51  		   0.050078
+ 262144     5000             52.49              52.49  		   0.025029
+ 524288     5000             52.50              52.50  		   0.012517
+ 1048576    5000             52.51              52.51  		   0.006260
+ 2097152    5000             52.51              52.51  		   0.003130
+ 4194304    5000             52.51              52.51  		   0.001565
+ 8388608    5000             52.52              52.52  		   0.000783
+---------------------------------------------------------------------------------------
+```
+
+```
+[root@rdma-test-pod-1 /]# ib_write_bw -d mlx5_0 -a -F --report_gbits -q 1
+
+************************************
+* Waiting for client to connect... *
+************************************
+---------------------------------------------------------------------------------------
+                    RDMA_Write BW Test
+ Dual-port       : OFF		Device         : mlx5_0
+ Number of qps   : 1		Transport type : IB
+ Connection type : RC		Using SRQ      : OFF
+ CQ Moderation   : 100
+ Mtu             : 1024[B]
+ Link type       : Ethernet
+ GID index       : 8
+ Max inline data : 0[B]
+ rdma_cm QPs	 : OFF
+ Data ex. method : Ethernet
+---------------------------------------------------------------------------------------
+ local address: LID 0000 QPN 0x0136 PSN 0x475031 RKey 0x002c23 VAddr 0x007fd3d83cb000
+ GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:111:02
+ remote address: LID 0000 QPN 0x0137 PSN 0x3c5d65 RKey 0x00370e VAddr 0x007ff44bf1d000
+ GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:111:01
+---------------------------------------------------------------------------------------
+ #bytes     #iterations    BW peak[Gb/sec]    BW average[Gb/sec]   MsgRate[Mpps]
+ 8388608    5000             52.52              52.52  		   0.000783
+---------------------------------------------------------------------------------------
+```
+The benchmark achieved approximately 52 Gbps throughput.
+
+Exit from RDMA test pods and then delete the RDMA test pods with the below command:
+
+```
+$ kubectl delete pod rdma-test-pod-1 rdma-test-pod-2
+```
+
+### Validating the GPU Operator
+
+GPU Operator validates the  through the nvidia-device-plugin-validation pod and the nvidia-driver-validation pod. If both are completed successfully (see output from kubectl get pods --all-namespaces | grep -v kube-system), NVIDIA Cloud Native Stack is working as expected. This section provides two examples of validating that the GPU is usable from within a pod to validate the  manually.
+
+#### Example 1: nvidia-smi
+
+Execute the following:
+
+```
+cat <<EOF | tee nvidia-smi.yaml
+apiVersion: v1
+kind: Pod
+metadata:
+  name: nvidia-smi
+spec:
+  restartPolicy: OnFailure
+  containers:
+    - name: nvidia-smi
+      image: "nvidia/cuda:12.8.0-base-ubuntu24.04"
+      args: ["nvidia-smi"]
+EOF
+```
+
+```
+kubectl apply -f nvidia-smi.yaml
+```
+
+```
+kubectl logs nvidia-smi
+```
+
+Output:
+
+``` 
+Mon Nov 24 20:39:28 2025
++-----------------------------------------------------------------------------------------+
+| NVIDIA-SMI 580.105.08             Driver Version: 580.105.08     CUDA Version: 13.0       |
+|-----------------------------------------+------------------------+----------------------+
+| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
+| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
+|                                         |                        |               MIG M. |
+|=========================================+========================+======================|
+|   0  NVIDIA A100-SXM4-80GB          On  |   00000000:03:00.0 Off |                    0 |
+| N/A   29C    P0             50W /  275W |       1MiB /  81920MiB |      0%      Default |
+|                                         |                        |             Disabled |
++-----------------------------------------+------------------------+----------------------+
+
++-----------------------------------------------------------------------------------------+
+| Processes:                                                                              |
+|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
+|        ID   ID                                                               Usage      |
+|=========================================================================================|
+|  No running processes found                                                             |
++-----------------------------------------------------------------------------------------+
+```
+
+#### Example 2: CUDA-Vector-Add
+
+`NOTE:` CUDA Vector Validation is not available for ARM systems yet.
+
+Create a pod YAML file:
+
+```
+cat <<EOF | tee cuda-samples.yaml
+apiVersion: v1
+kind: Pod
+metadata:
+  name: cuda-vector-add
+spec:
+  restartPolicy: OnFailure
+  containers:
+    - name: cuda-vector-add
+      image: "k8s.gcr.io/cuda-vector-add:v0.1"
+EOF
+```
+
+Execute the below command to create a sample GPU pod:
+
+```
+kubectl apply -f cuda-samples.yaml
+```
+
+Confirm the cuda-samples pod was created:
+
+```
+kubectl get pods
+``` 
+
+NVIDIA Cloud Native Stack works as expected if the get pods command shows the pod status as completed.
+
+### Validate NVIDIA Cloud Native Stack with an Application from NGC
+Another option to validate NVIDIA Cloud Native Stack is by running a demo application hosted on NGC.
+
+NGC is NVIDIA's GPU-optimized software hub. NGC provides a curated set of GPU-optimized software for AI, HPC, and visualization. The content provided by NVIDIA and third-party ISVs simplify building, customizing, and integrating GPU-optimized software into workflows, accelerating the time to solutions for users.
+
+Containers, pre-trained models, Helm charts for Kubernetes deployments, and industry-specific AI toolkits with software development kits (SDKs) are hosted on NGC. For more information about how to deploy an application that is hosted on NGC or the NGC Private Registry, please refer to this [NGC Registry Guide](https://github.com/NVIDIA/cloud-native-stack/blob/master/install-guides/NGC_Registry_Guide_v1.0.md). Visit the [public NGC documentation](https://docs.nvidia.com/ngc) for more information.
+
+The steps in this section use the publicly available DeepStream - Intelligent Video Analytics (IVA) demo application Helm Chart. The application can validate the full NVIDIA Cloud Native Stack and test the connectivity of NVIDIA Cloud Native Stack to remote sensors. DeepStream delivers real-time AI-based video and image understanding and multi-sensor processing on GPUs. For more information, please refer to the [Helm Chart](https://ngc.nvidia.com/catalog/helm-charts/nvidia:video-analytics-demo).
+
+There are two ways to configure the DeepStream - Intelligent Video Analytics Demo Application on your NVIDIA Cloud Native Stack
+
+- Using a camera
+- Using the integrated video file (no camera required)
+
+#### Using a camera
+
+##### Prerequisites: 
+- RTSP Camera stream
+
+Go through the below steps to install the demo application:
+```
+1. helm fetch https://helm.ngc.nvidia.com/nvidia/charts/video-analytics-demo-0.1.9.tgz --untar
+
+2. cd into the folder video-analytics-demo and update the file values.yaml
+
+3. Go to the section Cameras in the values.yaml file and add the address of your IP camera. Read the comments section on how it can be added. Single or multiple cameras can be added as shown below
+
+cameras:
+ camera1: rtsp://XXXX
+```
+
+Execute the following command to deploy the demo application:
+```
+helm install video-analytics-demo --name-template iva
+```
+
+Once the Helm chart is deployed, access the application with the VLC player. See the instructions below. 
+
+#### Using the integrated video file (no camera)
+
+If you dont have a camera input, please execute the below commands to use the default video already integrated into the application:
+
+```
+helm fetch https://helm.ngc.nvidia.com/nvidia/charts/video-analytics-demo-0.1.9.tgz
+
+helm install video-analytics-demo-0.1.9.tgz --name-template iva
+```
+
+Once the helm chart is deployed, access the application with the VLC player as per the below instructions. 
+For more information about the demo application, please refer to the [application NGC page](https://ngc.nvidia.com/catalog/helm-charts/nvidia:video-analytics-demo)
+
+#### Access from WebUI
+
+Use the below WebUI URL to access the video analytic demo application from the browser:
+```
+http://IPAddress of Node:31115/
+```
+
+#### Access from VLC
+
+Download VLC Player from https://www.videolan.org/vlc/ on the machine where you intend to view the video stream.
+
+View the video stream in VLC by navigating to Media > Open Network Stream > Entering the following URL:
+
+```
+rtsp://IPAddress of Node:31113/ds-test
+```
+
+You should see the video output like below with the AI model detecting objects.
+
+![Deepstream_Video](screenshots/Deepstream.png)
+
+`NOTE:` Video stream in VLC will change if you provide an input RTSP camera.
+
+
+### Uninstalling the GPU Operator 
+
+Execute the below commands to uninstall the GPU Operator:
+
+```
+$ helm ls
+NAME                    NAMESPACE                      REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
+gpu-operator-1606173805 nvidia-gpu-operator            1               2025-11-24 20:23:28.063421701 +0000 UTC deployed        gpu-operator-25.10.1      25.10.1 
+
+$ helm del gpu-operator-1606173805 -n nvidia-gpu-operator
+
+```
+
+### Uninstalling the Network Operator
+
+Execute the below commands to uninstall the Network Operator:
+
+```
+$ helm ls -n network-operator
+NAME            	NAMESPACE       	REVISION	UPDATED                                	STATUS  	CHART                 	APP VERSION
+network-operator	network-operator	1       	2025-11-24 17:09:04.665593336 +0000 UTC	deployed	network-operator-25.7.0	v25.7.0
+
+$ helm del network-operator -n network-operator
+```
diff --git a/install-guides/readme.md b/install-guides/readme.md
index bb01d059..28d21095 100755
--- a/install-guides/readme.md
+++ b/install-guides/readme.md
@@ -2,23 +2,22 @@
 
 The following NVIDIA Cloud Native Stack Install Guides are available.
 ### Ubuntu Systems
-- [Ubuntu 22.04 Server x86 & arm64 v14.0](https://github.com/NVIDIA/cloud-native-stack/blob/master/install-guides/Ubuntu-22-04_Server_x86-arm64_v14.0.md)
-- [Ubuntu 22.04 Server x86 & arm64 v14.1](https://github.com/NVIDIA/cloud-native-stack/blob/master/install-guides/Ubuntu-22-04_Server_x86-arm64_v14.1.md)
-- [Ubuntu 22.04 Server x86 & arm64 v14.2](https://github.com/NVIDIA/cloud-native-stack/blob/master/install-guides/Ubuntu-22-04_Server_x86-arm64_v14.2.md)
 - [Ubuntu 24.04 Server x86 & arm64 v15.0](https://github.com/NVIDIA/cloud-native-stack/blob/master/install-guides/Ubuntu-24-04_Server_x86-arm64_v15.0.md)
 - [Ubuntu 24.04 Server x86 & arm64 v15.1](https://github.com/NVIDIA/cloud-native-stack/blob/master/install-guides/Ubuntu-24-04_Server_x86-arm64_v15.1.md)
+- [Ubuntu 24.04 Server x86 & arm64 v15.2](https://github.com/NVIDIA/cloud-native-stack/blob/master/install-guides/Ubuntu-24-04_Server_x86-arm64_v15.2.md)
 - [Ubuntu 24.04 Server x86 & arm64 v16.0](https://github.com/NVIDIA/cloud-native-stack/blob/master/install-guides/Ubuntu-24-04_Server_x86-arm64_v16.0.md)
+- [Ubuntu 24.04 Server x86 & arm64 v16.1](https://github.com/NVIDIA/cloud-native-stack/blob/master/install-guides/Ubuntu-24-04_Server_x86-arm64_v16.1.md)
+- [Ubuntu 24.04 Server x86 & arm64 v17.0](https://github.com/NVIDIA/cloud-native-stack/blob/master/install-guides/Ubuntu-24-04_Server_x86-arm64_v17.0.md)
 
 ### RedHat Enterprise Linux(RHEL) Systems
 -  [RHEL 8.10 Server x86 & arm64](https://github.com/NVIDIA/cloud-native-stack/blob/master/install-guides/RHEL-8-10_Server_x86-arm64.md)
 
 ### Ubuntu Server for Developers
-- [Ubuntu 22.04 Server Developer x86 & arm64 v14.0](https://github.com/NVIDIA/cloud-native-stack/blob/master/install-guides/Ubuntu-22-04_Server_Developer_x86-arm64_v14.0.md)
-- [Ubuntu 22.04 Server Developer x86 & arm64 v14.1](https://github.com/NVIDIA/cloud-native-stack/blob/master/install-guides/Ubuntu-22-04_Server_Developer_x86-arm64_v14.1.md)
-- [Ubuntu 22.04 Server Developer x86 & arm64 v14.2](https://github.com/NVIDIA/cloud-native-stack/blob/master/install-guides/Ubuntu-22-04_Server_Developer_x86-arm64_v14.2.md)
 - [Ubuntu 24.04 Server Developer x86 & arm64 v15.0](https://github.com/NVIDIA/cloud-native-stack/blob/master/install-guides/Ubuntu-24-04_Server_Developer_x86-arm64_v15.0.md)
 - [Ubuntu 24.04 Server Developer x86 & arm64 v15.1](https://github.com/NVIDIA/cloud-native-stack/blob/master/install-guides/Ubuntu-24-04_Server_Developer_x86-arm64_v15.1.md)
+- [Ubuntu 24.04 Server Developer x86 & arm64 v15.2](https://github.com/NVIDIA/cloud-native-stack/blob/master/install-guides/Ubuntu-24-04_Server_Developer_x86-arm64_v15.2.md)
 - [Ubuntu 24.04 Server Developer x86 & arm64 v16.0](https://github.com/NVIDIA/cloud-native-stack/blob/master/install-guides/Ubuntu-24-04_Server_Developer_x86-arm64_v16.0.md)
-
+- [Ubuntu 24.04 Server Developer x86 & arm64 v16.1](https://github.com/NVIDIA/cloud-native-stack/blob/master/install-guides/Ubuntu-24-04_Server_Developer_x86-arm64_v16.1.md)
+- [Ubuntu 24.04 Server Developer x86 & arm64 v17.0](https://github.com/NVIDIA/cloud-native-stack/blob/master/install-guides/Ubuntu-24-04_Server_Developer_x86-arm64_v17.0.md)
 `NOTE`
 A list of older NVIDIA Cloud Native Stack versions (formerly known as Cloud Native Core) can be found [here](https://github.com/NVIDIA/cloud-native-stack/blob/master/install-guides/older_versions/readme.md)
diff --git a/playbooks/add-ons.yaml b/playbooks/add-ons.yaml
index a06ced23..f2aa318e 100644
--- a/playbooks/add-ons.yaml
+++ b/playbooks/add-ons.yaml
@@ -18,17 +18,29 @@
   vars_files:
     - cns_values.yaml
   tasks:
+   - name: check Local Path Storage installed
+     shell: kubectl get sc | awk '{print $1}' | grep local-path
+     failed_when: false
+     ignore_errors: true
+     register: local_path
+
    - name: Install Local Path Provisoner on NVIDIA Cloud Native Stack
-     shell: kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v{{ local_path_provisioner }}/deploy/local-path-storage.yaml
-     when: storage == true
+     shell: helm repo add containeroo https://charts.containeroo.ch; helm install local-path-provisioner containeroo/local-path-provisioner --version {{ local_path_provisioner }} --create-namespace --namespace local-path-storage --force
+     when: storage == true and local_path.stdout == ''
      retries: 5
      delay: 5
      register: install_local_path_provisioner
      until: install_local_path_provisioner is succeeded
 
+   - name: check NFS Storage installed
+     shell: kubectl get sc | awk '{print $1}' | grep nfs
+     failed_when: false
+     ignore_errors: true
+     register: nfs_storage
+
    - name: Install NFS Packages on RHEL
      become: true
-     when: storage == true and ansible_distribution == 'RedHat'
+     when: storage == true and ansible_distribution == 'RedHat' and nfs_storage.stdout == ''
      yum:
       name: ['nfs-utils']
       state: present
@@ -39,7 +51,7 @@
 
    - name: Install NFS Packages on Ubuntu
      become: true
-     when: storage == true and ansible_distribution == 'Ubuntu'
+     when: storage == true and ansible_distribution == 'Ubuntu' and nfs_storage.stdout == ''
      apt:
       name: ['nfs-kernel-server', 'nfs-common']
       state: present
@@ -51,7 +63,7 @@
 
    - name: Setup NFS provisioner
      become: true
-     when: storage == true
+     when: storage == true and nfs_storage.stdout == ''
      block:
        - name: Setup Mounts for NFS
          shell: |
@@ -82,7 +94,7 @@
 
    - name: NFS service restart service on Ubuntu
      become: true
-     when: storage == true and ansible_distribution == 'Ubuntu'
+     when: storage == true and ansible_distribution == 'Ubuntu' and nfs_storage.stdout == ''
      systemd_service:
        name: nfs-kernel-server
        state: restarted
@@ -94,7 +106,7 @@
 
    - name: NFS Service restart service on RHEL
      become: true
-     when: storage == true and ansible_distribution == 'RedHat'
+     when: storage == true and ansible_distribution == 'RedHat' and nfs_storage.stdout == ''
      systemd_service:
        name: nfs-server
        state: restarted
@@ -105,11 +117,11 @@
      until: restart_nfs_rhel is succeeded
 
    - name: Install NFS External Provisioner
-     when: storage == true
+     when: storage == true and nfs_storage.stdout == ''
      shell: |
        helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner --force-update
        helm repo update
-       helm install --version {{ nfs_provisioner }} nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --set nfs.server={{ ansible_default_ipv4.address }} --set nfs.path=/data/nfs --set storageClass.archiveOnDelete=false --create-namespace --namespace nfs-client
+       helm install --version {{ nfs_provisioner }} nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --set nfs.server={{ ansible_default_ipv4.address }} --set nfs.path=/data/nfs --set storageClass.archiveOnDelete=false --create-namespace --namespace nfs-client --force
        sleep 10
        kubectl patch storageclass nfs-client -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
      retries: 5
@@ -117,6 +129,12 @@
      register: install_nfs_provisioner
      until: install_nfs_provisioner is succeeded
 
+   - name: check StorageClass is installed
+     shell: kubectl get sc | tr -d '\n'
+     failed_when: false
+     ignore_errors: true
+     register: storageclass
+
    - name: Copy files
      when: monitoring == true
      copy:
@@ -131,35 +149,15 @@
      register: copy_monitoring_files
      until: copy_monitoring_files is succeeded
 
-   - name: Install Kserve on Kubernetes
-     when: kserve == true
-     retries: 5
-     delay: 5
-     until: kserve_check.stdout == 'Successfully installed KServe'
-     shell: curl -s "https://raw.githubusercontent.com/kserve/kserve/release-{{ kserve_version }}/hack/quick_install.sh" | bash > /tmp/kserve-install.log; cat /tmp/kserve-install.log | tail -1f | cut -d " " -f2-
-     register: kserve_check
+   - name: check Metal LB installed
+     shell: kubectl get pods -A | grep metallb | awk '{print $2}' | head -n 1 | wc -l | tr -d '\n'
      failed_when: false
      ignore_errors: true
-
-   - name: Apply Nginx IngressClass Name for Kserve
-     when: kserve == true
-     shell: |
-       kubectl apply -f - <<EOF
-       apiVersion: networking.k8s.io/v1
-       kind: IngressClass
-       metadata:
-         name: nginx
-       spec:
-         controller: istio.io/ingress-controller
-       EOF
-     retries: 5
-     delay: 5
-     register: apply_ingress_config
-     until: apply_ingress_config is succeeded
+     register: metallb
 
    - name: Install MetalLB
-     shell: "kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v{{ metallb_version }}/config/manifests/metallb-native.yaml; sleep 45"
-     when: loadbalancer == true
+     shell: "helm repo add metallb https://metallb.github.io/metallb; helm install my-metallb metallb/metallb --version {{ metallb_version }} --create-namespace --namespace metallb-system --force; sleep 180"
+     when: loadbalancer == true and metallb.stdout != '1'
      retries: 5
      delay: 5
      register: install_metallb
@@ -173,11 +171,12 @@
      until: network is succeeded
 
    - name: Local IP
+     when: loadbalancer == true and metallb.stdout != '1'
      set_fact:
        load_balancer_ip: "{% if loadbalancer_ip == '' %}{{ network.stdout_lines[0] }}/32{%elif loadbalancer_ip != '' %}{{ loadbalancer_ip }}{% endif %}"
 
    - name: Apply Layer2 Config for MetalLB
-     when: loadbalancer == true
+     when: loadbalancer == true and metallb.stdout != '1'
      shell: |
        kubectl apply -f - <<EOF
        apiVersion: metallb.io/v1beta1
@@ -203,16 +202,22 @@
      register: apply_metallb_config
      until: apply_metallb_config is succeeded
 
+   - name: check Elastic Stack Installed
+     shell: kubectl get pods -A | grep elastic | awk '{print $2}' | head -n 1 | wc -l | tr -d '\n'
+     failed_when: false
+     ignore_errors: true
+     register: elastic
+
    - name: Install Elastic Stack
      ignore_errors: true
      failed_when: false
      shell: "{{ item }}"
-     when: monitoring == true
+     when: monitoring == true and elastic.stdout != '1'
      with_items:
        - helm repo add elastic https://helm.elastic.co
        - helm repo add fluent https://fluent.github.io/helm-charts/
        - helm repo update
-       - helm install elastic-operator elastic/eck-operator -n elastic-system --create-namespace
+       - helm install elastic-operator elastic/eck-operator -n elastic-system --create-namespace --force
        - sleep 5
        - kubectl create ns monitoring
      retries: 5
@@ -222,7 +227,7 @@
 
    - name: Apply Elastic Config
      ignore_errors: true
-     when:  monitoring == true
+     when:  monitoring == true and elastic.stdout != '1'
      shell: |
        kubectl apply -f - <<EOF
        apiVersion: elasticsearch.k8s.elastic.co/v1
@@ -244,7 +249,7 @@
                resources:
                  requests:
                    storage: 5Gi
-               storageClassName: local-path
+               storageClassName: nfs-client
            config:
             node.store.allow_mmap: false
        ---
@@ -270,7 +275,7 @@
 
    - name: Install Fluent Bit
      shell: "{{ item }}"
-     when: monitoring == true
+     when: monitoring == true and elastic.stdout != '1'
      ignore_errors: true
      failed_when: false
      with_items:
@@ -285,9 +290,15 @@
      register: install_fluent_bit
      until: install_fluent_bit is succeeded
 
+   - name: Check Prometheus is installed
+     shell: kubectl get pods -A | grep prometheus | awk '{print $2}' | head -n 1 | wc -l | tr -d '\n'
+     failed_when: false
+     ignore_errors: true
+     register: prometheus
+
    - name: Install Prometheus Stack on NVIDIA Cloud Native Stack
      ignore_errors: true
-     when: monitoring == true
+     when: monitoring == true and prometheus.stdout != '1'
      block:
        - name: Add Prometheus Helm repository
          shell: helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
@@ -313,7 +324,7 @@
          until: install_prometheus is succeeded
 
        - name: Install Grafana Operator
-         shell: "helm upgrade -i grafana-operator oci://ghcr.io/grafana/helm-charts/grafana-operator --version {{ grafana_operator }} -n monitoring"
+         shell: "helm upgrade -i grafana-operator oci://ghcr.io/grafana/helm-charts/grafana-operator --version v{{ grafana_operator }} -n monitoring"
          retries: 5
          delay: 5
          register: install_grafana_operator
@@ -362,12 +373,110 @@
          register: delete_dcgm_pod
          until: delete_dcgm_pod is succeeded
 
+   - name: check LeaderWorkerSet is installed
+     shell: kubectl get pods -A | grep lws | awk '{print $2}' | head -n 1 | wc -l | tr -d '\n'
+     failed_when: false
+     ignore_errors: true
+     register: lw_set
+
    - name: Install LeaderWorkerSet on NVIDIA Cloud Native Stack
      ignore_errors: true
      failed_when: false
-     shell: "kubectl apply --server-side -f https://github.com/kubernetes-sigs/lws/releases/download/v{{ lws_version }}/manifests.yaml"
-     when: lws == true
+     shell: helm install lws https://github.com/kubernetes-sigs/lws/releases/download/v{{ lws_version }}/lws-chart-{{ lws_version }}.tgz --namespace lws-system  --create-namespace  --wait --timeout 300s
+     when: lws == true and lw_set.stdout != '1'
      retries: 5
      delay: 5
      register: install_lws
-     until: install_lws is succeeded
\ No newline at end of file
+     until: install_lws is succeeded
+
+   - name: check Volcano Scheduler is installed
+     shell: kubectl get pods -A | grep volcano | awk '{print $2}' | head -n 1 | wc -l | tr -d '\n'
+     failed_when: false
+     ignore_errors: true
+     register: volcano_scheduler
+
+   - name: Install Volcano Scheduler
+     when: volcano == true and volcano_scheduler.stdout != '1'
+     shell: |
+       helm repo add volcano-sh https://volcano-sh.github.io/helm-charts
+       helm repo update
+       helm install volcano volcano-sh/volcano --version {{ volcano_version }} --namespace volcano-system --create-namespace --force
+     retries: 5
+     delay: 5
+     register: install_volcano_scheduler
+     until: install_volcano_scheduler is succeeded
+
+   - name: check Kserve is Installed
+     shell: kubectl get pods -A | grep kserve | awk '{print $2}' | head -n 1 | wc -l | tr -d '\n'
+     failed_when: false
+     ignore_errors: true
+     register: kserve_install  
+
+   - name: Install Kserve on Kubernetes
+     when: kserve == true and kserve_install.stdout != '1'
+     retries: 5
+     delay: 30
+     until: install_kserve is succeeded
+     shell: |
+       kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/${GATEWAY_API_VERSION}/standard-install.yaml
+       helm repo add istio https://istio-release.storage.googleapis.com/charts --force-update
+       helm install istio-base istio/base -n istio-system --wait --set defaultRevision=default --create-namespace --version ${ISTIO_VERSION}
+       helm install istiod istio/istiod -n istio-system --wait --version ${ISTIO_VERSION} --set proxy.autoInject=disabled --set-string pilot.podAnnotations."cluster-autoscaler\.kubernetes\.io/safe-to-evict"=true
+       helm install istio-ingressgateway istio/gateway -n istio-system --version ${ISTIO_VERSION} --set-string podAnnotations."cluster-autoscaler\.kubernetes\.io/safe-to-evict"=true
+       sleep 20
+       helm repo add jetstack https://charts.jetstack.io --force-update
+       helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace  --version ${CERT_MANAGER_VERSION}  --set crds.enabled=true
+       helm install knative-operator --namespace knative-serving --create-namespace --wait https://github.com/knative/operator/releases/download/knative-${KNATIVE_OPERATOR_VERSION}/knative-operator-${KNATIVE_OPERATOR_VERSION}.tgz
+       kubectl apply -f - <<EOF
+       apiVersion: operator.knative.dev/v1beta1
+       kind: KnativeServing
+       metadata:
+         name: knative-serving
+         namespace: knative-serving
+       spec:
+         version: "${KNATIVE_SERVING_VERSION}"
+         config:
+           domain:
+         # Patch the external domain as the default domain svc.cluster.local is not exposed on ingress (from knative 1.8)
+             example.com: ""
+       EOF
+       helm install kserve-crd oci://ghcr.io/kserve/charts/kserve-crd --version ${KSERVE_VERSION} --namespace kserve --create-namespace --wait
+       helm install kserve oci://ghcr.io/kserve/charts/kserve --version ${KSERVE_VERSION} --namespace kserve --create-namespace --wait --set-string kserve.controller.deploymentMode="Serverless"
+     register: install_kserve
+     failed_when: false
+     ignore_errors: true
+     environment:
+       ISTIO_VERSION: "1.28.0"
+       KNATIVE_OPERATOR_VERSION: "v1.20.0"
+       KNATIVE_SERVING_VERSION: "1.20.0"
+       KSERVE_VERSION: "v0.16.0"
+       CERT_MANAGER_VERSION: "v1.19.1"
+       GATEWAY_API_VERSION: "v1.4.0"
+
+   - name: Patch Knative Serving CRD
+     when: kserve == true
+     shell: |
+       sleep 15; kubectl patch configmap config-features -n knative-serving --type merge -p '{"data":{"kubernetes.podspec-nodeselector":"enabled"}}'
+       kubectl patch configmap config-features -n knative-serving --type merge -p '{"data":{"kubernetes.podspec-persistent-volume-claim":"enabled","kubernetes.podspec-persistent-volume-write":"enabled"}}'
+     retries: 5
+     delay: 5
+     ignore_errors: true
+     failed_when: false
+     register: patch_knative_serving_crd
+     until: patch_knative_serving_crd is succeeded
+
+   - name: Apply Nginx IngressClass Name for Kserve
+     when: kserve == true and kserve_install.stdout != '1'
+     shell: |
+       kubectl apply -f - <<EOF
+       apiVersion: networking.k8s.io/v1
+       kind: IngressClass
+       metadata:
+         name: nginx
+       spec:
+         controller: istio.io/ingress-controller
+       EOF
+     retries: 5
+     delay: 5
+     register: apply_ingress_config
+     until: apply_ingress_config is succeeded
\ No newline at end of file
diff --git a/playbooks/cns-installation.yaml b/playbooks/cns-installation.yaml
index 3e45f5ea..42d0cca4 100755
--- a/playbooks/cns-installation.yaml
+++ b/playbooks/cns-installation.yaml
@@ -102,10 +102,10 @@
       failed_when: false
       ignore_errors: true
 
-    - name: Verify NVIDIA device has GB200
+    - name: Verify NVIDIA device has GB200/GB300
       fail:
-        msg: "GB200 device id not found in {{ nvidia_id.stdout }}"
-      when: nvidia_id.stdout != '2941'
+        msg: "GB200 or GB300 device id not found in {{ nvidia_id.stdout }}"
+      when: nvidia_id.stdout != '2941' or nvidia_id.stdout != '31c2'
       ignore_errors: true
       failed_when: false
 
@@ -140,7 +140,7 @@
         nvidia_kernel: "{{ nvidia_kernel.stdout }}"
 
     - name: Ensure iommu_passthrough option
-      when: nvidia_kernel == 'nvidia' and nvidia_id.stdout == '2941' and iommu_passthrough_check.rc != 0
+      when: nvidia_kernel == 'nvidia' and nvidia_id.stdout == '2941' and iommu_passthrough_check.rc != 0 or nvidia_kernel == 'nvidia' and nvidia_id.stdout == '31c2' and iommu_passthrough_check.rc != 0
       become: true
       ansible.builtin.lineinfile:
         path: /etc/default/grub.d/iommu_passthrough.cfg
@@ -149,7 +149,7 @@
         mode: '0644'
 
     - name: Ensure init_on_alloc option
-      when: nvidia_kernel == 'nvidia' and nvidia_id.stdout == '2941' and init_on_alloc_check.rc != 0
+      when: nvidia_kernel == 'nvidia' and nvidia_id.stdout == '2941' and init_on_alloc_check.rc != 0 or nvidia_kernel == 'nvidia' and nvidia_id.stdout == '31c2' and init_on_alloc_check.rc != 0
       become: true
       ansible.builtin.lineinfile:
         path: /etc/default/grub.d/disable-init-on-alloc.cfg
@@ -158,7 +158,7 @@
         mode: '0644'
 
     - name: Ensure disable-numa-balancing option
-      when: nvidia_kernel == 'nvidia' and nvidia_id.stdout == '2941' and numa_balancing_check.rc != 0
+      when: nvidia_kernel == 'nvidia' and nvidia_id.stdout == '2941' and numa_balancing_check.rc != 0 or nvidia_kernel == 'nvidia' and nvidia_id.stdout == '31c2' and numa_balancing_check.rc != 0
       become: true
       ansible.builtin.lineinfile:
         path: /etc/default/grub.d/disable-numa-balancing.cfg
@@ -166,8 +166,23 @@
         create: yes
         mode: '0644'
 
+    - name: Disable HMM on NVIDIA UVM for RTX Pro 6000
+      become: true
+      when: nvidia_id.stdout == '2bb5'
+      ansible.builtin.lineinfile:
+        path: /etc/modprobe.d/nvidia-uvm.conf
+        line: 'options nvidia-uvm uvm_disable_hmm=1'
+        create: yes
+        mode: '0644'
+
+    - name: check nvidia-uvm.conf exists
+      shell: ls -l /etc/modprobe.d/nvidia-uvm.conf
+      register: nvidia_uvm_conf
+      ignore_errors: true
+      failed_when: false
+
     - name: Update grub configuration
-      when: nvidia_kernel == 'nvidia' and nvidia_id.stdout == '2941'
+      when: nvidia_kernel == 'nvidia' and nvidia_id.stdout == '2941' or nvidia_kernel == 'nvidia' and nvidia_id.stdout == '31c2' or nvidia_uvm_conf.rc != 0 and nvidia_id.stdout == '2bb5'
       command: update-grub
       become: true
 
@@ -187,6 +202,14 @@
           (nvidia_kernel == 'nvidia' and nvidia_id.stdout == '2941' and init_on_alloc_check.rc != 0)
           or
           (nvidia_kernel == 'nvidia' and nvidia_id.stdout == '2941' and numa_balancing_check.rc != 0)
+          or
+          (nvidia_kernel == 'nvidia' and nvidia_id.stdout == '31c2' and iommu_passthrough_check.rc != 0)
+          or
+          (nvidia_kernel == 'nvidia' and nvidia_id.stdout == '31c2' and init_on_alloc_check.rc != 0)
+          or
+          (nvidia_kernel == 'nvidia' and nvidia_id.stdout == '31c2' and numa_balancing_check.rc != 0)
+          or
+          (nvidia_uvm_conf.rc != 0 and nvidia_id.stdout == '2bb5')
         )
       become: true
       reboot:
@@ -377,7 +400,7 @@
 - when: "microk8s == true"
   import_playbook: microk8s.yaml
 
-- when: "storage == true and install_k8s == true or monitoring == true and install_k8s == true or kserve == true and install_k8s == true or loadbalancer == true and install_k8s == true or lws == true and install_k8s == true"
+- when: "storage == true and install_k8s == true or monitoring == true and install_k8s == true or kserve == true and install_k8s == true or loadbalancer == true and install_k8s == true or lws == true and install_k8s == true or enable_kai_scheduler == true and install_k8s == true or volcano == true and install_k8s == true"
   import_playbook: add-ons.yaml
   
 - hosts: all
diff --git a/playbooks/cns-uninstall.yaml b/playbooks/cns-uninstall.yaml
index 1967927b..9d11ab60 100755
--- a/playbooks/cns-uninstall.yaml
+++ b/playbooks/cns-uninstall.yaml
@@ -65,8 +65,15 @@
      become: false
      lineinfile:
        path: '{{ ansible_user_dir }}/.bashrc'
-       insertafter: '^PATH='
-       line: 'PATH=$PATH:/snap/bin'
+       regexp: '.*\/snap.*'
+       state: absent
+
+   - name: add nvidia-smi alias
+     become: false
+     lineinfile:
+       path: '{{ ansible_user_dir }}/.bashrc'
+       regexp: '^alias nvidia-smi='
+       line: "alias nvidia-smi='sudo chroot /run/nvidia/driver nvidia-smi'"
        state: absent
 
    - set_fact:
@@ -407,8 +414,9 @@
      with_items:
         - /var/snap
         - /var/lib/snapd/snap
+        - /snap
 
    - name: Reboot the system
-     when: "cns_docker == true and microk8s == false or cns_nvidia_driver == true and microk8s == false"
+     when: "cns_nvidia_driver == true and microk8s == false"
      reboot:
        reboot_timeout: 900
\ No newline at end of file
diff --git a/playbooks/cns-upgrade.yaml b/playbooks/cns-upgrade.yaml
index bbb9baa8..bd9ce443 100644
--- a/playbooks/cns-upgrade.yaml
+++ b/playbooks/cns-upgrade.yaml
@@ -42,6 +42,20 @@
        content: |
          cns_version: 15.1
 
+   - name: Create Cloud Native Stack cns_version.yaml
+     when: "k8sversion.stdout == 'v1.32.6'"
+     copy:
+       dest: "/tmp/cns_version.yaml"
+       content: |
+         cns_version: 15.2
+
+   - name: Create Cloud Native Stack cns_version.yaml
+     when: "k8sversion.stdout == 'v1.33.2'"
+     copy:
+       dest: "/tmp/cns_version.yaml"
+       content: |
+         cns_version: 16.1
+
    - name: Fetch cns_version.yaml
      ansible.builtin.fetch:
        src: "/tmp/cns_version.yaml"
@@ -64,10 +78,14 @@
        - { regex: 'cns_docker: no', replace: 'cns_docker: yes' }
        - { regex: 'cns_nvidia_driver: no', replace: 'cns_nvidia_driver: yes' }
 
-   - name: Uninstall Operator if NVIDIA Cude Driver
+   - name: Uninstall Operator if NVIDIA Cuda Driver
      when: cns_nvidia_driver == true
      shell: helm del $(helm ls -A | grep gpu-oper | awk '{print $1}') --namespace nvidia-gpu-operator; sleep 60
 
+   - name: CleanUp Containerd Config
+     become: true
+     shell: rm -rf /etc/containerd/*
+
 - import_playbook: prerequisites.yaml
 
 - import_playbook: nvidia-driver.yaml
@@ -87,9 +105,23 @@
      failed_when: false
 
    - name: Check Current Running Cloud Native Stack Version
-     shell: kubectl get nodes --no-headers | awk '{print $NF}'
+     shell: kubectl version -o json | jq .serverVersion.gitVersion | sed 's/\"//g'
      register: k8sversion
 
+   - name: Update Kubeadm configmap
+     shell: "kubectl -n kube-system get cm kubeadm-config -o yaml | sed 's/^ *kubernetesVersion: .*/  kubernetesVersion: v{{ k8s_version }}/' | kubectl apply -f -"
+     when: "'running' in k8sup.stdout"
+
+   - name: Upgrade the Cloud Native Stack from 16.0 to 16.1
+     shell: kubeadm upgrade apply v1.33.6 --force --ignore-preflight-errors=CreateJob
+     when: "'running' in k8sup.stdout and k8sversion.stdout == 'v1.33.2'"
+     become: true
+
+   - name: Upgrade the Cloud Native Stack from 15.1 to 15.2
+     shell: kubeadm upgrade apply v1.32.10 --force --ignore-preflight-errors=CreateJob
+     when: "'running' in k8sup.stdout and k8sversion.stdout == 'v1.32.6'"
+     become: true
+
    - name: Upgrade the Cloud Native Stack from 15.0 to 15.1
      shell: kubeadm upgrade apply v1.32.6 --force --ignore-preflight-errors=CreateJob
      when: "'running' in k8sup.stdout and k8sversion.stdout == 'v1.32.2'"
@@ -105,13 +137,12 @@
      when: "'running' in k8sup.stdout and k8sversion.stdout == 'v1.31.2'"
      become: true
 
-   - name: Install networking plugin to kubernetes cluster on NVIDIA Cloud Native Stack 15.0 or 14.2
-     when: "'running' in k8sup.stdout and k8sversion.stdout == 'v1.32.2' and release != 'tegra' or 'running' in k8sup.stdout and k8sversion.stdout == 'v1.31.6' and release != 'tegra'"
-     command: kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.30.2/manifests/calico.yaml
-
-   - name: Install networking plugin to kubernetes cluster on NVIDIA Cloud Native Stack 14.1
-     when: "'running' in k8sup.stdout and k8sversion.stdout == 'v1.30.6' and release != 'tegra' or 'running' in k8sup.stdout and k8sversion.stdout == 'v1.31.2' and release != 'tegra'"
-     command: kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.29.3/manifests/calico.yaml
+   - name: Install networking plugin to kubernetes cluster on NVIDIA Cloud Native Stack
+     shell: curl -s https://raw.githubusercontent.com/projectcalico/calico/v{{ calico_version }}/manifests/calico.yaml | sed 's/192.168.0.0\/16/192.168.32.0\/22/g' | kubectl apply -f -
+     retries: 5
+     delay: 5
+     register: install_networking_plugin_calico
+     until: install_networking_plugin_calico is succeeded
 
    - pause:
        seconds: 15
diff --git a/playbooks/cns-validation.yaml b/playbooks/cns-validation.yaml
index 08b3d9af..a0bc587e 100755
--- a/playbooks/cns-validation.yaml
+++ b/playbooks/cns-validation.yaml
@@ -309,6 +309,29 @@
         echo -e
         echo -e "Please validate between Target Version and Installed Version listed above"
 
+    - name: Componenets Target Versions Vs Installed Versions
+      when: cns_docker == false and cns_version == 17.0 or cns_docker == false and cns_version == 16.1 or cns_docker == false and cns_version == 15.2
+      register: compare_170
+      args:
+        executable: /bin/bash
+      shell: |
+        echo -e "==========================================================================================="
+        echo -e "  Components                          Target Version          ||     Installed Version    "
+        echo -e "==========================================================================================="
+        echo -e "GPU Operator Version                  {{ release_25_10_0['gpu_operator_version'] }}                 ||     {{ gpuoperator.stdout }}"
+        echo -e "NVIDIA Container Driver Version       {{ release_25_10_0['gpu_driver_version'] }}               ||     {{ nvcdriver.stdout }}"
+        echo -e "GPU Operator NV Toolkit Driver        {{ release_25_10_0['container_toolkit'] }}                 ||     {{ nvtoolkit.stdout }}"
+        echo -e "K8sDevice Plugin Version              {{ release_25_10_0['device_plugin']  }}                 ||     {{ k8sdevice.stdout }}"
+        echo -e "Data Center GPU Manager(DCGM) Version {{ release_25_10_0['dcgm_exporter_version'] }}             ||     {{ dcgm_exporter.stdout }}"
+        echo -e "Node Feature Discovery Version        {{ release_25_10_0['nfd_version'] }}                 ||     {{ nodediscover.stdout }}"
+        echo -e "GPU Feature Discovery Version         {{ release_25_10_0['gfd_version'] }}                  ||     {{ gpudiscover.stdout }}"
+        echo -e "NVIDIA validator version              {{ release_25_10_0['validator_version'] }}                 ||     {{ validator.stdout }}"
+        echo -e "NVIDIA MIG Manager version            {{ release_25_10_0['mig_manager_version'] }}                  ||     {{ mig_manager.stdout }}"
+        echo -e
+        echo -e "NOTE: NVIDIA Mig Manager is valid for only A100 and A30 and H100 GPU's"
+        echo -e
+        echo -e "Please validate between Target Version and Installed Version listed above"
+
     - name: Componenets Target Versions Vs Installed Versions
       when:  cns_version == 14.0 and cns_docker == true or cns_version == 12.3 and cns_docker == true or cns_version == 13.2 and cns_docker == true
       register: compare_140docker
@@ -378,6 +401,29 @@
         echo -e
         echo -e "Please validate between Target Version and Installed Version listed above"
 
+    - name: Componenets Target Versions Vs Installed Versions
+      when:  cns_version == 16.1 and cns_docker == true or cns_version == 17.0 and cns_docker == true or cns_version == 15.2 and cns_docker == true
+      register: compare_170docker
+      args:
+        executable: /bin/bash
+      shell: |
+        echo -e "==========================================================================================="
+        echo -e "  Components                          Target Version          ||     Installed Version    "
+        echo -e "==========================================================================================="
+        echo -e "GPU Operator Version                  {{ release_25_10_0['gpu_operator_version'] }}                ||     {{ gpuoperator.stdout }}"
+        echo -e "NVIDIA Container Driver Version       {{ release_25_10_0['gpu_driver_version'] }}             ||     {{ nvidia_driver.stdout }}"
+        echo -e "NVIDIA Toolkit Driver                 {{ release_25_10_0['container_toolkit'] }}                 ||     {{ nvidia_ct.stdout }}"
+        echo -e "K8sDevice Plugin Version              {{ release_25_10_0['device_plugin']  }}                 ||     {{ k8sdevice.stdout }}"
+        echo -e "Data Center GPU Manager(DCGM) Version {{ release_25_10_0['dcgm_exporter_version'] }}             ||     {{ dcgm_exporter.stdout }}"
+        echo -e "Node Feature Discovery Version        {{ release_25_10_0['nfd_version'] }}                 ||     {{ nodediscover.stdout }}"
+        echo -e "GPU Feature Discovery Version         {{ release_25_10_0['gfd_version'] }}                  ||     {{ gpudiscover.stdout }}"
+        echo -e "NVIDIA validator version              {{ release_25_10_0['validator_version'] }}                 ||     {{ validator.stdout }}"
+        echo -e "NVIDIA MIG Manager version            {{ release_25_10_0['mig_manager_version'] }}                  ||     {{ mig_manager.stdout }}"
+        echo -e
+        echo -e "NOTE: NVIDIA Mig Manager is valid for only A100 and A30 and H100 GPU's"
+        echo -e
+        echo -e "Please validate between Target Version and Installed Version listed above"
+
     - name: Componenets Target Versions Vs Installed Versions
       ignore_errors: true
       register: stack_versions
@@ -471,6 +517,11 @@
       debug:
         msg: "{{ compare_160.stdout_lines }}"
 
+    - name: Report Versions
+      when:  cns_version == 17.0 and cns_docker == false or cns_version == 16.1 and cns_docker == false or cns_version == 15.2 and cns_docker == false
+      debug:
+        msg: "{{ compare_170.stdout_lines }}"
+
     - name: Report Versions
       when:  cns_version == 15.0 and cns_docker == true or cns_version == 13.3 and cns_docker == true or cns_version == 14.1 and cns_docker == true
       debug:
@@ -481,6 +532,11 @@
       debug:
         msg: "{{ compare_160docker.stdout_lines }}"
 
+    - name: Report Versions
+      when:  cns_version == 17.0 and cns_docker == true or cns_version == 16.1 and cns_docker == true or cns_version == 15.2 and cns_docker == true
+      debug:
+        msg: "{{ compare_170docker.stdout_lines }}"
+
     - name: Report Stack Version
       debug:
         msg: "{{ stack_versions.stdout_lines }}"
diff --git a/playbooks/cns.yaml b/playbooks/cns.yaml
new file mode 100644
index 00000000..69e43116
--- /dev/null
+++ b/playbooks/cns.yaml
@@ -0,0 +1,3351 @@
+- hosts: all
+  gather_facts: yes
+  vars:
+    cns_version: 14.1
+    microk8s: no
+    k8s_apt_key: "https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key"
+    k8s_gpg_key: "https://pkgs.k8s.io/core:/stable:/v1.31/rpm/repodata/repomd.xml.key"
+    k8s_apt_ring: "/etc/apt/keyrings/kubernetes-apt-keyring.gpg"
+    k8s_registry: "registry.k8s.io"
+    container_runtime: "cri-dockerd"
+    containerd_version: "2.2.0"
+    runc_version: "1.4.0"
+    cni_plugins_version: "1.7.1"
+    containerd_max_concurrent_downloads: "5"
+    nvidia_container_toolkit_version: "1.18.1"
+    crio_version: "1.33.6"
+    cri_dockerd_version: "0.4.0"
+    k8s_version: "1.33.6"
+    calico_version: "3.29.3"
+    flannel_version: "0.25.6"
+    helm_version: "4.0.2"
+    gpu_operator_version: "25.10.1"
+    network_operator_version: "25.7.0"
+    nim_operator_version: "3.0.2"
+    nsight_operator_version: "1.1.2"
+    kai_scheduler_version: "0.10.2"
+    local_path_provisioner: "0.0.31"
+    nfs_provisioner: "4.0.18"
+    metallb_version: "0.15.3"
+    kserve_version: "0.16.0"
+    prometheus_stack: "79.9.0"
+    prometheus_adapter: "5.2.0"
+    grafana_operator: "5.18.0"
+    elastic_stack: "9.2.1"
+    lws_version: "0.7.0"
+    volcano_version: "1.13.0"
+    confidential_computing: no
+    gpu_driver_version: "580.105.08"
+    use_open_kernel_module: no
+    enable_mig: no
+    mig_profile: all-disabled
+    mig_strategy: single
+    enable_gds: no
+    enable_secure_boot: no
+    enable_cdi: no
+    enable_vgpu: no
+    vgpu_license_server: ""
+    helm_repository: "https://helm.ngc.nvidia.com/nvidia"
+    gpu_operator_helm_chart: nvidia/gpu-operator
+    gpu_operator_driver_registry: "nvcr.io/nvidia"
+    ngc_registry_password: ""
+    ngc_registry_email: ""
+    ngc_registry_username: "$oauthtoken"
+    enable_network_operator: no
+    enable_rdma: no
+    deploy_ofed: no
+    proxy: no
+    http_proxy: ""
+    https_proxy: ""
+    cns_docker: yes
+    cns_nvidia_driver: yes
+    nvidia_driver_mig: no
+    enable_gpu_operator: yes
+    enable_nsight_operator: no
+    enable_nim_operator: yes
+    lws: yes
+    storage: yes
+    monitoring: yes
+    kserve: yes
+    loadbalancer: yes
+    loadbalancer_ip: ""
+    kubernetes_host_ip: ""
+    volcano: yes
+  tasks:
+    - name: Checking Nouveau is disabled
+      become: true
+      shell: "lsmod | grep nouveau"
+      register: nouveau_result
+      failed_when: false
+
+    - name: unload nouveau
+      when: nouveau_result.rc == 0
+      become: true
+      modprobe:
+        name: nouveau
+        state: absent
+      ignore_errors: true
+
+    - name: blacklist nouveau
+      when: nouveau_result.rc == 0
+      become: true
+      copy:
+        dest: "/etc/modprobe.d/blacklist-nouveau.conf"
+        owner: "root"
+        group: "root"
+        mode: "0644"
+        content: |
+          blacklist nouveau
+          options nouveau modeset=0
+
+    - name: check cgroups status
+      shell: "stat -fc %T /sys/fs/cgroup/"
+      register: cgroup
+
+    - name: Update cgroup2
+      shell: grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=1"
+      when: ansible_os_family == 'RedHat'
+      become: true
+
+    - name: check and update RHEL version
+      when: "ansible_distribution_version != '8.10' and ansible_os_family == 'RedHat'"
+      shell: subscription-manager release --set 8.10; sudo yum update -y -q
+      become: true
+
+    - name: check for Kernel SNP release
+      shell: uname -r | awk -F'-' '{print $3}'
+      register: snp
+
+    - name: conf_compu_snp_install script
+      become: true
+      when: "confidential_computing == true and snp.stdout != 'snp'"
+      copy:
+        src: "{{lookup('pipe', 'pwd')}}/files/conf_compu_snp_install.sh"
+        dest: "{{ ansible_user_dir }}"
+        mode: 0777
+
+    - name: Run conf_compu_snp_install script, please wait
+      become: true
+      when: "confidential_computing == true and snp.stdout != 'snp'"
+      shell: "bash {{ ansible_user_dir }}/conf_compu_snp_install.sh >> {{ ansible_user_dir }}/snp_install.log"
+
+    - name: update-initramfs-ubuntu
+      become: true
+      command: update-initramfs -u
+      when: ansible_os_family == "Debian" and nouveau_result.rc == 0
+
+    - name: update-initramfs-rhel
+      become: true
+      command: dracut --force
+      when: ansible_os_family == "RedHat" and nouveau_result.rc == 0
+
+    - name: Check SELinux Status on RedHat
+      when: ansible_distribution == 'RedHat'
+      shell: sestatus | grep -i 'Current mode' | awk '{print $3}'
+      register: selinuxstatus
+
+    - name: Update SELinux Status on RHEL system
+      when: ansible_distribution == 'RedHat' and selinuxstatus.stdout == 'enforcing'
+      become: true
+      shell: sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
+
+    - name: Get NVIDIA device id from lspci
+      shell: lspci -nn | grep -i nvidia | egrep -v -i 'nvswitch|Bridge' | awk '{print $(NF-2)}' | awk -F ':' '{print $2}' | sed 's/\]//g' | sort | uniq | tr -d '\n'
+      register: nvidia_id
+      failed_when: false
+      ignore_errors: true
+
+    - name: Verify NVIDIA device has GB200/GB300
+      fail:
+        msg: "GB200 or GB300 device id not found in {{ nvidia_id.stdout }}"
+      when: nvidia_id.stdout != '2941' or nvidia_id.stdout != '31c2'
+      ignore_errors: true
+      failed_when: false
+
+    - name: Get NVIDIA kernel info
+      shell: uname -r | awk -F'-' '{print $3}'
+      register: nvidia_kernel
+
+    - name: Debug kernel version
+      debug:
+        msg: "Linux Kernel: {{ nvidia_kernel.stdout }}"
+
+    - name: check iommu_passthrough exists in current kernel cmdline
+      shell: grep iommu.passthrough /proc/cmdline
+      register: iommu_passthrough_check
+      ignore_errors: true
+      failed_when: false
+
+    - name: check init_on_alloc exists in current kernel cmdline
+      shell: grep init_on_alloc /proc/cmdline
+      register: init_on_alloc_check
+      ignore_errors: true
+      failed_when: false
+
+    - name: check numa_balancing exists in current kernel cmdline
+      shell: grep numa_balancing /proc/cmdline
+      register: numa_balancing_check
+      ignore_errors: true
+      failed_when: false
+
+    - name: set fact
+      set_fact:
+        nvidia_kernel: "{{ nvidia_kernel.stdout }}"
+
+    - name: Ensure iommu_passthrough option
+      when: nvidia_kernel == 'nvidia' and nvidia_id.stdout == '2941' and iommu_passthrough_check.rc != 0 or nvidia_kernel == 'nvidia' and nvidia_id.stdout == '31c2' and iommu_passthrough_check.rc != 0
+      become: true
+      ansible.builtin.lineinfile:
+        path: /etc/default/grub.d/iommu_passthrough.cfg
+        line: 'GRUB_CMDLINE_LINUX="$GRUB_CMDLINE_LINUX iommu.passthrough=1"'
+        create: yes
+        mode: '0644'
+
+    - name: Ensure init_on_alloc option
+      when: nvidia_kernel == 'nvidia' and nvidia_id.stdout == '2941' and init_on_alloc_check.rc != 0 or nvidia_kernel == 'nvidia' and nvidia_id.stdout == '31c2' and init_on_alloc_check.rc != 0
+      become: true
+      ansible.builtin.lineinfile:
+        path: /etc/default/grub.d/disable-init-on-alloc.cfg
+        line: 'GRUB_CMDLINE_LINUX="$GRUB_CMDLINE_LINUX init_on_alloc=0"'
+        create: yes
+        mode: '0644'
+
+    - name: Ensure disable-numa-balancing option
+      when: nvidia_kernel == 'nvidia' and nvidia_id.stdout == '2941' and numa_balancing_check.rc != 0 or nvidia_kernel == 'nvidia' and nvidia_id.stdout == '31c2' and numa_balancing_check.rc != 0
+      become: true
+      ansible.builtin.lineinfile:
+        path: /etc/default/grub.d/disable-numa-balancing.cfg
+        line: 'GRUB_CMDLINE_LINUX="$GRUB_CMDLINE_LINUX numa_balancing=disable"'
+        create: yes
+        mode: '0644'
+
+    - name: Disable HMM on NVIDIA UVM for RTX Pro 6000
+      become: true
+      when: nvidia_id.stdout == '2bb5'
+      ansible.builtin.lineinfile:
+        path: /etc/modprobe.d/nvidia-uvm.conf
+        line: 'options nvidia-uvm uvm_disable_hmm=1'
+        create: yes
+        mode: '0644'
+
+    - name: check nvidia-uvm.conf exists
+      shell: ls -l /etc/modprobe.d/nvidia-uvm.conf
+      register: nvidia_uvm_conf
+      ignore_errors: true
+      failed_when: false
+
+    - name: Update grub configuration
+      when: nvidia_kernel == 'nvidia' and nvidia_id.stdout == '2941' or nvidia_kernel == 'nvidia' and nvidia_id.stdout == '31c2' or nvidia_uvm_conf.rc != 0 and nvidia_id.stdout == '2bb5'
+      command: update-grub
+      become: true
+
+    - name: reboot the system
+      when: >
+        (
+          nouveau_result.rc == 0
+          or
+          (ansible_os_family == 'RedHat' and selinuxstatus.stdout == 'enforcing')
+          or
+          (snp.stdout != 'snp' and confidential_computing == true)
+          or
+          (cgroup.stdout != 'cgroup2fs' and ansible_os_family == 'RedHat')
+          or
+          (nvidia_kernel == 'nvidia' and nvidia_id.stdout == '2941' and iommu_passthrough_check.rc != 0)
+          or
+          (nvidia_kernel == 'nvidia' and nvidia_id.stdout == '2941' and init_on_alloc_check.rc != 0)
+          or
+          (nvidia_kernel == 'nvidia' and nvidia_id.stdout == '2941' and numa_balancing_check.rc != 0)
+          or
+          (nvidia_kernel == 'nvidia' and nvidia_id.stdout == '31c2' and iommu_passthrough_check.rc != 0)
+          or
+          (nvidia_kernel == 'nvidia' and nvidia_id.stdout == '31c2' and init_on_alloc_check.rc != 0)
+          or
+          (nvidia_kernel == 'nvidia' and nvidia_id.stdout == '31c2' and numa_balancing_check.rc != 0)
+          or
+          (nvidia_uvm_conf.rc != 0 and nvidia_id.stdout == '2bb5')
+        )
+      become: true
+      reboot:
+        reboot_timeout: 3000
+        msg: "Rebooting the system to apply the changes"
+        post_reboot_delay: 60
+
+    - name: Install PreRequisistes dependencies
+      when: ansible_distribution == 'Ubuntu'
+      become: true
+      apt:
+        name: ["mokutil"]
+        state: present
+        update_cache: yes
+
+    - name: Get jq pacakge
+      become: true
+      when: ansible_architecture == 'x86_64'
+      get_url:
+        url: https://github.com/jqlang/jq/releases/download/jq-1.8.1/jq-linux-amd64
+        dest: /usr/local/bin/jq
+        mode: '0777'
+
+    - name: Get jq pacakge
+      become: true
+      when: ansible_architecture == 'aarch64'
+      get_url:
+        url: https://github.com/jqlang/jq/releases/download/jq-1.8.1/jq-linux-arm64
+        dest: /usr/local/bin/jq
+        mode: '0777'
+
+    - name: Get Speedtest CLI
+      get_url:
+        url: https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
+        dest: /tmp/speedtest-cli
+        mode: '0777'
+
+    - name: Check Internet Speed
+      ignore_errors: true
+      failed_when: false
+      shell: /usr/bin/python3 /tmp/speedtest-cli --secure --simple
+      register: speed
+      async: 30
+
+    - name: Report Valid Internet Speed
+      shell: echo {{ speed.stdout_lines[1] }} | awk '{print $3}'
+      register: speedtest
+      ignore_errors: true
+      failed_when: "'Kbit/s' in speedtest.stdout"
+
+    - name: check secure boot
+      shell: mokutil --sb-state | awk '{print $2}'
+      register: secure_boot
+      failed_when: "'enabled' in secure_boot.stdout"
+      ignore_errors: true
+
+    - name: check enough storage
+      shell: df --block-size 1g / --output=avail | tail -1 | sed "s/ //g"
+      register: size
+      failed_when: " size.stdout | int <= 40 and ansible_architecture == 'x86_64'"
+
+    - name: Check Number of CPU's
+      failed_when: ansible_processor_vcpus < 2
+      shell: "echo 'minimum 2 CPUs required'"
+
+    - name: Check memory requirements
+      failed_when: ansible_memtotal_mb < 4096
+      shell: "echo 'minimum 4GB memory required'"
+
+    - name: Clean up kube config
+      become: true
+      file:
+        path: /root/.kube
+        state: absent
+
+    - name: Get Nvidia Tegra Release
+      shell: uname -r | awk -F'-' '{print $2}'
+      register: release
+
+    - set_fact:
+        release: "{{ release.stdout }}"
+
+    - name: Check CNS Version support for RHEL
+      shell: "echo 'Not a Valid Installation please use CNS Version 10.0 above and retry'"
+      failed_when: "cns_version < 10.0 and ansible_distribution in ['RedHat', 'CentOS']"
+
+    - name: check dgx
+      stat:
+        path: /etc/dgx-release
+      register: dgx
+
+    - name: check l4t
+      stat:
+        path: /etc/l4t-release
+      register: l4t
+
+    - name: NVIDIA Driver Clean Up on DGX 
+      when:  dgx.stat.exists == True and ansible_distribution == 'Ubuntu' and enable_rdma == true or dgx.stat.exists == True and ansible_distribution == 'Ubuntu' and enable_gds == true or l4t.stat.exists == True and ansible_distribution == 'Ubuntu' and enable_rdma == true or l4t.stat.exists == True and ansible_distribution == 'Ubuntu' and enable_gds == true
+      become: true
+      block:
+        - name: Remove Ubuntu unattended upgrades to prevent apt lock
+          ansible.builtin.apt:
+            name: unattended-upgrades
+            state: absent
+            purge: yes
+          register: apt_cleanup
+          retries: 10
+          until: apt_cleanup is success
+
+        - name: Remove OLD Apt Repository
+          apt_repository:
+            repo: ppa:graphics-drivers/ppa
+            state: absent
+          register: ppa_clean
+          retries: 10
+          until: ppa_clean is success
+
+        - name: Remove NVIDIA packages
+          apt:
+            name:
+            - "*cuda*"
+            - "libnvidia-cfg1-*"
+            - "libnvidia-common-*"
+            - "libnvidia-compute-*"
+            - "libnvidia-decode-*"
+            - "libnvidia-encode-*"
+            - "libnvidia-extra-*"
+            - "libnvidia-fbc1-*"
+            - "libnvidia-gl-*"
+            - "nvidia-compute-utils-*"
+            - "nvidia-dkms-*"
+            - "nvidia-driver-*"
+            - "nvidia-kernel-common-*"
+            - "nvidia-kernel-source-*"
+            - "nvidia-modprobe"
+            - "nvidia-prime"
+            - "nvidia-settings"
+            - "nvidia-utils-*"
+            - "nvidia-fabricmanager-*"
+            - "screen-resolution-extra"
+            - "xserver-xorg-video-nvidia-*"
+            - "gdm*"
+            - "xserver-xorg-*"
+            autoremove: yes
+            purge: yes
+            state: absent
+          register: nvidia_cleanup
+          retries: 10
+          until: nvidia_cleanup is success
+
+        - name: unload NVIDIA
+          shell: /usr/bin/nvidia-uninstall --silent; kill -9 $(lsof /dev/nvidia* | awk '{print $2}' | grep -v PID | uniq); rmmod -f nvidia_uvm; rmmod -f nvidia_drm; rmmod -f nvidia_modeset; rmmod -f nvidia
+          ignore_errors: yes
+          failed_when: false
+
+    - name: Create a APT KeyRing directory
+      become: true
+      when: "ansible_distribution == 'Ubuntu' and ansible_distribution_major_version <= '20' "
+      file:
+        path: /etc/apt/keyrings
+        state: directory
+        mode: '0755'
+      retries: 5
+      delay: 5
+      register: create_keyring
+      until: create_keyring is succeeded
+
+    - name: Create a APT KeyRing directory
+      become: true
+      when: "ansible_distribution == 'Ubuntu' "
+      file:
+        path: /etc/apt/trusted.gpg
+        state: touch
+        mode: '0755'
+      retries: 5
+      delay: 5
+      register: create_trusted_gpg
+      until: create_trusted_gpg is succeeded
+        
+    - name: Add an Kubernetes apt signing key for Ubuntu
+      become: true
+      when: "ansible_distribution == 'Ubuntu' "
+      apt_key:
+        url: "{{ k8s_apt_key }}"
+        keyring: "{{ k8s_apt_ring }}"
+        state: present
+      retries: 5
+      delay: 5
+      register: add_k8s_key
+      until: add_k8s_key is succeeded
+
+    - name: change apt repo
+      shell: "echo {{ k8s_apt_key }} | rev  | cut -c12- | rev"
+      register: k8s_apt_repository
+      retries: 5
+      delay: 5
+      until: k8s_apt_repository is succeeded
+
+    - name: change gpg repo
+      shell: "echo {{ k8s_gpg_key }} | rev  | cut -c24- | rev"
+      register: k8s_gpg_repository
+      retries: 5
+      delay: 5
+      until: k8s_gpg_repository is succeeded
+
+    - name: Adding Kubernetes apt repository for Ubuntu
+      become: true
+      when: "ansible_distribution == 'Ubuntu' "
+      apt_repository:
+        repo: "deb [signed-by={{ k8s_apt_ring }}] {{ k8s_apt_repository.stdout }} /"
+        state: present
+        filename: kubernetes
+      retries: 5
+      delay: 5
+      register: add_k8s_repo
+      until: add_k8s_repo is succeeded
+
+    - name: Add kubernetes repo for RHEL
+      become: true
+      when: "ansible_distribution == 'RedHat' "
+      yum_repository:
+        name: kubernetes
+        description: Kubernetes repo
+        baseurl: "{{ k8s_gpg_repository.stdout }}"
+        gpgkey: "{{ k8s_gpg_key }}"
+        gpgcheck: yes
+        enabled: yes
+        repo_gpgcheck: yes
+      retries: 5
+      delay: 5
+      register: add_rhel_repo
+      until: add_rhel_repo is succeeded
+
+    - name: check update GCC for build essentials
+      when: "ansible_distribution == 'Ubuntu'"
+      become: true
+      block:
+        - name: capture gcc expected version
+          shell: cat /proc/version | tr -d '(' | tr -d ')' | awk '{print $8}' | cut -d '.' -f 1
+          register: gcc_expected_version
+
+        - name: install expected gcc version
+          apt:
+            name: "gcc-{{ gcc_expected_version.stdout }}"
+            state: present
+
+        - name: install expected g++ version
+          apt:
+            name: "g++-{{ gcc_expected_version.stdout }}"
+            state: present
+
+        - name: capture gcc binary path
+          shell: "which gcc"
+          register: gcc_bin_path
+
+        - name: capture g++ binary path
+          shell: "which g++"
+          register: g_plus_plus_bin_path
+
+        - name: capture gcc expected version binary path
+          shell: "which gcc-{{ gcc_expected_version.stdout }}"
+          register: gcc_expected_version_bin_path
+
+        - name: capture g++ expected version binary path
+          shell: "which g++-{{ gcc_expected_version.stdout }}"
+          register: g_plus_plus_expected_version_bin_path
+
+        - name: setup expected gcc as primary gcc
+          community.general.alternatives:
+            name: gcc
+            link: "{{ gcc_bin_path.stdout }}"
+            path: "{{ gcc_expected_version_bin_path.stdout }}"
+            subcommands:
+            - name: g++
+              link: "{{ g_plus_plus_bin_path.stdout }}"
+              path: "{{ g_plus_plus_expected_version_bin_path.stdout }}"
+            state: auto
+
+    - name: Install kubernetes components for Ubuntu on NVIDIA Cloud Native Stack
+      become: true
+      when: "ansible_distribution == 'Ubuntu'"
+      apt:
+        name: ['build-essential', 'net-tools', 'libseccomp2', 'apt-transport-https', 'curl', 'ca-certificates', 'gnupg-agent' ,'software-properties-common', 'kubelet={{ k8s_version }}-1.1', 'kubeadm={{ k8s_version }}-1.1', 'kubectl={{ k8s_version }}-1.1']
+        state: present
+        update_cache: true
+        allow_change_held_packages: yes
+        force: yes
+      retries: 5
+      delay: 5
+      register: install_k8s_ubuntu
+      until: install_k8s_ubuntu is succeeded
+
+    - name: Install kubernetes components for RedHat on NVIDIA Cloud Native Stack
+      become: true
+      when: "ansible_distribution == 'RedHat'"
+      yum:
+        name: ['net-tools', 'libseccomp', 'curl', 'ca-certificates', 'kubelet-{{ k8s_version }}', 'kubeadm-{{ k8s_version }}', 'kubectl-{{ k8s_version }}']
+        state: present
+      retries: 5
+      delay: 5
+      register: install_k8s_rhel
+      until: install_k8s_rhel is succeeded
+
+    - name: Hold the installed Packages
+      become: true
+      when: "ansible_distribution == 'Ubuntu'"
+      dpkg_selections:
+        name: "{{ item }}"
+        selection: hold
+      with_items:
+        - kubelet
+        - kubectl
+        - kubeadm
+      retries: 5
+      delay: 5
+      register: hold_packages
+      until: hold_packages is succeeded
+
+    - name: Validate whether Kubernetes cluster installed
+      shell: kubectl cluster-info
+      register: k8sup
+      no_log: True
+      failed_when: false
+      retries: 5
+      delay: 5
+      until: k8sup is succeeded
+
+    - name: Remove swapfile from /etc/fstab
+      become: true
+      when: "'running' not in k8sup.stdout"
+      mount:
+        name: "{{ item }}"
+        fstype: swap
+        state: absent
+      with_items:
+        - swap
+        - none
+      retries: 5
+      delay: 5
+      register: remove_swap
+      until: remove_swap is succeeded
+
+    - name: Disable swap
+      become: true
+      when: "'running' not in k8sup.stdout"
+      command: swapoff -a
+      retries: 5
+      delay: 5
+      register: disable_swap
+      until: disable_swap is succeeded
+
+    - name: disable Firewall
+      become: true
+      when: "'running' not in k8sup.stdout and ansible_distribution == 'RedHat'"
+      service:
+        state: stopped
+        name: firewalld
+      retries: 5
+      delay: 5
+      register: disable_firewall
+      until: disable_firewall is succeeded
+
+#    - name: Firewall Rules
+#      become: true
+#     when: "'running' not in k8sup.stdout and ansible_distribution == 'RedHat'"
+#     firewalld:
+#       permanent: yes
+#        immediate: yes
+#        port: "{{item.port}}/{{item.proto}}"
+#        state: "{{item.state}}"
+#      with_items:
+#       - {port: "6443", proto: "tcp", state: "enabled"}
+#       - {port: "2379-2380", proto: "tcp", state: "enabled"}
+#       - {port: "10230-10260", proto: "tcp", state: "enabled"}
+#       - {port: "30000-32767", proto: "tcp", state: "enabled"}
+
+    - name: Setup kernel modules for container runtime
+      become: true
+      block:
+        - name: Create kubernetes.conf
+          lineinfile:
+            create: yes
+            mode: 666
+            path: /etc/modules-load.d/kubernetes.conf
+            line: "{{ item }}"
+          loop:
+            - "overlay"
+            - "br_netfilter"
+          retries: 5
+          delay: 5
+          register: create_k8s_conf
+          until: create_k8s_conf is succeeded
+
+        - name: Modprobe for overlay and br_netfilter
+          modprobe:
+            name: "{{ item }}"
+            state: present
+          ignore_errors: true
+          loop:
+          - "overlay"
+          - "br_netfilter"
+          retries: 5
+          delay: 5
+          register: modprobe_modules
+          until: modprobe_modules is succeeded
+
+        - name: Add sysctl parameters to /etc/sysctl.conf
+          sysctl:
+            name: "{{ item.name }}"
+            value: "{{ item.value }}"
+            state: present
+            reload: "{{ item.reload }}"
+          loop:
+            - {name: "net.bridge.bridge-nf-call-ip6tables", value: "1", reload: no}
+            - {name: "net.bridge.bridge-nf-call-iptables", value: "1", reload: no}
+            - {name: "net.ipv4.ip_forward", value: "1", reload: yes}
+            - {name: "fs.inotify.max_user_watches", value: "2099999999", reload: no}
+            - {name: "fs.inotify.max_user_instances", value: "2099999999", reload: no}
+            - {name: "fs.inotify.max_queued_events", value: "2099999999", reload: yes}
+          retries: 5
+          delay: 5
+          register: add_sysctl
+          until: add_sysctl is succeeded
+      when: "cns_version >= 4.0"
+
+    - name: Setup Containerd for Ubuntu
+      become: true
+      lineinfile:
+        line: KUBELET_EXTRA_ARGS=--cgroup-driver=systemd --container-runtime=remote --container-runtime-endpoint="unix:/run/containerd/containerd.sock"
+        path: /etc/default/kubelet
+        create: yes
+      when: "cns_version < 10.0 and container_runtime == 'containerd'"
+      retries: 5
+      delay: 5
+      register: setup_containerd
+      until: setup_containerd is succeeded
+
+    - name: Setup Kubelet Parameters
+      become: true
+      lineinfile:
+        line: KUBELET_EXTRA_ARGS=--serialize-image-pulls=true"
+        path: /etc/default/kubelet
+        create: yes
+      when: "cns_version >= 10.0"
+      retries: 5
+      delay: 5
+      register: setup_kubelet
+      until: setup_kubelet is succeeded
+
+    - name: Install Containerd for NVIDIA Cloud Native Stack
+      become: true
+      block:
+        - name: Download cri-containerd-cni
+          get_url:
+            url: https://github.com/containerd/containerd/releases/download/v{{ containerd_version }}/containerd-{{ containerd_version }}-linux-amd64.tar.gz
+            dest: /tmp/containerd-{{ containerd_version }}-linux-amd64.tar.gz
+            mode: 0664
+          retries: 5
+          delay: 5
+          register: download_containerd
+          until: download_containerd is succeeded
+
+        - name: Untar cri-containerd-cni
+          unarchive:
+            src: /tmp/containerd-{{ containerd_version }}-linux-amd64.tar.gz
+            dest: /usr/local/
+            remote_src: yes
+            extra_opts:
+              - --no-overwrite-dir
+          retries: 5
+          delay: 5
+          register: untar_containerd
+          until: untar_containerd is succeeded
+
+        - name: Download runc
+          get_url:
+            url: https://github.com/opencontainers/runc/releases/download/v{{ runc_version }}/runc.amd64
+            dest: /usr/local/sbin/runc
+            mode: 0777
+          retries: 5
+          delay: 5
+          register: download_runc
+          until: download_runc is succeeded
+
+        - name: Download CNI Plugins
+          get_url:
+            url: https://github.com/containernetworking/plugins/releases/download/v{{ cni_plugins_version }}/cni-plugins-linux-amd64-v{{ cni_plugins_version }}.tgz
+            dest: /tmp/cni-plugins-linux-amd64-v{{ cni_plugins_version }}.tgz
+          retries: 5
+          delay: 5
+          register: download_cni
+          until: download_cni is succeeded
+
+        - name: Create /etc/containerd
+          file:
+            path: /opt/cni/bin/
+            state: directory
+            mode: '0755'
+          retries: 5
+          delay: 5
+          register: create_containerd_dir
+          until: create_containerd_dir is succeeded
+
+        - name: Untar CNI
+          unarchive:
+            src: /tmp/cni-plugins-linux-amd64-v{{ cni_plugins_version }}.tgz
+            dest: /opt/cni/bin/
+            remote_src: yes
+            extra_opts:
+              - --no-overwrite-dir
+          retries: 5
+          delay: 5
+          register: untar_cni
+          until: untar_cni is succeeded
+
+        - name: Remove Containerd tar
+          file:
+            path:  /tmp/containerd-{{ containerd_version }}-linux-amd64.tar.gz
+            state: absent
+          retries: 5
+          delay: 5
+          register: remove_containerd_tar
+          until: remove_containerd_tar is succeeded
+      when: "ansible_system == 'Linux' and ansible_architecture == 'x86_64'"
+
+    - name: Install Containerd for NVIDIA Cloud Native Stack
+      become: true
+      block:
+        - name: Download cri-containerd-cni
+          get_url:
+            url: https://github.com/containerd/containerd/releases/download/v{{ containerd_version }}/containerd-{{ containerd_version }}-linux-arm64.tar.gz
+            dest: /tmp/containerd-{{ containerd_version }}-linux-arm64.tar.gz
+            mode: 0664
+          retries: 5
+          delay: 5
+          register: download_containerd_arm
+          until: download_containerd_arm is succeeded
+
+        - name: Untar cri-containerd-cni
+          unarchive:
+            src: /tmp/containerd-{{ containerd_version }}-linux-arm64.tar.gz
+            dest: /usr/local/
+            remote_src: yes
+            extra_opts:
+              - --no-overwrite-dir
+          retries: 5
+          delay: 5
+          register: untar_containerd_arm
+          until: untar_containerd_arm is succeeded
+
+        - name: Download runc
+          get_url:
+            url: https://github.com/opencontainers/runc/releases/download/v{{ runc_version }}/runc.arm64
+            dest: /usr/local/sbin/runc
+            mode: 0777
+          retries: 5
+          delay: 5
+          register: download_runc_arm
+          until: download_runc_arm is succeeded
+
+        - name: Download CNI Plugins
+          get_url:
+            url: https://github.com/containernetworking/plugins/releases/download/v{{ cni_plugins_version }}/cni-plugins-linux-arm64-v{{ cni_plugins_version }}.tgz
+            dest: /tmp/cni-plugins-linux-arm64-v{{ cni_plugins_version }}.tgz
+          retries: 5
+          delay: 5
+          register: download_cni_arm
+          until: download_cni_arm is succeeded
+
+        - name: Create /etc/containerd
+          file:
+            path: /opt/cni/bin/
+            state: directory
+            mode: '0755'
+          retries: 5
+          delay: 5
+          register: create_containerd_dir_arm
+          until: create_containerd_dir_arm is succeeded
+
+        - name: Untar CNI
+          unarchive:
+            src: /tmp/cni-plugins-linux-arm64-v{{ cni_plugins_version }}.tgz
+            dest: /opt/cni/bin/
+            remote_src: yes
+            extra_opts:
+              - --no-overwrite-dir
+          retries: 5
+          delay: 5
+          register: untar_cni_arm
+          until: untar_cni_arm is succeeded
+
+        - name: Remove Containerd tar
+          file:
+            path:  /tmp/containerd-{{ containerd_version }}-linux-arm64.tar.gz
+            state: absent
+          retries: 5
+          delay: 5
+          register: remove_containerd_tar_arm
+          until: remove_containerd_tar_arm is succeeded
+      when: "ansible_system == 'Linux' and ansible_architecture == 'aarch64'"
+
+    - name: Configure Containerd for NVIDIA Cloud Native Stack
+      become: true
+      block:
+        - name: Create /etc/containerd
+          file:
+            path: /etc/containerd
+            state: directory
+          retries: 5
+          delay: 5
+          register: create_containerd_config_dir
+          until: create_containerd_config_dir is succeeded
+
+        - name: Download Containerd Service
+          get_url:
+            url: https://raw.githubusercontent.com/containerd/containerd/main/containerd.service
+            dest: /etc/systemd/system/
+            mode: 0777
+          retries: 5
+          delay: 5
+          register: download_containerd_service
+          until: download_containerd_service is succeeded
+
+        - name: Get defaults from containerd
+          shell: /usr/local/bin/containerd config default > /etc/containerd/config.toml
+          changed_when: false
+          register: containerd_config_default
+          retries: 5
+          delay: 5
+          until: containerd_config_default is succeeded
+
+        - name: Enable systemd cgroups
+          shell: sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml; sed -i 's/    max_concurrent_downloads = 3/    max_concurrent_downloads = {{ containerd_max_concurrent_downloads}}/g' /etc/containerd/config.toml
+          retries: 5
+          delay: 5
+          register: enable_systemd_cgroups
+          until: enable_systemd_cgroups is succeeded
+
+        - name: restart containerd
+          systemd_service:
+            name: containerd
+            state: started
+            daemon_reload: yes
+            enabled: true
+          retries: 5
+          delay: 5
+          register: restart_containerd
+          until: restart_containerd is succeeded
+      when: "cns_version >= 4.1 and ansible_system == 'Linux' and container_runtime == 'containerd' or cns_version >= 4.1 and ansible_system == 'Linux' and container_runtime == 'cri-dockerd'"
+
+    - name: Add Containerd Proxy configuration
+      become: true
+      block:
+        - name: Get Host IP
+          shell: interface=$(ip a | grep 'state UP' |  egrep 'enp*|ens*|eno*|enc*|eth*|bond*|wlan*' | awk '{print $2}' | sed 's/://g'); for i in $interface; do ifconfig $i | grep -iw inet | awk '{print $2}'; done
+          register: network
+          retries: 5
+          delay: 5
+          until: network is succeeded
+
+        - name: subnet
+          shell: echo {{ network.stdout_lines[0] }} | cut -d. -f1-3
+          register: subnet
+          retries: 5
+          delay: 5
+          until: subnet is succeeded
+
+        - name: Create containerd.service.d
+          file:
+            path: /etc/systemd/system/containerd.service.d
+            state: directory
+            recurse: yes
+          retries: 5
+          delay: 5
+          register: create_containerd_service_dir
+          until: create_containerd_service_dir is succeeded
+
+        - name: create http-proxy.conf
+          lineinfile:
+            create: yes
+            mode: 666
+            path: /etc/systemd/system/containerd.service.d/http-proxy.conf
+            line: "{{ item }}"
+          loop:
+          - "[Service]"
+          - "Environment='NO_PROXY={{ network.stdout_lines[0] }},localhost,127.0.0.0/8,10.96.0.1/24,10.244.0.0/16,192.168.32.0/22,{{ subnet.stdout }}.0/24'"
+          - "Environment='HTTPS_PROXY={{ https_proxy }}'"
+          - "Environment='HTTP_PROXY={{ http_proxy }}'"
+          retries: 5
+          delay: 5
+          register: create_proxy_conf
+          until: create_proxy_conf is succeeded
+
+        - name: restart containerd
+          systemd_service:
+            name: containerd
+            state: restarted
+            daemon_reload: yes
+          retries: 5
+          delay: 5
+          register: restart_containerd_proxy
+          until: restart_containerd_proxy is succeeded
+      when: "proxy == true and cns_version >= 6.1 and container_runtime == 'containerd'"
+
+    - name: Install CRI-O on Ubuntu
+      when: "container_runtime == 'cri-o' and ansible_distribution == 'Ubuntu' and cns_version >= 12.0"
+      become: true
+      block:
+        - name: trim CRI-O version
+          shell: echo {{ crio_version }} | awk -F'.' '{print $1"."$2}'
+          register: cri_version
+          retries: 5
+          delay: 5
+          until: cri_version is succeeded
+
+        - name: set version
+          set_fact:
+            version: "{{ cri_version.stdout }}"
+          retries: 5
+          delay: 5
+          register: set_cri_version
+          until: set_cri_version is succeeded
+
+        - name: Adding CRI-O apt key
+          apt_key:
+            url: "https://pkgs.k8s.io/addons:/cri-o:/stable:/v{{ version }}/deb/Release.key"
+            keyring: "/etc/apt/keyrings/cri-o-apt-keyring.gpg"
+            state: present
+          retries: 5
+          delay: 5
+          register: add_crio_key
+          until: add_crio_key is succeeded
+
+        - name: copy the apt keys
+          shell: "{{ item }}"
+          with_items:
+            - cp /etc/apt/trusted.gpg /etc/apt/trusted.gpg.d
+          retries: 5
+          delay: 5
+          register: copy_apt_keys
+          until: copy_apt_keys is succeeded
+
+        - name: Add CRIO repository
+          apt_repository:
+            repo: "deb [signed-by=/etc/apt/keyrings/cri-o-apt-keyring.gpg] https://pkgs.k8s.io/addons:/cri-o:/stable:/v{{ version }}/deb/ /"
+            state: present
+            filename: cri-o.list
+          retries: 5
+          delay: 5
+          register: add_crio_repo
+          until: add_crio_repo is succeeded
+
+    - name: Install CRI-O on Ubuntu
+      when: "container_runtime == 'cri-o' and ansible_distribution == 'Ubuntu' and cns_version >= 12.0"
+      become: true
+      block:
+        - name: install CRI-O
+          apt:
+            name: ['cri-o']
+            state: present
+            update_cache: true
+            force: yes
+          retries: 5
+          delay: 5
+          register: install_crio
+          until: install_crio is succeeded
+
+        - name: Create overlay-images directory
+          file:
+            path: /var/lib/containers/storage/overlay-images
+            state: directory
+          retries: 5
+          delay: 5
+          register: create_overlay_dir
+          until: create_overlay_dir is succeeded
+
+        - name: Update crio.conf
+          blockinfile:
+            path: /etc/crio/crio.conf.d/10-crio.conf
+            block: |
+              hooks_dir = [
+                    "/usr/share/containers/oci/hooks.d",
+              ]
+          retries: 5
+          delay: 5
+          register: update_crio_conf
+          until: update_crio_conf is succeeded
+
+    - name: Install CRI-O on Ubuntu 22.04
+      when: "container_runtime == 'cri-o' and ansible_distribution == 'Ubuntu' and ansible_distribution_major_version == '22' and cns_version < 12.0"
+      become: true
+      block:
+        - name: trim CRI-O version
+          shell: echo {{ crio_version }} | awk -F'.' '{print $1"."$2}'
+          register: cri_version
+          retries: 5
+          delay: 5
+          until: cri_version is succeeded
+
+        - name: set version
+          set_fact:
+            version: "{{ cri_version.stdout }}"
+          retries: 5
+          delay: 5
+          register: set_cri_version_22
+          until: set_cri_version_22 is succeeded
+
+        - name: Adding CRI-O apt key
+          apt_key:
+            url: "https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/x{{ ansible_distribution }}_22.04/Release.key"
+            keyring: /etc/apt/keyrings/libcontainers-archive-keyring.gpg
+            state: present
+          retries: 5
+          delay: 5
+          register: add_crio_key_22
+          until: add_crio_key_22 is succeeded
+
+        - name: Adding CRI-O apt key
+          apt_key:
+            url: "https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/{{ version }}/x{{ ansible_distribution }}_22.04/Release.key"
+            keyring: /etc/apt/keyrings/libcontainers-crio-archive-keyring.gpg
+            state: present
+          retries: 5
+          delay: 5
+          register: add_crio_key_22_2
+          until: add_crio_key_22_2 is succeeded
+
+        - name: copy the apt keys
+          shell: "{{ item }}"
+          with_items:
+            - cp /etc/apt/trusted.gpg /etc/apt/trusted.gpg.d
+          retries: 5
+          delay: 5
+          register: copy_apt_keys_22
+          until: copy_apt_keys_22 is succeeded
+
+        - name: Add CRIO repository
+          apt_repository:
+            repo: "deb  [signed-by=/etc/apt/keyrings/libcontainers-archive-keyring.gpg] https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/x{{ ansible_distribution }}_22.04 /"
+            state: present
+            filename: devel:kubic:libcontainers:stable
+          retries: 5
+          delay: 5
+          register: add_crio_repo_22
+          until: add_crio_repo_22 is succeeded
+
+        - name: Add CRIO repository
+          apt_repository:
+            repo: "deb [signed-by=/etc/apt/keyrings/libcontainers-crio-archive-keyring.gpg] https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/{{ version }}/x{{ ansible_distribution }}_22.04 /"
+            state: present
+            filename: devel:kubic:libcontainers:stable:cri-o:{{ k8s_version }}
+          retries: 5
+          delay: 5
+          register: add_crio_repo_22_2
+          until: add_crio_repo_22_2 is succeeded
+
+    - name: Install CRI-O on Ubuntu 20.04
+      when: "container_runtime == 'cri-o' and ansible_distribution == 'Ubuntu' and ansible_distribution_major_version <= '20' and cns_version < 12.0"
+      become: true
+      block:
+        - name: trim CRI-O version
+          shell: echo {{ crio_version }} | awk -F'.' '{print $1"."$2}'
+          register: cri_version
+          retries: 5
+          delay: 5
+          until: cri_version is succeeded
+
+        - name: set version
+          set_fact:
+            version: "{{ cri_version.stdout }}"
+          retries: 5
+          delay: 5
+          register: set_cri_version_20
+          until: set_cri_version_20 is succeeded
+
+        - name: Adding CRI-O apt key
+          apt_key:
+            url: "https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/x{{ ansible_distribution }}_20.04/Release.key"
+            state: present
+          retries: 5
+          delay: 5
+          register: add_crio_key_20
+          until: add_crio_key_20 is succeeded
+
+        - name: Adding CRI-O apt key
+          apt_key:
+            url: "https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/{{ version }}/x{{ ansible_distribution }}_20.04/Release.key"
+            state: present
+          retries: 5
+          delay: 5
+          register: add_crio_key_20_2
+          until: add_crio_key_20_2 is succeeded
+
+        - name: copy the apt keys
+          shell: "{{ item }}"
+          with_items:
+            - cp /etc/apt/trusted.gpg /etc/apt/trusted.gpg.d
+          retries: 5
+          delay: 5
+          register: copy_apt_keys_20
+          until: copy_apt_keys_20 is succeeded
+
+        - name: Add CRIO repository
+          apt_repository:
+            repo: "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/x{{ ansible_distribution }}_20.04 /"
+            state: present
+            filename: devel:kubic:libcontainers:stable
+          retries: 5
+          delay: 5
+          register: add_crio_repo_20
+          until: add_crio_repo_20 is succeeded
+
+        - name: Add CRIO repository
+          apt_repository:
+            repo: "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/{{ version }}/x{{ ansible_distribution }}_20.04 /"
+            state: present
+            filename: devel:kubic:libcontainers:stable:cri-o:{{ k8s_version }}
+          retries: 5
+          delay: 5
+          register: add_crio_repo_20_2
+          until: add_crio_repo_20_2 is succeeded
+
+    - name: Install CRI-O on Ubuntu
+      when: "container_runtime == 'cri-o' and ansible_distribution == 'Ubuntu' and cns_version < 10.0 "
+      become: true
+      block:
+        - name: Setup CRI-O for Ubuntu
+          become: true
+          lineinfile:
+            line: KUBELET_EXTRA_ARGS=--cgroup-driver=systemd --container-runtime=remote --container-runtime-endpoint="unix:///var/run/crio/crio.sock"
+            path: /etc/default/kubelet
+            create: yes
+          retries: 5
+          delay: 5
+          register: setup_crio_ubuntu
+          until: setup_crio_ubuntu is succeeded
+
+    - name: Install CRI-O on Ubuntu
+      when: "container_runtime == 'cri-o' and ansible_distribution == 'Ubuntu' and cns_version < 12.0"
+      become: true
+      block:
+        - name: install CRI-O
+          apt:
+            name: ['cri-o', 'cri-o-runc']
+            state: present
+            update_cache: true
+            allow_change_held_packages: yes
+            force: yes
+          retries: 5
+          delay: 5
+          register: install_crio_ubuntu
+          until: install_crio_ubuntu is succeeded
+
+    - name: Install CRI-O on RHEL
+      when: "container_runtime == 'cri-o' and ansible_distribution == 'RedHat' and cns_version < 12.0"
+      become: true
+      block:
+        - name: trim CRI-O version
+          shell: echo {{ crio_version }} | awk -F'.' '{print $1"."$2}'
+          register: cri_version
+          retries: 5
+          delay: 5
+          until: cri_version is succeeded
+
+        - name: set version
+          set_fact:
+            version: "{{ cri_version.stdout }}"
+          retries: 5
+          delay: 5
+          register: set_cri_version_rhel
+          until: set_cri_version_rhel is succeeded
+
+        - name: Add CRIO repository
+          yum_repository:
+            name: devel:kubic:libcontainers:stable:cri-o:{{ version }}
+            baseurl: https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/{{ version }}/CentOS_8/
+            gpgcheck: 1
+            gpgkey: https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/{{ version }}/CentOS_8/repodata/repomd.xml.key
+            enabled: 1
+            description: CRIO Repo
+          retries: 5
+          delay: 5
+          register: add_crio_repo_rhel
+          until: add_crio_repo_rhel is succeeded
+
+        - name: Add CRIO repository
+          yum_repository:
+            baseurl: https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/CentOS_8/
+            gpgcheck: 1
+            gpgkey: https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/CentOS_8/repodata/repomd.xml.key
+            enabled: 1
+            name: devel:kubic:libcontainers:stable
+            description: CRIO Repo
+          retries: 5
+          delay: 5
+          register: add_crio_repo_rhel_2
+          until: add_crio_repo_rhel_2 is succeeded
+
+        - name: install CRI-O
+          when: cns_version < 12.0
+          yum:
+            name: ['cri-o', 'cri-tools']
+            state: present
+          retries: 5
+          delay: 5
+          register: install_crio_rhel
+          until: install_crio_rhel is succeeded
+
+    - name: Install CRI-O
+      when: "container_runtime == 'cri-o' and cns_version < 12.0"
+      become: true
+      block:
+        - name: Create overlay-images directory
+          file:
+            path: /var/lib/containers/storage/overlay-images
+            state: directory
+          retries: 5
+          delay: 5
+          register: create_overlay_dir_crio
+          until: create_overlay_dir_crio is succeeded
+
+        - name: create default CRIO conf
+          shell: crio config --default > /etc/crio/crio.conf
+          failed_when: false
+          retries: 5
+          delay: 5
+          register: create_crio_conf
+          until: create_crio_conf is succeeded
+
+        - name: Update crio.conf
+          blockinfile:
+            path: /etc/crio/crio.conf
+            block: |
+              hooks_dir = [
+                    "/usr/share/containers/oci/hooks.d",
+              ]
+          retries: 5
+          delay: 5
+          register: update_crio_conf_2
+          until: update_crio_conf_2 is succeeded
+
+    - name: Install CRI-O on RHEL
+      when: "container_runtime == 'cri-o' and ansible_distribution == 'RedHat' and cns_version >= 12.0"
+      become: true
+      block:
+        - name: trim CRI-O version
+          shell: echo {{ crio_version }} | awk -F'.' '{print $1"."$2}'
+          register: cri_version
+          retries: 5
+          delay: 5
+          until: cri_version is succeeded
+
+        - name: set version
+          set_fact:
+            version: "{{ cri_version.stdout }}"
+          retries: 5
+          delay: 5
+          register: set_cri_version_rhel_12
+          until: set_cri_version_rhel_12 is succeeded
+
+        - name: Add CRIO repository
+          yum_repository:
+            name: cri-o
+            baseurl: https://pkgs.k8s.io/addons:/cri-o:/stable:/v{{ version }}/rpm/
+            gpgcheck: 1
+            gpgkey: https://pkgs.k8s.io/addons:/cri-o:/stable:/v{{ version }}/rpm/repodata/repomd.xml.key
+            enabled: 1
+            description: CRIO Repo
+          retries: 5
+          delay: 5
+          register: add_crio_repo_rhel_12
+          until: add_crio_repo_rhel_12 is succeeded
+
+        - name: install CRI-O
+          when: cns_version >= 12.0
+          yum:
+            name: ['container-selinux', 'cri-o']
+            state: present
+          retries: 5
+          delay: 5
+          register: install_crio_rhel_12
+          until: install_crio_rhel_12 is succeeded
+
+        - name: Create overlay-images directory
+          file:
+            path: /var/lib/containers/storage/overlay-images
+            state: directory
+          retries: 5
+          delay: 5
+          register: create_overlay_dir_rhel_12
+          until: create_overlay_dir_rhel_12 is succeeded
+
+        - name: Update crio.conf
+          blockinfile:
+            path: /etc/crio/crio.conf.d/10-crio.conf
+            block: |
+              hooks_dir = [
+                    "/usr/share/containers/oci/hooks.d",
+              ]
+          retries: 5
+          delay: 5
+          register: update_crio_conf_rhel_12
+          until: update_crio_conf_rhel_12 is succeeded
+
+    - name: Create OCI directory
+      when: cns_docker == true and container_runtime == 'cri-o'
+      become: true
+      no_log: True
+      failed_when: false
+      file:
+        path: /usr/share/containers/oci/hooks.d/
+        state: directory
+        mode: '0755'
+      retries: 5
+      delay: 5
+      register: create_oci_dir
+      until: create_oci_dir is succeeded
+
+    - name: Enable OCI hook for CRI-O
+      when: cns_docker == true and container_runtime == 'cri-o'
+      become: true
+      copy:
+        dest: /usr/share/containers/oci/hooks.d/oci-nvidia-hook.json
+        content: |
+          {
+              "version": "1.0.0",
+              "hook": {
+                  "path": "/usr/bin/nvidia-container-runtime-hook",
+                  "args": ["nvidia-container-runtime-hook", "prestart"],
+                  "env": [
+                      "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
+                  ]
+              },
+              "when": {
+                  "always": true,
+                  "commands": [".*"]
+              },
+              "stages": ["prestart"]
+          }
+      retries: 5
+      delay: 5
+      register: enable_oci_hook
+      until: enable_oci_hook is succeeded
+
+    - name: Check docker is installed
+      shell: docker
+      register: docker_exists
+      no_log: true
+      failed_when: false
+      retries: 5
+      delay: 5
+      until: docker_exists is succeeded
+
+    - name: Install Docker Dependencies on Ubuntu
+      become: true
+      when: container_runtime == 'cri-dockerd' and ansible_distribution == 'Ubuntu'
+      ansible.builtin.apt:
+        name:
+          - apt-transport-https
+          - ca-certificates
+          - lsb-release
+          - gnupg
+          - apt-utils
+          - unzip
+        state: latest
+        update_cache: true
+      retries: 5
+      delay: 5
+      register: install_docker_deps_ubuntu
+      until: install_docker_deps_ubuntu is succeeded
+
+    - name: Install Docker Dependencies on RHEL
+      become: true
+      when: container_runtime == 'cri-dockerd' and ansible_distribution == 'RedHat'
+      yum:
+        name:
+          - yum-utils
+          - device-mapper-persistent-data
+          - lvm2
+          - unzip
+        state: latest
+      retries: 5
+      delay: 5
+      register: install_docker_deps_rhel
+      until: install_docker_deps_rhel is succeeded
+
+    - name: Add Docker APT signing key
+      become: true
+      when: container_runtime == 'cri-dockerd' and ansible_distribution == 'Ubuntu'
+      ansible.builtin.apt_key:
+        url: "https://download.docker.com/linux/{{ ansible_distribution | lower }}/gpg"
+        state: present
+      retries: 5
+      delay: 5
+      register: add_docker_key
+      until: add_docker_key is succeeded
+
+    - name: Add Docker repository into sources list
+      become: true
+      when: container_runtime == 'cri-dockerd' and ansible_distribution == 'Ubuntu'
+      ansible.builtin.apt_repository:
+        repo: "deb https://download.docker.com/linux/{{ ansible_distribution | lower }} {{ ansible_distribution_release }} stable"
+        state: present
+        filename: docker
+      retries: 5
+      delay: 5
+      register: add_docker_repo
+      until: add_docker_repo is succeeded
+
+    - name: Add Docker repo on RHEL
+      become: true
+      when: container_runtime == 'cri-dockerd' and ansible_distribution == 'RedHat'
+      get_url:
+        url: https://download.docker.com/linux/centos/docker-ce.repo
+        dest: /etc/yum.repos.d/docer-ce.repo
+      retries: 5
+      delay: 5
+      register: add_docker_repo_rhel
+      until: add_docker_repo_rhel is succeeded
+
+    - name: Get CRI Dockerd
+      become: true
+      when: container_runtime == 'cri-dockerd' and ansible_system == 'Linux' and ansible_architecture == 'x86_64'
+      unarchive:
+        src: https://github.com/Mirantis/cri-dockerd/releases/download/v{{ cri_dockerd_version }}/cri-dockerd-{{ cri_dockerd_version }}.amd64.tgz
+        dest: /usr/local/bin/
+        remote_src: yes
+        mode: 0777
+        extra_opts: [--strip-components=1]
+      retries: 5
+      delay: 5
+      register: get_cri_dockerd
+      until: get_cri_dockerd is succeeded
+
+    - name: Get CRI Dockerd
+      become: true
+      when: container_runtime == 'cri-dockerd' and ansible_system == 'Linux' and ansible_architecture == 'aarch64'
+      unarchive:
+        src: https://github.com/Mirantis/cri-dockerd/releases/download/v{{ cri_dockerd_version }}/cri-dockerd-{{ cri_dockerd_version }}.arm64.tgz
+        dest: /usr/local/bin/
+        remote_src: yes
+        mode: 0777
+        extra_opts: [--strip-components=1]
+      retries: 5
+      delay: 5
+      register: get_cri_dockerd_arm
+      until: get_cri_dockerd_arm is succeeded
+
+    - name: Get CRI DockerD Service
+      become: true
+      when: container_runtime == 'cri-dockerd'
+      get_url:
+        url: https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/systemd/cri-docker.service
+        dest: /etc/systemd/system/
+      retries: 5
+      delay: 5
+      register: get_cri_docker_service
+      until: get_cri_docker_service is succeeded
+
+    - name: Get CRI DockerD Service
+      become: true
+      when: container_runtime == 'cri-dockerd'
+      get_url:
+        url: https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/systemd/cri-docker.socket
+        dest: /etc/systemd/system/
+      retries: 5
+      delay: 5
+      register: get_cri_docker_socket
+      until: get_cri_docker_socket is succeeded
+
+    - name: Update CRI Dockerd
+      become: true
+      shell: "sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.service"
+      when: container_runtime == 'cri-dockerd'
+      retries: 5
+      delay: 5
+      register: update_cri_dockerd
+      until: update_cri_dockerd is succeeded
+
+    - name: Install Docker on Ubuntu
+      become: true
+      when: container_runtime == 'cri-dockerd' and ansible_distribution == 'Ubuntu'
+      package:
+        name: ['docker-ce', 'docker-ce-cli', 'docker-buildx-plugin', 'docker-compose-plugin'] 
+        state: latest
+      register: docker_status
+      retries: 5
+      delay: 5
+      until: docker_status is succeeded
+
+    - name: Install Docker on RHEL
+      become: true
+      when: container_runtime == 'cri-dockerd' and ansible_distribution == 'RedHat'
+      yum:
+        name: ['docker-ce', 'docker-ce-cli', 'docker-buildx-plugin', 'docker-compose-plugin']
+        state: latest
+        allowerasing: true
+      register: docker_status_rhel
+      retries: 5
+      delay: 5
+      until: docker_status_rhel is succeeded
+
+    - name: Update docker service 
+      when: container_runtime == 'cri-dockerd'
+      shell: sed -i 's/\/usr\/bin\/dockerd/\/usr\/bin\/dockerd -H unix:\/\/\/var\/run\/docker.sock/g' /lib/systemd/system/docker.service; systemctl daemon-reload; systemctl restart docker
+      become: true
+      ignore_errors: true
+      retries: 5
+      delay: 5
+      register: update_docker_service
+      until: update_docker_service is succeeded
+
+    - name: Starting and enabling the required services
+      become: true
+      systemd_service:
+        name: "{{ item }}"
+        state: started
+        enabled: yes
+      failed_when: false
+      with_items:
+        - docker
+        - kubelet
+        - containerd
+        - crio
+        - cri-o
+        - cri-docker
+      retries: 5
+      delay: 5
+      register: start_services
+      until: start_services is succeeded
+         
+    - name: "Install Helm on NVIDIA Cloud Native Stack"
+      become: true
+      command: "{{ item }}"
+      with_items:
+        - curl -O https://get.helm.sh/helm-v{{ helm_version }}-linux-amd64.tar.gz
+        - tar -xvzf helm-v{{ helm_version }}-linux-amd64.tar.gz
+        - cp linux-amd64/helm /usr/local/bin/
+        - rm -rf helm-v{{ helm_version }}-linux-amd64.tar.gz linux-amd64
+      when: "ansible_architecture == 'x86_64'"
+      retries: 5
+      delay: 5
+      register: install_helm_x86
+      until: install_helm_x86 is succeeded
+
+    - name: "Install Helm on NVIDIA Cloud Native Stack"
+      become: true
+      command: "{{ item }}"
+      with_items:
+        - curl -O https://get.helm.sh/helm-v{{ helm_version }}-linux-arm64.tar.gz
+        - tar -xvzf helm-v{{ helm_version }}-linux-arm64.tar.gz
+        - cp linux-arm64/helm /usr/local/bin/
+        - rm -rf helm-v{{ helm_version }}-linux-arm64.tar.gz linux-arm64
+      when: "ansible_architecture == 'aarch64'"
+      retries: 5
+      delay: 5
+      register: install_helm_arm
+      until: install_helm_arm is succeeded
+
+    - name: Update Containerd Runtime for NVIDIA Cloud Native Stack
+      become: true
+      block:
+        - name: Create /etc/containerd
+          file:
+            path: /etc/containerd
+            state: directory
+
+        - name: Write defaults to config.toml
+          copy:
+            src: "{{lookup('pipe', 'pwd')}}/files/config.toml"
+            dest: /etc/containerd/config.toml
+            mode: 0664
+
+        - name: Enable systemd cgroups
+          shell: sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
+
+        - name: restart containerd
+          service:
+            name: containerd
+            state: restarted
+            daemon_reload: yes
+      when: "cns_docker == true and microk8s == false and container_runtime == 'containerd'"
+
+    - name: Check NVIDIA Driver Modules are loaded
+      shell: "lsmod | grep -i nvidia"
+      register: nvidia_mod
+      no_log: True
+      failed_when: false
+
+    - name: Check NVIDIA SMI loaded
+      shell: "nvidia-smi"
+      register: nvidia_smi
+      no_log: True
+      failed_when: false
+
+    - name: Trim the GPU Driver Version
+      shell: "echo {{ gpu_driver_version }} | awk -F'.' '{print $1}'"
+      register: dversion
+
+    - set_fact:
+        driver_version: "{{ dversion.stdout }}"
+
+    - name: unload NVIDIA
+      when: nvidia_smi.rc == 0
+      shell: /usr/bin/nvidia-uninstall --silent; kill -9 $(lsof /dev/nvidia* | awk '{print $2}' | grep -v PID | uniq); rmmod nvidia_uvm; rmmod nvidia_drm; rmmod nvidia_modeset; rmmod nvidia
+      become: true
+      failed_when: false
+
+    - name: NVIDIA Driver Clean Up
+      become: true
+      when:  nvidia_mod.rc >= 1 and ansible_distribution == 'Ubuntu' and cns_nvidia_driver == true or nvidia_smi.rc == 0 and ansible_distribution == 'Ubuntu' and cns_nvidia_driver == true 
+      block:
+        - name: Remove Ubuntu unattended upgrades to prevent apt lock
+          ansible.builtin.apt:
+            name: unattended-upgrades
+            state: absent
+            purge: yes
+          register: apt_cleanup
+          retries: 10
+          until: apt_cleanup is success
+
+        - name: Remove OLD Apt Repository
+          apt_repository:
+            repo: ppa:graphics-drivers/ppa
+            state: absent
+          register: ppa_clean
+          retries: 10
+          until: ppa_clean is success
+
+        - name: Remove NVIDIA packages
+          apt:
+            name:
+            - "*cuda*"
+            - "libnvidia-cfg1-*"
+            - "libnvidia-common-*"
+            - "libnvidia-compute-*"
+            - "libnvidia-decode-*"
+            - "libnvidia-encode-*"
+            - "libnvidia-extra-*"
+            - "libnvidia-fbc1-*"
+            - "libnvidia-gl-*"
+            - "nvidia-compute-utils-*"
+            - "nvidia-dkms-*"
+            - "nvidia-driver-*"
+            - "nvidia-kernel-common-*"
+            - "nvidia-kernel-source-*"
+            - "nvidia-modprobe"
+            - "nvidia-prime"
+            - "nvidia-settings"
+            - "nvidia-utils-*"
+            - "nvidia-fabricmanager-*"
+            - "screen-resolution-extra"
+            - "xserver-xorg-video-nvidia-*"
+            - "gdm*"
+            - "xserver-xorg-*"
+            autoremove: yes
+            purge: yes
+            state: absent
+          register: nvidia_cleanup
+          retries: 10
+          until: nvidia_cleanup is success
+
+        - name: Remove old keyring
+          shell:
+            cmd: "apt-key del 7fa2af80"
+
+        - name: unload NVIDIA
+          shell: /usr/bin/nvidia-uninstall --silent; kill -9 $(lsof /dev/nvidia* | awk '{print $2}' | grep -v PID | uniq); rmmod -f nvidia_uvm; rmmod -f nvidia_drm; rmmod -f nvidia_modeset; rmmod -f nvidia
+          ignore_errors: yes
+          failed_when: false
+
+    - name:  ensure we have kernel-headers installed for the current kernel on RHEL
+      become: true
+      when:  "cns_version >= 10.0 and ansible_distribution == 'RedHat' and cns_nvidia_driver == true"
+      block:
+        - name: attempt to install kernel support packages for current version
+          yum:
+            name:
+              - "kernel-headers-{{ ansible_kernel }}"
+              - "kernel-tools-{{ ansible_kernel }}"
+              - "kernel-tools-libs-{{ ansible_kernel }}"
+              - "kernel-devel-{{ ansible_kernel }}"
+              - "kernel-debug-devel-{{ ansible_kernel }}"
+            state: present
+        - name: update the kernel to latest version so we have a supported version
+          yum:
+            name:
+              - "kernel"
+              - "kernel-headers"
+              - "kernel-tools"
+              - "kernel-tools-libs"
+              - "kernel-devel"
+              - "kernel-debug-devel"
+            state: latest
+
+    - name: Update Ubuntu System
+      become: true
+      when:  "cns_version >= 6.3 and ansible_distribution == 'Ubuntu' and cns_nvidia_driver == true"
+      ignore_errors: true
+      block:
+        - name: Force an apt update
+          apt:
+            update_cache: true
+          changed_when: false
+          register: update
+          retries: 10
+          until: update is success
+
+        - name: Ensure kmod is installed
+          apt:
+            name: "kmod"
+            state: "present"
+          register: kmod_check
+          retries: 10
+          until: kmod_check is success
+
+    - name: Install NVIDIA TRD Driver
+      become: true
+      when:  "cns_version >= 6.3 and ansible_distribution == 'Ubuntu' and use_open_kernel_module == true and cns_nvidia_driver == true"
+      ignore_errors: true
+      block:
+        - name: Temporarily adjust account password policy to allow for successful NVIDIA driver install
+          shell: chage -d 1 root
+
+        - name: Install driver packages
+          shell: "BASE_URL=https://us.download.nvidia.com/tesla; curl -fSsl -O $BASE_URL/{{ gpu_driver_version }}/NVIDIA-Linux-{{ ansible_architecture }}-{{ gpu_driver_version }}.run; chmod +x ./NVIDIA-Linux-{{ ansible_architecture }}-{{ gpu_driver_version }}.run; sh ./NVIDIA-Linux-{{ ansible_architecture }}-{{ gpu_driver_version }}.run -m=kernel-open --silent"
+
+    - name: Install NVIDIA TRD Driver
+      become: true
+      when:  "cns_version >= 6.3 and use_open_kernel_module == false and cns_nvidia_driver == true"
+      ignore_errors: true
+      block:
+        - name: Temporarily adjust account password policy to allow for successful NVIDIA driver install
+          shell: chage -d 1 root
+
+        - name: Install driver packages
+          shell: "BASE_URL=https://us.download.nvidia.com/tesla; curl -fSsl -O $BASE_URL/{{ gpu_driver_version }}/NVIDIA-Linux-{{ ansible_architecture }}-{{ gpu_driver_version }}.run; chmod +x ./NVIDIA-Linux-{{ ansible_architecture }}-{{ gpu_driver_version }}.run; sh ./NVIDIA-Linux-{{ ansible_architecture }}-{{ gpu_driver_version }}.run --silent"
+
+    - name: check if NVSwitches
+      shell: ls -A /proc/driver/nvidia-nvswitch/devices | wc -l | tr -d '\n'
+      when: cns_nvidia_driver == true
+      register: nvswitch
+      failed_when: false
+      retries: 5
+      delay: 5
+      until: nvswitch is succeeded
+
+    - name: check nvlink status with NVIDIA SMI
+      shell: nvidia-smi nvlink -s -i 0 | tail -1f | awk '{print $NF}' | tr -d '\n'
+      when: cns_nvidia_driver == true
+      register: nvlink
+      failed_when: false
+      retries: 5
+      delay: 5
+      until: nvlink is succeeded
+
+    - name: check dgx
+      ignore_errors: true
+      stat:
+        path: /etc/dgx-release
+      register: dgx
+      retries: 5
+      delay: 5
+      until: dgx is succeeded
+
+    - name: check l4t
+      ignore_errors: true
+      stat:
+        path: /etc/l4t-release
+      register: l4t
+      retries: 5
+      delay: 5
+      until: l4t is succeeded
+
+    - name: Install NVIDIA Fabric Manager on Ubuntu
+      become: true
+      when: ansible_distribution == 'Ubuntu' and dgx.stat.exists == True and cns_nvidia_driver == true or ansible_distribution == 'Ubuntu' and l4t.stat.exists == True and cns_nvidia_driver == true or ansible_distribution == 'Ubuntu' and nvswitch.stdout | int > 0 and cns_nvidia_driver == true
+      ignore_errors: true
+      apt:
+        name: "nvidia-fabricmanager-{{ driver_version }}={{ gpu_driver_version}}-1"
+        state: present
+        update_cache: true
+        force: yes
+      retries: 5
+      delay: 5
+      register: install_fabric_manager_ubuntu
+      until: install_fabric_manager_ubuntu is succeeded
+
+    - name: Install NVIDIA Fabric Manager for NVSwitch on RHEL
+      become: true
+      when: "ansible_distribution == 'RedHat' and dgx.stat.exists == True and cns_nvidia_driver == true or ansible_distribution == 'RedHat' and l4t.stat.exists == True and cns_nvidia_driver == true or ansible_distribution == 'RedHat' and nvswitch.stdout | int > 0 and cns_nvidia_driver == true"
+      ignore_errors: true
+      yum:
+        name: "nvidia-fabric-manager-{{ gpu_driver_version}}-1"
+        state: present
+        update_cache: true
+      retries: 5
+      delay: 5
+      register: install_fabric_manager_rhel
+      until: install_fabric_manager_rhel is succeeded
+
+    - name: Enable and restart NVIDIA Fabric manager
+      when: dgx.stat.exists == True and cns_nvidia_driver == true or l4t.stat.exists == True or nvswitch.stdout | int > 0 and cns_nvidia_driver == true
+      ignore_errors: true
+      become: true
+      systemd_service:
+        name: nvidia-fabricmanager
+        enabled: true
+        state: started
+        daemon_reload: true
+      retries: 5
+      delay: 5
+      register: enable_fabric_manager
+      until: enable_fabric_manager is succeeded
+
+    - name: Check docker is installed
+      shell: docker
+      register: docker_exists
+      no_log: true
+      failed_when: false
+
+    - name: Check NVIDIA docker is installed
+      shell: nvidia-docker
+      register: nvidia_docker_exists
+      no_log: true
+      failed_when: false
+
+    - name: Install Docker Dependencies on Ubuntu
+      become: true
+      when: docker_exists.rc >= 1 and ansible_distribution == 'Ubuntu' and cns_docker == true or nvidia_docker_exists.rc >= 1 and ansible_distribution == 'Ubuntu' and cns_docker == true
+      ansible.builtin.apt:
+        name:
+          - apt-transport-https
+          - ca-certificates
+          - lsb-release
+          - gnupg
+          - apt-utils
+          - unzip
+        state: latest
+        update_cache: true
+
+    - name: Install Docker Dependencies on RHEL
+      become: true
+      when: docker_exists.rc >= 1 and ansible_distribution == 'RedHat' and cns_docker == true or nvidia_docker_exists.rc >= 1 and ansible_distribution == 'RedHat' and cns_docker == true
+      yum:
+        name:
+          - yum-utils
+          - device-mapper-persistent-data
+          - lvm2
+          - unzip
+        state: latest
+        update_cache: true
+
+    - name: create docker.asc file
+      when: docker_exists.rc >= 1 and ansible_distribution == 'Ubuntu' and cns_docker == true
+      become: true
+      file: 
+        path: /etc/apt/keyrings/docker.asc
+        mode: '0644'
+        state: touch
+
+    - name: Add Docker APT signing key
+      become: true
+      when: docker_exists.rc >= 1 and ansible_distribution == 'Ubuntu' and cns_docker == true
+      ansible.builtin.apt_key:
+        url: "https://download.docker.com/linux/{{ ansible_distribution | lower }}/gpg"
+        keyring: /etc/apt/keyrings/docker.asc
+        state: present
+
+    - name: Add Docker repository into sources list
+      become: true
+      when: docker_exists.rc >= 1 and ansible_distribution == 'Ubuntu' and cns_docker == true
+      ansible.builtin.apt_repository:
+        repo: "deb [signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/{{ ansible_distribution | lower }} {{ ansible_distribution_release }} stable"
+        state: present
+        filename: docker
+
+    - name: Add Docker repo on RHEL
+      become: true
+      when: docker_exists.rc >= 1 and ansible_distribution == 'RedHat' and cns_docker == true
+      get_url:
+        url: https://download.docker.com/linux/centos/docker-ce.repo
+        dest: /etc/yum.repos.d/docer-ce.repo
+
+    - name: Create docker systemd file
+      when: docker_exists.rc >= 1 and microk8s == true
+      become: true
+      copy:
+        dest: /lib/systemd/system/docker.service
+        content: |
+          [Unit]
+          Description=Docker Application Container Engine
+          Documentation=https://docs.docker.com
+          After=network-online.target docker.socket firewalld.service snap.microk8s.daemon-containerd.service
+          Wants=network-online.target
+          Requires=docker.socket snap.microk8s.daemon-containerd.service
+
+          [Service]
+          Type=notify
+          ExecStart=/usr/bin/dockerd -H unix:// --containerd=/var/snap/microk8s/common/run/containerd.sock
+          ExecReload=/bin/kill -s HUP $MAINPID
+          TimeoutSec=0
+          RestartSec=2
+          Restart=always
+          StartLimitBurst=3
+          StartLimitInterval=60s
+          LimitNOFILE=infinity
+          LimitNPROC=infinity
+          LimitCORE=infinity
+          TasksMax=infinity
+          Delegate=yes
+          KillMode=process
+          OOMScoreAdjust=-500
+          [Install]
+          WantedBy=multi-user.target
+
+    - name: Create docker systemd file
+      when: docker_exists.rc >= 1 and microk8s == false and cns_docker == true
+      become: true
+      copy:
+        dest: /etc/systemd/system/docker.service
+        content: |
+          [Unit]
+          Description=Docker Application Container Engine
+          Documentation=https://docs.docker.com
+          After=network-online.target docker.socket firewalld.service containerd.service
+          Wants=network-online.target
+          Requires=docker.socket containerd.service
+
+          [Service]
+          Type=notify
+          ExecStart=/usr/bin/dockerd -H unix:// --containerd=/run/containerd/containerd.sock
+          ExecReload=/bin/kill -s HUP $MAINPID
+          TimeoutSec=0
+          RestartSec=2
+          Restart=always
+          StartLimitBurst=3
+          StartLimitInterval=60s
+          LimitNOFILE=infinity
+          LimitNPROC=infinity
+          LimitCORE=infinity
+          TasksMax=infinity
+          Delegate=yes
+          KillMode=process
+          OOMScoreAdjust=-500
+          [Install]
+          WantedBy=multi-user.target
+
+    - name: Install Docker on Ubuntu
+      become: true
+      when: docker_exists.rc >= 1 and ansible_distribution == 'Ubuntu' and microk8s == false and cns_docker == true
+      package:
+        name: ['docker-ce', 'docker-ce-cli', 'docker-buildx-plugin', 'docker-compose-plugin']
+        state: latest
+
+    - name: Install Docker on Ubuntu
+      become: true
+      when: docker_exists.rc >= 1 and ansible_distribution == 'Ubuntu' and microk8s == true and cns_docker == true
+      package:
+        name: ['docker-ce', 'docker-ce-cli', 'docker-buildx-plugin', 'docker-compose-plugin']
+        state: latest
+
+    - name: Install Docker on RHEL
+      become: true
+      when: docker_exists.rc >= 1 and ansible_distribution == 'RedHat' and cns_docker == true
+      yum:
+        name: ['docker-ce', 'docker-ce-cli', 'docker-buildx-plugin', 'docker-compose-plugin']
+        state: latest
+        allowerasing: true
+        update_cache: true
+
+    - name: remove nvidia-docker on RHEL
+      become: true
+      when: nvidia_docker_exists.rc == 0 and ansible_distribution == 'RedHat' and cns_docker == true
+      yum:
+        name:
+          - nvidia-docker
+          - nvidia-docker2
+        state: absent
+        autoremove: yes
+
+    - name: remove nvidia-docker v1
+      become: true
+      when: nvidia_docker_exists.rc == 0 and ansible_distribution == 'Ubuntu' and cns_docker == true
+      apt:
+        name: nvidia-docker
+        state: absent
+        purge: yes
+
+    - name: Add NVIDIA Docker apt signing key for Ubuntu
+      become: true
+      when: nvidia_docker_exists.rc >= 1 and ansible_distribution == 'Ubuntu' and cns_docker == true
+      apt_key:
+        url: https://nvidia.github.io/libnvidia-container/gpgkey
+        keyring: /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
+        state: present
+
+    - name: Get NVIDIA Container Toolkit Apt list
+      become: true
+      when: nvidia_docker_exists.rc >= 1 and ansible_distribution == 'Ubuntu' and cns_docker == true
+      apt_repository:
+        repo: "{{ item }}"
+        state: present
+        filename: libnvidia-container.list
+      with_items:
+        - deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://nvidia.github.io/libnvidia-container/stable/ubuntu18.04/$(ARCH) /
+        - deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://nvidia.github.io/libnvidia-container/stable/deb/$(ARCH) /
+
+    - name: add NVIDIA Container Toolkit repo on RHEL
+      become: true
+      when: nvidia_docker_exists.rc >= 1 and ansible_distribution == 'RedHat' and cns_docker == true
+      get_url:
+        url:  https://nvidia.github.io/libnvidia-container/centos8/libnvidia-container.repo
+        dest: /etc/yum.repos.d/nvidia-container-toolkit.repo
+        mode: 0644
+        owner: root
+        group: root
+
+    - name: Remove old nvidia container tooklit
+      become: true
+      when: nvidia_docker_exists.rc >= 1 and cns_docker == true
+      failed_when: false
+      apt:
+        name: ['nvidia-container-toolkit*', 'nvidia-container-runtime*', 'libnvidia-container*']
+        state: absent
+        autoremove: yes
+
+    - name: Install NVIDIA Docker and NVIDIA Container Runtime
+      become: true
+      when: nvidia_docker_exists.rc >= 1 and ansible_distribution == 'Ubuntu' and cns_docker == true
+      apt:
+        name: ['nvidia-container-toolkit={{ nvidia_container_toolkit_version }}-1', 'nvidia-container-toolkit-base={{ nvidia_container_toolkit_version }}-1', 'libnvidia-container-tools={{ nvidia_container_toolkit_version }}-1', 'libnvidia-container1={{ nvidia_container_toolkit_version }}-1']
+        state: present
+        update_cache: true
+
+    - name: install NVIDIA container runtime and NVIDIA Docker on RHEL
+      become: true
+      when: nvidia_docker_exists.rc >= 1 and cns_version >= 10.0 and ansible_distribution == 'RedHat' and cns_docker == true
+      yum:
+        name: ['nvidia-container-toolkit', 'nvidia-docker2']
+        state: present
+        update_cache: yes
+
+    - name: Update docker default runtime
+      become: true
+      when: nvidia_docker_exists.rc >= 1 and cns_docker == true
+      copy:
+        content: "{{ daemon_json | to_nice_json }}"
+        dest: /etc/docker/daemon.json
+        owner: root
+        group: root
+        mode: 0644
+
+    - name: Update Containerd Runtime for NVIDIA Cloud Native Stack
+      become: true
+      block:
+        - name: Create /etc/containerd
+          file:
+            path: /etc/containerd
+            state: directory
+
+        - name: Write defaults to config.toml
+          copy:
+            src: "{{lookup('pipe', 'pwd')}}/files/config.toml"
+            dest: /etc/containerd/config.toml
+            mode: 0664
+
+        - name: Enable systemd cgroups
+          shell: sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
+
+        - name: restart containerd
+          systemd_service:
+            name: containerd
+            state: restarted
+            daemon_reload: yes
+      when: "container_runtime == 'containerd' and microk8s == false"
+
+    - name: Create "docker" group
+      when: docker_exists.rc >= 1 and cns_docker == true
+      become: true
+      group:
+        name: docker
+        state: present
+
+    - name: Add remote "ubuntu" user to "docker" group
+      when: docker_exists.rc >= 1 and cns_docker == true
+      become: true
+      user:
+        name: "{{ ansible_user_id }}"
+        group: docker
+        append: yes
+
+    - name: Configure CDI
+      shell: nvidia-ctk runtime configure --runtime containerd --cdi.enabled; nvidia-ctk runtime configure --runtime docker --cdi.enabled; nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml
+      become: true
+      when: nvidia_docker_exists.rc >= 1 and cns_docker == true
+      ignore_errors: true
+
+    - name: NGC CLI Setup
+      block:
+        - name: Download CLI
+          get_url:
+            url: https://api.ngc.nvidia.com/v2/resources/nvidia/ngc-apps/ngc_cli/versions/3.51.0/files/ngccli_linux.zip
+            dest: /tmp/ngccli_linux.zip
+            mode: 0664
+
+        - name: Install NGC CLI
+          unarchive:
+            src: /tmp/ngccli_linux.zip
+            dest: "{{ ansible_user_dir }}"
+            remote_src: yes
+
+        - name: change ngc file permission
+          file:
+            path: "{{ ansible_user_dir }}/ngc-cli/ngc"
+            mode: '0777'
+
+        - name: Add Path to bashrc
+          lineinfile:
+            path: "{{ ansible_user_dir }}/.bashrc"
+            insertafter: '^PATH='
+            line: 'PATH=$PATH:{{ ansible_user_dir }}/ngc-cli'
+            state: present
+
+    - name: Get Nvidia Tegra Release
+      shell: uname -r | awk -F'-' '{print $2}'
+      register: release
+
+    - set_fact:
+        release: "{{ release.stdout }}"
+
+    - name: Reset Kubernetes component
+      when: container_runtime == 'cri-o'
+      shell: "timeout 45 kubeadm reset --cri-socket=unix:///var/run/crio/crio.sock --force"
+      become: true
+      failed_when: false
+      no_log: True
+      
+    - name: Reset Kubernetes component
+      when: container_runtime == 'cri-dockerd'
+      shell: "timeout 45 kubeadm reset --cri-socket=unix:///run/cri-dockerd.sock --force"
+      become: true
+      failed_when: false
+      no_log: True
+
+    - name: Reset Kubernetes component
+      when: container_runtime == 'containerd'
+      shell: "timeout 45 kubeadm reset --cri-socket=unix:///run/containerd/containerd.sock --force"
+      become: true
+      failed_when: false
+      no_log: True
+
+    - name: reload daemon
+      become: true
+      systemd_service:
+        daemon_reload: true
+      failed_when: false
+
+    - name: remove etcd directory
+      become: true
+      file:
+        path: "/var/lib/etcd"
+        state: absent
+
+    - name: Check proxy conf exists
+      when: proxy == true
+      lineinfile:
+        path: /etc/environment
+        regexp: '^http_proxy=*'
+        state: absent
+      check_mode: yes
+      changed_when: false
+      register: proxyconf
+
+    - name: Get Host IP
+      shell: interface=$(ip a | grep 'state UP' |  egrep 'enp*|ens*|eno*|enc*|eth*|bond*|wlan*' | awk '{print $2}' | sed 's/://g'); for i in $interface; do ifconfig $i | grep -iw inet | awk '{print $2}'; done
+      register: network
+
+    - name: subnet information
+      shell: "echo {{ network.stdout_lines[0] }} | cut -d. -f1-3"
+      register: subnet
+
+    - name: add proxy lines to environment
+      when: proxy == true and not proxyconf.found
+      become: true
+      lineinfile:
+        dest: /etc/environment
+        insertafter: "PATH="
+        line: "{{ item }}"
+      loop:
+        - http_proxy={{ http_proxy }}
+        - HTTP_PROXY={{ http_proxy }}
+        - https_proxy={{ https_proxy }}
+        - HTTPS_PROXY={{ https_proxy }}
+        - no_proxy={{ network.stdout_lines[0] }},localhost,127.0.0.0/8,10.96.0.1/24,10.244.0.0/16,192.168.32.0/22,{{ subnet.stdout }}.0/24
+        - NO_PROXY={{ network.stdout_lines[0] }},localhost,127.0.0.0/8,10.96.0.1/24,10.244.0.0/16,192.168.32.0/22,{{ subnet.stdout }}.0/24
+
+    - name: source the env
+      when: proxy == true and not proxyconf.found
+      shell: source /etc/environment
+      args:
+        executable: /bin/bash
+
+    - name: check default gateway
+      shell: ip r | grep default
+      failed_when: false
+      register: gateway
+      when: proxy == true
+
+    - name: add default gateway
+      shell: route add -net 0.0.0.0/0 gw {{ network.stdout_lines[0] }}
+      when: gateway.rc | default ('') == 1 and proxy == true
+
+    - name: subnet
+      set_fact:
+        subnet: "{% if release != 'tegra' %}192.168.32.0/22{% elif release == 'tegra' %}10.244.0.0/16{% endif %}"
+
+    - name: CRI Socket
+      set_fact:
+        cri_socket: "{% if container_runtime == 'containerd' %}unix:///run/containerd/containerd.sock{% elif container_runtime == 'cri-o' %}unix:///var/run/crio/crio.sock{%elif container_runtime == 'cri-dockerd' %}unix:///run/cri-dockerd.sock{% endif %}"
+
+    - name: Iniitialize the Kubernetes cluster using kubeadm and containerd for Cloud Native Stack
+      block:
+        - name: Generate kubeadm init config
+          file:
+            path: /tmp/kubeadm-init-config.yaml
+            state: touch
+
+        - name: update
+          copy:
+            dest: /tmp/kubeadm-init-config.yaml
+            content: |
+              apiVersion: kubeadm.k8s.io/v1beta3
+              kind: InitConfiguration
+              nodeRegistration:
+                criSocket: "{{ cri_socket }}"
+              localAPIEndpoint:
+                advertiseAddress: "{{ network.stdout_lines[0] }}"
+              ---
+              apiVersion: kubeadm.k8s.io/v1beta3
+              kind: ClusterConfiguration
+              networking:
+                podSubnet: "{{ subnet }}"
+              kubernetesVersion: "v{{ k8s_version }}"
+              imageRepository: "{{ k8s_registry }}"
+
+        - name: Run kubeadm init
+          command: 'kubeadm init --config=/tmp/kubeadm-init-config.yaml'
+          become: true
+          register: kubeadm
+
+    - name: Create kube directory
+      file:
+        path: $HOME/.kube
+        state: directory
+
+    - name: admin permissions
+      become: true
+      file:
+        path: /etc/kubernetes/admin.conf
+        mode: '0644'
+
+    - name: Copy kubeconfig to home
+      copy:
+        remote_src: yes
+        src:  /etc/kubernetes/admin.conf
+        dest:  $HOME/.kube/config
+        mode: '0600'
+
+    - pause:
+        seconds: 15
+
+    - name: Install networking plugin to kubernetes cluster on NVIDIA Cloud Native Stack
+      when: "cns_version >= 7.1 and release != 'tegra' or cns_version == 6.4 and release != 'tegra'"
+      command: "kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v{{ calico_version }}/manifests/calico.yaml"
+
+    - name: Install networking plugin to kubernetes cluster on NVIDIA Cloud Native Stack
+      when: "cns_version <= 6.3 and ansible_distribution_major_version == '20' and release != 'tegra' or cns_version == 7.0 and release != 'tegra' and ansible_distribution_major_version == '22'"
+      command: "kubectl apply -f https://projectcalico.docs.tigera.io/archive/v{{ calico_version }}/manifests/calico.yaml"
+
+    - name: Update Network plugin for Calico on NVIDIA Cloud Native Stack
+      when: "cns_version >= 3.1 and release != 'tegra'"
+      shell: "sleep 5; kubectl set env daemonset/calico-node -n kube-system IP_AUTODETECTION_METHOD=interface=ens*,eth*,enc*,bond*,enp*,eno*"
+
+    - name: Install networking plugin to kubernetes cluster on NVIDIA Cloud Native Stack
+      when: "release == 'tegra'"
+      command: "kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v{{ flannel_version }}/Documentation/kube-flannel.yml"
+
+    - name: Taint the Kubernetes Control Plane node
+      when: "cns_version < 7.0"
+      failed_when: false
+      command: kubectl taint nodes --all node-role.kubernetes.io/master-
+
+    - name: Taint the Kubernetes Control Plane node
+      when: "cns_version == 7.0 or cns_version == 7.1 or cns_version == 7.2 or cns_version == 7.3 or cns_version == 7.4 or cns_version == 7.5"
+      command: kubectl taint nodes --all node-role.kubernetes.io/master- node-role.kubernetes.io/control-plane-
+
+    - name: Taint the Kubernetes Control Plane node
+      when: "cns_version >= 8.0 or cns_version == 6.4"
+      failed_when: false
+      command: kubectl taint nodes --all node-role.kubernetes.io/control-plane-
+
+    - name: Generate join token IP
+      become: true
+      shell: kubeadm token create --print-join-command | awk '{print $3}'
+      register: kubeadm_join_ip
+
+    - name: Generate join token
+      become: true
+      shell: kubeadm token create --print-join-command | awk '{print $5}'
+      register: kubeadm_join_token
+
+    - name: Generate join token hash
+      become: true
+      shell: kubeadm token create --print-join-command | awk '{print $7}'
+      register: kubeadm_join_hash
+
+    - set_fact:
+        api_endpoint: "{{ kubeadm_join_ip.stdout }}"
+        kubeadm_token: "{{ kubeadm_join_token.stdout }}"
+        ca_cert_hash: "{{ kubeadm_join_hash.stdout }}"
+
+    - name: Generate kubeadm init config
+      template:
+        src: kubeadm-join.template
+        dest: /tmp/kubeadm-join.yaml
+
+    - name: Get the Active Mellanox NIC on nodes
+      when: "enable_network_operator == true and cns_version >= 4.1"
+      become: true
+      shell: "for device in `sudo lshw -class network -short | grep -i ConnectX | awk '{print $2}' | egrep -v 'Device|path' | sed '/^$/d'`;do echo -n $device; sudo ethtool $device | grep -i 'Link detected'; done | grep yes | awk '{print $1}' > /tmp/$(hostname)-nic"
+      register: node_nic
+
+    - name: Copy Mellanox NIC Active File to master
+      when: "enable_network_operator == true and cns_version >= 4.1"
+      become: true
+      fetch:
+        src: "/tmp/{{ ansible_nodename }}-nic"
+        dest: "/tmp/"
+        flat: yes
+
+    - name: Validate whether Kubernetes cluster installed
+      shell: kubectl cluster-info
+      register: k8sup
+      no_log: True
+      failed_when: false
+      retries: 5
+      delay: 5
+      until: k8sup is succeeded
+
+    - name: Checking Nouveau is disabled
+      become: true
+      command: lsmod | grep nouveau
+      register: nouveau_result
+      failed_when: false
+      retries: 5
+      delay: 5
+      until: nouveau_result is succeeded
+
+    - name: Alert
+      when: nouveau_result.rc != 1
+      failed_when: false
+      debug:
+        msg: "Please reboot the host and run the same command again"
+      retries: 5
+      delay: 5
+      register: alert_nouveau
+      until: alert_nouveau is succeeded
+
+    - name: check DNS access
+      shell: |
+        kubectl delete pod dnsutils > /dev/null
+        kubectl apply -f https://k8s.io/examples/admin/dns/dnsutils.yaml > /dev/null
+        status=$(kubectl get pods dnsutils | awk '{print $3}' | grep -v STATUS)
+        while [ $status != 'Running' ]
+        do
+          sleep 10
+          status=$(kubectl get pods dnsutils | awk '{print $3}' | grep -v STATUS)
+        done
+        kubectl exec -i -t dnsutils -- nslookup archive.ubuntu.com | grep 'Name:' | uniq | awk '{print $NF}' | head -n1
+      register: dns_check
+      retries: 5
+      delay: 5
+      until: dns_check is succeeded
+
+    - name: DNS Alert
+      debug:
+        msg: "Looks like your system network doesn't reachable to archive.ubuntu.com, please update your DNS settings to proceed further"
+      when: "dns_check.stdout != 'archive.ubuntu.com'"
+      failed_when: true
+      retries: 5
+      delay: 5
+      register: dns_alert
+      until: dns_alert is succeeded
+
+    - name: Check NVIDIA Driver Modules are loaded
+      shell: "lsmod | grep -i nvidia"
+      register: nvidia_mod
+      no_log: True
+      ignore_errors: true
+      failed_when: false
+      retries: 5
+      delay: 5
+      until: nvidia_mod is succeeded
+
+    - name: Check NVIDIA SMI loaded
+      shell: "nvidia-smi"
+      register: nvidia_smi
+      no_log: True
+      ignore_errors: true
+      failed_when: false
+      retries: 5
+      delay: 5
+      until: nvidia_smi is succeeded
+
+    - name: NVIDIA Driver Alert
+      debug:
+        msg: "NVIIDA Driver is installed on the system, please uninstall the NVIDIA Driver and continue the installation. Example: 'sudo /usr/bin/nvidia-uninstall'"
+      when: cns_nvidia_driver != true and nvidia_mod.rc > 1 or cns_nvidia_driver != true and nvidia_smi.rc == 0
+      ignore_errors: true
+      failed_when: false
+      retries: 5
+      delay: 5
+      register: nvidia_driver_alert
+      until: nvidia_driver_alert is succeeded
+
+    - name: GPU PCI ID
+      shell: lspci | grep -i nvidia | awk '{print $1}' | head -n1
+      failed_when: false
+      register: pci
+      retries: 5
+      delay: 5
+      until: pci is succeeded
+
+    - name: Reload the CRI-O service
+      when: container_runtime == 'cri-o'
+      become: true
+      systemd:
+        state: restarted
+        name: "{{ item }}"
+      with_items:
+        - crio
+        - cri-o
+      retries: 5
+      delay: 5
+      register: reload_crio
+      until: reload_crio is succeeded
+
+    - name: Label the Kubernetes nodes as worker
+      failed_when: false
+      command: 'kubectl label nodes --all node-role.kubernetes.io/worker='
+      retries: 5
+      delay: 5
+      register: label_worker_nodes
+      until: label_worker_nodes is succeeded
+
+    - name: Checking if Network Operator is installed
+      shell: helm ls -A | grep network-operator
+      register: network_operator
+      failed_when: false
+      no_log: True
+      retries: 5
+      delay: 5
+      until: network_operator is succeeded
+
+    - name: Get the Active Mellanox NIC on master
+      when: "enable_network_operator == true"
+      become: true
+      failed_when: false
+      shell: "touch /tmp/$(hostname)-nic; for device in `lshw -class network -short | grep -i ConnectX | awk '{print $2}' | egrep -v 'Device|path' | sed '/^$/d'`;do echo -n $device; ethtool $device | grep -i 'Link detected'; done | awk '{print $1}' | grep 'en' > /tmp/$(hostname)-nic"
+      retries: 5
+      delay: 5
+      register: get_mellanox_nic
+      until: get_mellanox_nic is succeeded
+
+    - name: List Mellanox Active NICs
+      when: "enable_network_operator == true"
+      failed_when: false
+      shell: "for list in `ls -lrt /tmp/*nic | awk '{print $NF}'`; do cat $list | tr '\n' ','; done | sed 's/.$//'"
+      register: active_nic
+      retries: 5
+      delay: 5
+      until: active_nic is succeeded
+
+    - name: Copy files to master
+      when: "enable_network_operator == true"
+      no_log: true
+      copy:
+        src: "{{ item }}"
+        dest: "{{ ansible_user_dir }}/"
+      with_fileglob:
+        - "{{lookup('pipe', 'pwd')}}/files/network-operator-values.yaml"
+        - "{{lookup('pipe', 'pwd')}}/files/network-operator-value.yaml"
+        - "{{lookup('pipe', 'pwd')}}/files/networkdefinition.yaml"
+        - "{{lookup('pipe', 'pwd')}}/files/mellanox-test.yaml"
+      retries: 5
+      delay: 5
+      register: copy_network_files
+      until: copy_network_files is succeeded
+
+    - name: Update Active mellanox NIC in network-operator-values.yaml
+      when: "enable_network_operator == true and network_operator_version < '24.10.1'"
+      failed_when: false
+      shell: 'sed -i "s/devices: \[.*\]/devices: \\[ {{ active_nic.stdout }}\]/g" {{ ansible_user_dir }}/network-operator-values.yaml'
+      retries: 5
+      delay: 5
+      register: update_mellanox_nic
+      until: update_mellanox_nic is succeeded
+
+    - name: Generate NIC Cluster Policy template
+      when: "enable_network_operator == true and network_operator_version >= '24.10.1'"
+      copy:
+        src: "{{lookup('pipe', 'pwd')}}/files/nic-cluster-policy.yaml"
+        dest: "{{ ansible_user_dir }}/nic-cluster-policy.yaml.j2"
+      retries: 5
+      delay: 5
+      register: generate_nic_policy
+      until: generate_nic_policy is succeeded
+
+    - name: Create final NIC Cluster Policy configuration
+      when: "enable_network_operator == true and network_operator_version >= '24.10.1'"
+      ansible.builtin.template:
+        src: "{{ ansible_user_dir }}/nic-cluster-policy.yaml.j2"
+        dest: "{{ ansible_user_dir }}/nic-cluster-policy.yaml"
+      retries: 5
+      delay: 5
+      register: create_nic_policy
+      until: create_nic_policy is succeeded
+
+    - name: Update Active mellanox NIC in network-operator-values.yaml
+      when: "enable_network_operator == true and cns_version >= 4.1"
+      failed_when: false
+      shell: 'sed -i "s/              \"ifNames\": \[.*\]/              \"ifNames\": \\[\"{{ active_nic.stdout }}\"\]/g" {{ ansible_user_dir }}/nic-cluster-policy.yaml'
+      retries: 5
+      delay: 5
+      register: update_mellanox_nic_cns
+      until: update_mellanox_nic_cns is succeeded
+
+    - name: Installing the Network Operator on NVIDIA Cloud Native Stack
+      when: "enable_network_operator == true and cns_version >= 4.1"
+      shell: "{{ item }}"
+      with_items:
+          - helm repo add mellanox '{{ helm_repository }}' --force-update
+          - helm repo update
+          - kubectl label nodes --all node-role.kubernetes.io/master- --overwrite
+      retries: 5
+      delay: 5
+      register: install_network_operator
+      until: install_network_operator is succeeded
+
+    - name: Installing the Network Operator on NVIDIA Cloud Native Stack
+      when: "enable_network_operator == true and ansible_architecture == 'x86_64' and  network_operator_version < '24.10.1'"
+      shell: "helm install --version {{ network_operator_version }} -f {{ ansible_user_dir }}/network-operator-values.yaml -n network-operator --create-namespace --wait network-operator mellanox/network-operator"
+      retries: 5
+      delay: 5
+      register: install_network_operator_x86
+      until: install_network_operator_x86 is succeeded
+
+    - name: Installing the Network Operator on NVIDIA Cloud Native Stack
+      when: "enable_network_operator == true and ansible_architecture == 'x86_64' and  network_operator_version >= '24.10.1'"
+      shell: "helm install --version {{ network_operator_version }} -f {{ ansible_user_dir }}/network-operator-value.yaml -n network-operator --create-namespace --wait network-operator mellanox/network-operator"
+      retries: 5
+      delay: 5
+      register: install_network_operator_x86_new
+      until: install_network_operator_x86_new is succeeded
+
+    - name: Applying the NIC Cluster Policy on NVIDIA Cloud Native Stack
+      when: "enable_network_operator == true and ansible_architecture == 'x86_64' and network_operator_version >= '24.10.1'"
+      shell: "kubectl apply -f {{ ansible_user_dir }}/nic-cluster-policy.yaml"
+      retries: 5
+      delay: 5
+      register: apply_nic_policy
+      until: apply_nic_policy is succeeded
+
+    - name: Checking if GPU Operator is installed
+      shell: helm ls -A | grep gpu-operator
+      register: gpu_operator
+      failed_when: false
+      no_log: True
+      retries: 5
+      delay: 5
+      until: gpu_operator is succeeded
+
+    - name: Checking if Network Operator is installed
+      shell: helm ls -A | grep network-operator
+      register: network_operator_valid
+      failed_when: false
+      no_log: True
+      retries: 5
+      delay: 5
+      until: network_operator_valid is succeeded
+
+    - name: Add nvidia Helm repo
+      shell: " {{ item }}"
+      with_items:
+          - helm repo add nvidia '{{ helm_repository }}' --force-update
+          - helm repo update
+      when: 'ngc_registry_password == ""'
+      retries: 5
+      delay: 5
+      register: add_nvidia_helm_repo
+      until: add_nvidia_helm_repo is succeeded
+
+    - name: Add custom Helm repo
+      shell: " {{ item }}"
+      with_items:
+          - helm repo add nvidia '{{ helm_repository }}' --force-update --username=\$oauthtoken --password='{{ ngc_registry_password }}'
+          - helm repo update
+      when: 'ngc_registry_password != ""'
+      retries: 5
+      delay: 5
+      register: add_custom_helm_repo
+      until: add_custom_helm_repo is succeeded
+
+    - name: Get the GPU Operator Values.yaml
+      shell: helm show --version=v{{ gpu_operator_version }} values '{{ gpu_operator_helm_chart }}' > {{ ansible_user_dir }}/values.yaml
+      when: "enable_gpu_operator == true"
+      retries: 5
+      delay: 5
+      register: get_gpu_operator_values
+      until: get_gpu_operator_values is succeeded
+
+    - name: create GPU Custom Values for proxy
+      when: proxy == true
+      replace:
+        dest: "{{ ansible_user_dir }}/values.yaml"
+        regexp: '  env: \[\]'
+        replace: "  env:\n    - name: HTTPS_PROXY\n      value: {{ https_proxy }}\n    - name: HTTP_PROXY\n      value: {{ http_proxy }}\n    - name: https_proxy\n      value: {{ https_proxy }}\n    - name: http_proxy\n      value: {{ http_proxy }}\n    - name: NO_PROXY\n      value: {{ network.stdout }},localhost,127.0.0.0/8,10.96.0.1/24,10.244.0.0/16,192.168.32.0/22,{{ subnet.stdout }}.0/24\n    - name: no_proxy\n      value: {{ network.stdout }},localhost,127.0.0.0/8,10.96.0.1/24,10.244.0.0/16,192.168.32.0/22,{{ subnet.stdout }}.0/24"
+      retries: 5
+      delay: 5
+      register: create_gpu_proxy_values
+      until: create_gpu_proxy_values is succeeded
+
+    - name: Trim the GPU Driver Version
+      shell: "echo {{ gpu_driver_version }} | awk -F'.' '{print $1}'"
+      register: dversion
+      retries: 5
+      delay: 5
+      until: dversion is succeeded
+
+    - set_fact:
+        driver_version: "{{ dversion.stdout }}"
+      retries: 5
+      delay: 5
+      register: set_driver_version
+      until: set_driver_version is succeeded
+
+    - name: Install GPU Operator with Confidential Computing
+      when: "confidential_computing == true and enable_gpu_operator == true and enable_mig == false and enable_vgpu == false and enable_rdma == false and enable_gds == false and enable_secure_boot == false and cns_nvidia_driver == false"
+      block:
+        - name: Label Nodes with vm-passthrough for Confidential Computing
+          shell: kubectl label nodes --all nvidia.com/gpu.workload.config=vm-passthrough
+          retries: 5
+          delay: 5
+          register: label_vm_passthrough
+          until: label_vm_passthrough is succeeded
+
+        - name: Install Confidential Containers
+          shell: "export VERSION=v0.10.0; kubectl apply -k \"github.com/confidential-containers/operator/config/release?ref=${VERSION}\"; kubectl apply --dry-run=client -o yaml -k \"github.com/confidential-containers/operator/config/samples/ccruntime/default?ref=${VERSION}\" > {{ ansible_user_dir }}/ccruntime.yaml"
+          retries: 5
+          delay: 5
+          register: install_confidential_containers
+          until: install_confidential_containers is succeeded
+
+        - name: Replace node selector with nvidia.com for CC Runtime
+          replace:
+            path: "{{ ansible_user_dir }}/ccruntime.yaml"
+            regexp: 'node.kubernetes.io/worker: ""'
+            replace: 'nvidia.com/gpu.workload.config: "vm-passthrough"'
+            backup: yes
+          retries: 5
+          delay: 5
+          register: replace_node_selector
+          until: replace_node_selector is succeeded
+
+        - name: Install CC Runtime
+          shell: "kubectl apply -f {{ ansible_user_dir }}/ccruntime.yaml"
+          retries: 5
+          delay: 5
+          register: install_cc_runtime
+          until: install_cc_runtime is succeeded
+
+        - name: Install NVIDIA GPU Operator for Confidential Computing
+          shell: helm install --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --wait --generate-name -n nvidia-gpu-operator --create-namespace nvidia/gpu-operator --set sandboxWorkloads.enabled=true --set kataManager.enabled=true --set ccManager.enabled=true --set nfd.nodefeaturerules=true
+          retries: 5
+          delay: 5
+          register: install_gpu_operator_confidential
+          until: install_gpu_operator_confidential is succeeded
+
+        - name: Setting the Node Level Mode
+          shell: kubectl label nodes --all nvidia.com/cc.mode=on --overwrite
+          retries: 5
+          delay: 5
+          register: set_node_level_mode
+          until: set_node_level_mode is succeeded
+
+    - name: Create namespace and registry secret
+      when: "confidential_computing == false and enable_gpu_operator == true and cns_nvidia_driver == false and ngc_registry_password != ''"
+      shell: "{{ item }}"
+      with_items:
+        - kubectl create namespace nvidia-gpu-operator
+        - kubectl create secret docker-registry ngc-secret --docker-server='https://nvcr.io' --docker-username='{{ ngc_registry_username }}' --docker-password='{{ ngc_registry_password }}' -n nvidia-gpu-operator
+      retries: 5
+      delay: 5
+      register: create_namespace_secret
+      until: create_namespace_secret is succeeded
+
+    - name: Installing the GPU Operator with NVIDIA Docker on NVIDIA Cloud Native Stack
+      when: "confidential_computing == false and enable_gpu_operator == true and cns_docker == true and cns_nvidia_driver == false and  enable_mig == false and enable_vgpu == false and enable_rdma == false and ngc_registry_password == ''"
+      shell: helm install --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --create-namespace --namespace nvidia-gpu-operator '{{ gpu_operator_helm_chart }}' --set toolkit.enabled=false --wait --generate-name
+      retries: 5
+      delay: 5
+      register: install_gpu_operator_docker
+      until: install_gpu_operator_docker is succeeded
+
+    - name: Installing the GPU Operator with NVIDIA Host Driver on NVIDIA Cloud Native Stack
+      when: "confidential_computing == false and enable_gpu_operator == true and cns_docker == false and cns_nvidia_driver == true and enable_mig == false and enable_vgpu == false and enable_rdma == false and ngc_registry_password == ''"
+      shell: helm install --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --create-namespace --namespace nvidia-gpu-operator '{{ gpu_operator_helm_chart }}' --set driver.enabled=false --wait --generate-name
+      retries: 5
+      delay: 5
+      register: install_gpu_operator_host_driver
+      until: install_gpu_operator_host_driver is succeeded
+
+    - name: Installing the GPU Operator with Docker and NVIDIA Host Driver on NVIDIA Cloud Native Stack
+      when: "confidential_computing == false and enable_gpu_operator == true and cns_docker == true and cns_nvidia_driver == true and enable_mig == false and enable_vgpu == false and enable_rdma == false and ngc_registry_password == ''"
+      shell: helm install --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --create-namespace --namespace nvidia-gpu-operator '{{ gpu_operator_helm_chart }}' --set driver.enabled=false,toolkit.enabled=false --wait --generate-name
+      retries: 5
+      delay: 5
+      register: install_gpu_operator_docker_host_driver
+      until: install_gpu_operator_docker_host_driver is succeeded
+
+    - name: Installing the GPU Operator on NVIDIA Cloud Native Stack
+      when: "confidential_computing == false and enable_gpu_operator == true and use_open_kernel_module == false and enable_cdi == false and enable_mig == false and enable_vgpu == false and enable_rdma == false and enable_gds == false and enable_secure_boot == false and cns_nvidia_driver == false and ngc_registry_password == ''"
+      shell: "helm install --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --create-namespace --namespace nvidia-gpu-operator --devel '{{ gpu_operator_helm_chart }}' --set driver.version='{{ gpu_driver_version }}',driver.repository='{{ gpu_operator_driver_registry }}' --wait --generate-name"
+      retries: 5
+      delay: 5
+      register: install_gpu_operator_default
+      until: install_gpu_operator_default is succeeded
+
+    - name: Installing the GPU Operator with CDI on NVIDIA Cloud Native Stack
+      when: "confidential_computing == false and enable_gpu_operator == true and use_open_kernel_module == false and enable_cdi == true and enable_mig == false and enable_vgpu == false and enable_rdma == false and enable_gds == false and enable_secure_boot == false and cns_nvidia_driver == false and ngc_registry_password == ''"
+      shell: "helm install --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --create-namespace --namespace nvidia-gpu-operator --devel '{{ gpu_operator_helm_chart }}' --set cdi.enabled=true,driver.version='{{ gpu_driver_version }}',driver.repository='{{ gpu_operator_driver_registry }}' --wait --generate-name"
+      retries: 5
+      delay: 5
+      register: install_gpu_operator_cdi
+      until: install_gpu_operator_cdi is succeeded
+
+    - name: Installing the GPU Operator with Open RM on NVIDIA Cloud Native Stack
+      when: "confidential_computing == false and enable_gpu_operator == true and use_open_kernel_module == true and enable_mig == false and enable_vgpu == false and enable_rdma == false and enable_gds == false and enable_secure_boot == false and cns_nvidia_driver == false and ngc_registry_password == ''"
+      shell: "helm install --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --create-namespace --namespace nvidia-gpu-operator --devel '{{ gpu_operator_helm_chart }}' --set driver.version='{{ gpu_driver_version }}',driver.repository='{{ gpu_operator_driver_registry }}',driver.useOpenKernelModules=true --wait --generate-name"
+      retries: 5
+      delay: 5
+      register: install_gpu_operator_open_rm
+      until: install_gpu_operator_open_rm is succeeded
+
+    - name: Installing the Signed GPU Operator on NVIDIA Cloud Native Stack
+      when: "confidential_computing == false and enable_gpu_operator == true and use_open_kernel_module == false and enable_mig == false and enable_vgpu == false and enable_rdma == false and enable_gds == false and enable_secure_boot == true and cns_nvidia_driver == false and ngc_registry_password == ''"
+      shell: "{{ item }}"
+      with_items:
+        - helm install --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --create-namespace --namespace nvidia-gpu-operator --devel {{ gpu_operator_helm_chart }} --set driver.version={{ driver_version }},driver.usePrecompiled=true,driver.repository={{ gpu_operator_driver_registry }} --wait --generate-name
+        - sleep 20
+        - kubectl patch clusterpolicy/cluster-policy --type='json' -p='[{"op":"replace", "path":"/spec/driver/usePrecompiled", "value":true},{"op":"replace", "path":"/spec/driver/version", "value":"{{ driver_version }}"}]'
+      retries: 5
+      delay: 5
+      register: install_signed_gpu_operator_new
+      until: install_signed_gpu_operator_new is succeeded
+
+    - name: Install GPU Operator with vGPU on NVIDIA Cloud Native Stack
+      when: "confidential_computing == false and enable_gpu_operator == true and use_open_kernel_module == false and enable_vgpu == true and cns_nvidia_driver == false and ngc_registry_password != ''"
+      shell: "{{ item }}"
+      with_items:
+          - kubectl create configmap licensing-config -n nvidia-gpu-operator --from-file={{lookup('pipe', 'pwd')}}/files/gridd.conf --from-file={{lookup('pipe', 'pwd')}}/files/client_configuration_token.tok
+          - kubectl create secret docker-registry registry-secret --docker-server='https://nvcr.io' --docker-username='{{ ngc_registry_username }}' --docker-password='{{ ngc_registry_password }}' --docker-email='{{ ngc_registry_email }}' -n nvidia-gpu-operator
+          - helm install --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --create-namespace --namespace nvidia-gpu-operator --devel '{{ gpu_operator_helm_chart }}' --set driver.repository='{{ gpu_operator_driver_registry }}',driver.version='{{ gpu_driver_version }}',driver.imagePullSecrets[0]=registry-secret,driver.licensingConfig.configMapName=licensing-config --wait --generate-name
+      retries: 5
+      delay: 5
+      register: install_gpu_operator_vgpu
+      until: install_gpu_operator_vgpu is succeeded
+
+    - name: Installing the GPU Operator with MIG and Network Operator on NVIDIA Cloud Native Stack
+      when: "confidential_computing == false and enable_gpu_operator == true and use_open_kernel_module == false and deploy_ofed == true and enable_mig == true and enable_rdma == true and enable_vgpu == false and enable_gds == false and enable_secure_boot == false and cns_nvidia_driver == false and ngc_registry_password == ''"
+      shell: "helm install --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --create-namespace --namespace nvidia-gpu-operator --devel '{{ gpu_operator_helm_chart }}' --set driver.rdma.enabled=true,mig.strategy='{{ mig_strategy }}',driver.version='{{ gpu_driver_version }}',driver.repository='{{ gpu_operator_driver_registry }}' --wait --generate-name"
+      retries: 5
+      delay: 5
+      register: install_gpu_operator_mig_network
+      until: install_gpu_operator_mig_network is succeeded
+
+    - name: Installing the GPU Operator with Network Operator on NVIDIA Cloud Native Stack
+      when: "confidential_computing == false and enable_gpu_operator == true and use_open_kernel_module == false and deploy_ofed == true and enable_mig == false and enable_rdma == true and enable_vgpu == false and enable_gds == false and enable_secure_boot == false and cns_nvidia_driver == false and ngc_registry_password == ''"
+      shell: "helm install --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --create-namespace --namespace nvidia-gpu-operator --devel '{{ gpu_operator_helm_chart }}' --set driver.rdma.enabled=true,driver.version='{{ gpu_driver_version }}',driver.repository='{{ gpu_operator_driver_registry }}' --wait --generate-name"
+      retries: 5
+      delay: 5
+      register: install_gpu_operator_network
+      until: install_gpu_operator_network is succeeded
+
+    - name: Installing the GPU Operator with Network Operator and RDMA and GDS on NVIDIA Cloud Native Stack
+      when: "confidential_computing == false and enable_gpu_operator == true and use_open_kernel_module == false and deploy_ofed == true and enable_mig == false and enable_rdma == true and enable_vgpu == false and enable_gds == true and enable_secure_boot == false  and ngc_registry_password == ''"
+      shell: helm install --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --create-namespace --namespace nvidia-gpu-operator --devel '{{ gpu_operator_helm_chart }}' --set driver.rdma.enabled=true,driver.version='{{ gpu_driver_version }}',driver.repository='{{ gpu_operator_driver_registry }}',driver.imagePullSecrets[0]=ngc-secret,gds.enabled=true --wait --generate-name
+      retries: 5
+      delay: 5
+      register: install_gpu_operator_network_rdma_gds
+      until: install_gpu_operator_network_rdma_gds is succeeded
+
+    - name: Installing the Open RM GPU Operator with Network Operator and RDMA and GDS on NVIDIA Cloud Native Stack
+      when: "confidential_computing == false and enable_gpu_operator == true and enable_cdi == false and use_open_kernel_module == true and deploy_ofed == true and enable_mig == false and enable_rdma == true and enable_vgpu == false and enable_gds == true and enable_secure_boot == false  and ngc_registry_password == ''"
+      shell: helm install --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --create-namespace --namespace nvidia-gpu-operator --devel '{{ gpu_operator_helm_chart }}' --set driver.rdma.enabled=true,driver.version='{{ gpu_driver_version }}',driver.repository='{{ gpu_operator_driver_registry }}',driver.imagePullSecrets[0]=ngc-secret,gds.enabled=true,driver.useOpenKernelModules=true --wait --generate-name
+      retries: 5
+      delay: 5
+      register: install_open_rm_gpu_operator_network_rdma_gds
+      until: install_open_rm_gpu_operator_network_rdma_gds is succeeded
+
+    - name: Installing the Open RM GPU Operator with Network Operator and RDMA and GDS on NVIDIA Cloud Native Stack
+      when: "confidential_computing == false and enable_gpu_operator == true and enable_cdi == true and use_open_kernel_module == true and deploy_ofed == true and enable_mig == false and enable_rdma == true and enable_vgpu == false and enable_gds == true and enable_secure_boot == false  and ngc_registry_password == ''"
+      shell: helm install --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --create-namespace --namespace nvidia-gpu-operator --devel '{{ gpu_operator_helm_chart }}' --set cdi.enabled=true,driver.rdma.enabled=true,driver.version='{{ gpu_driver_version }}',driver.repository='{{ gpu_operator_driver_registry }}',driver.imagePullSecrets[0]=ngc-secret,gds.enabled=true,driver.useOpenKernelModules=true --wait --generate-name
+      retries: 5
+      delay: 5
+      register: install_open_rm_gpu_operator_network_rdma_gds_cdi
+      until: install_open_rm_gpu_operator_network_rdma_gds_cdi is succeeded
+
+    - name: Installing the GPU Operator with RDMA and Host MOFED and MIG on NVIDIA Cloud Native Stack
+      when: "confidential_computing == false and enable_gpu_operator == true and use_open_kernel_module == false and deploy_ofed == false and enable_mig == true and  enable_rdma == true and enable_vgpu == false and enable_gds == false and enable_secure_boot == false and cns_nvidia_driver == false and ngc_registry_password == ''"
+      shell:  helm install --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --create-namespace --namespace nvidia-gpu-operator --devel '{{ gpu_operator_helm_chart }}' --set driver.rdma.enabled=true,driver.rdma.useHostMofed=true,mig.strategy='{{ mig_strategy }}'driver.version='{{ gpu_driver_version }}',driver.repository='{{ gpu_operator_driver_registry }}' --wait --generate-name
+      retries: 5
+      delay: 5
+      register: install_gpu_operator_rdma_host_mofed_yes_mig
+      until: install_gpu_operator_rdma_host_mofed_yes_mig is succeeded
+
+    - name: Installing the Open RM GPU Operator with RDMA and Host MOFED with MIG on NVIDIA Cloud Native Stack
+      when: "confidential_computing == false and enable_gpu_operator == true and use_open_kernel_module == true and deploy_ofed == false and enable_mig == true and  enable_rdma == true and enable_vgpu == false and enable_gds == false and enable_secure_boot == false and cns_nvidia_driver == false and ngc_registry_password == ''"
+      shell:  helm install --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --create-namespace --namespace nvidia-gpu-operator --devel '{{ gpu_operator_helm_chart }}' --set driver.rdma.enabled=true,driver.rdma.useHostMofed=true,mig.strategy='{{ mig_strategy }}',driver.version='{{ gpu_driver_version }}',driver.repository='{{ gpu_operator_driver_registry }}',driver.useOpenKernelModules=true --wait --generate-name
+      retries: 5
+      delay: 5
+      register: install_open_rm_gpu_operator_rdma_host_mofed_yes_mig
+      until: install_open_rm_gpu_operator_rdma_host_mofed_yes_mig is succeeded
+
+    - name: Installing the GDS with Open RM GPU Operator on NVIDIA Cloud Native Stack
+      when: "confidential_computing == false and enable_gpu_operator == true and use_open_kernel_module == true and deploy_ofed == false and enable_mig == false and  enable_rdma == false and enable_vgpu == false and enable_gds == true and enable_secure_boot == false and cns_nvidia_driver == false and ngc_registry_password == ''"
+      shell:  helm install --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --create-namespace --namespace nvidia-gpu-operator --devel '{{ gpu_operator_helm_chart }}' --set gds.enabled=true,driver.version='{{ gpu_driver_version }}',driver.repository='{{ gpu_operator_driver_registry }}',driver.useOpenKernelModules=true --wait --generate-name
+      retries: 5
+      delay: 5
+      register: install_gds_open_rm_gpu_operator
+      until: install_gds_open_rm_gpu_operator is succeeded
+
+    - name: Installing the GPU Operator with RDMA and Host MOFED on NVIDIA Cloud Native Stack
+      when: "confidential_computing == false and enable_gpu_operator == true and use_open_kernel_module == false and deploy_ofed == false and enable_mig == false and  enable_rdma == true and enable_vgpu == false and enable_gds == false and enable_secure_boot == false and cns_nvidia_driver == false and ngc_registry_password == ''"
+      shell:  helm install --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --create-namespace --namespace nvidia-gpu-operator --devel '{{ gpu_operator_helm_chart }}' --set driver.rdma.enabled=true,driver.rdma.useHostMofed=true,driver.version='{{ gpu_driver_version }}',driver.repository='{{ gpu_operator_driver_registry }}' --wait --generate-name
+      retries: 5
+      delay: 5
+      register: install_gpu_operator_rdma_host_mofed
+      until: install_gpu_operator_rdma_host_mofed is succeeded
+
+    - name: Installing the Open RM GPU Operator with RDMA and Host MOFED on NVIDIA Cloud Native Stack
+      when: "confidential_computing == false and enable_gpu_operator == true and use_open_kernel_module == true and deploy_ofed == false and enable_mig == false and  enable_rdma == true and enable_vgpu == false and enable_gds == false and enable_secure_boot == false and cns_nvidia_driver == false and ngc_registry_password == ''"
+      shell:  helm install --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --create-namespace --namespace nvidia-gpu-operator --devel '{{ gpu_operator_helm_chart }}' --set driver.rdma.enabled=true,driver.rdma.useHostMofed=true,driver.version='{{ gpu_driver_version }}',driver.repository='{{ gpu_operator_driver_registry }}',driver.useOpenKernelModules=true --wait --generate-name
+      retries: 5
+      delay: 5
+      register: install_open_rm_gpu_operator_rdma_host_mofed
+      until: install_open_rm_gpu_operator_rdma_host_mofed is succeeded
+
+    - name: Installing the GPU Operator with GDS and RDMA and Host MOFED on NVIDIA Cloud Native Stack
+      when: "confidential_computing == false and enable_gpu_operator == true and use_open_kernel_module == false and deploy_ofed == false and enable_mig == false and  enable_rdma == true and enable_vgpu == false and enable_gds == true and enable_secure_boot == false and cns_nvidia_driver == false and ngc_registry_password == ''"
+      shell: "helm install --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --create-namespace --namespace nvidia-gpu-operator --devel '{{ gpu_operator_helm_chart }}' --set driver.rdma.enabled=true,driver.rdma.useHostMofed=true,gds.enabled=true,driver.version='{{ gpu_driver_version }}',driver.repository='{{ gpu_operator_driver_registry }}' --wait --generate-name"
+      retries: 5
+      delay: 5
+      register: install_gpu_operator_gds_rdma_host_mofed
+      until: install_gpu_operator_gds_rdma_host_mofed is succeeded
+
+    - name: Installing the Open RM GPU Operator with GDS and RDMA and Host MOFED on NVIDIA Cloud Native Stack
+      when: "confidential_computing == false and enable_gpu_operator == true and use_open_kernel_module == true and deploy_ofed == false and enable_mig == false and  enable_rdma == true and enable_vgpu == false and enable_gds == true and enable_secure_boot == false and cns_nvidia_driver == false and ngc_registry_password == ''"
+      shell: "helm install --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --create-namespace --namespace nvidia-gpu-operator --devel '{{ gpu_operator_helm_chart }}' --set driver.rdma.enabled=true,driver.rdma.useHostMofed=true,gds.enabled=true,driver.version='{{ gpu_driver_version }}',driver.repository='{{ gpu_operator_driver_registry }}',driver.useOpenKernelModules=true --wait --generate-name"
+      retries: 5
+      delay: 5
+      register: install_open_rm_gpu_operator_gds_rdma_host_mofed
+      until: install_open_rm_gpu_operator_gds_rdma_host_mofed is succeeded
+
+    - name: Installing the GPU Operator with MIG on NVIDIA Cloud Native Stack
+      when: "confidential_computing == false and enable_gpu_operator == true and use_open_kernel_module == false and enable_mig == true and  enable_rdma == false  and enable_vgpu == false and cns_nvidia_driver == false and ngc_registry_password == ''"
+      shell: "helm install --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --create-namespace --namespace nvidia-gpu-operator --devel '{{ gpu_operator_helm_chart }}' --set mig.strategy='{{ mig_strategy }}',driver.version='{{ gpu_driver_version }}',driver.repository='{{ gpu_operator_driver_registry }}' --wait --generate-name"
+      retries: 5
+      delay: 5
+      register: install_gpu_operator_mig
+      until: install_gpu_operator_mig is succeeded
+
+    - name: Enable MIG profile with GPU Operator on NVIDIA Cloud Native Stack
+      when: "confidential_computing == false and cns_nvidia_driver == false and enable_gpu_operator == true and use_open_kernel_module == false and enable_mig == true and enable_vgpu == false"
+      shell: "kubectl label nodes --all nvidia.com/mig.config={{ mig_profile }} --overwrite"
+      retries: 5
+      delay: 5
+      register: enable_mig_profile
+      until: enable_mig_profile is succeeded
+
+    - name: GPU Operator Changes with CRI Docker Runtime
+      shell: 'sleep 60; kubectl get clusterpolicy cluster-policy -o yaml | sed "/validator:/a\    driver:\n      env:\n      - name: DISABLE_DEV_CHAR_SYMLINK_CREATION\n        value: \"true\"" | kubectl apply -f -'
+      when: "enable_gpu_operator == true and container_runtime == 'cri-dockerd'"
+      retries: 5
+      delay: 5
+      register: gpu_operator_cri_docker_changes
+      until: gpu_operator_cri_docker_changes is succeeded
+
+    - name: Container Networking Plugin changes
+      when: "enable_gpu_operator == true"
+      shell: "sleep 20; timeout 15 kubectl delete pods $(kubectl get pods -n kube-system | grep core | awk '{print $1}') -n kube-system; for ns in `kubectl get pods -A  | grep node-feature | grep -v master | awk '{print $1}'`; do kubectl get pods -n $ns  | grep node-feature | grep -v master | awk '{print $1}' | xargs kubectl delete pod -n $ns; done"
+      retries: 5
+      delay: 5
+      register: container_networking_changes
+      until: container_networking_changes is succeeded
+
+    - name: Install NIM Operator
+      shell: "helm install --version {{ nim_operator_version }} --create-namespace --namespace nim-operator nim-operator nvidia/k8s-nim-operator -n nim-operator"
+      when: "enable_nim_operator == true"
+      retries: 5
+      delay: 5
+      register: install_nim_operator
+      until: install_nim_operator is succeeded
+
+    - name: Create NSight Operator custom values
+      when: "enable_nsight_operator == true"
+      copy:
+        src: "{{lookup('pipe', 'pwd')}}/files/nsight_custom_values.yaml"
+        dest: "{{ ansible_user_dir }}/nsight_custom_values.yaml"
+      retries: 5
+      delay: 5
+      register: create_nsight_custom_values
+      until: create_nsight_custom_values is succeeded
+
+    - name: Install NSight Operator
+      shell: "helm install -f {{ ansible_user_dir }}/nsight_custom_values.yaml nsight-operator --create-namespace --namespace nsight-operator https://helm.ngc.nvidia.com/nvidia/devtools/charts/nsight-operator-{{ nsight_operator_version }}.tgz"
+      when: "enable_nsight_operator == true"
+      retries: 5
+      delay: 5
+      register: install_nsight_operator
+      until: install_nsight_operator is succeeded
+
+    - name: Install Local Path Provisoner on NVIDIA Cloud Native Stack
+      shell: kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v{{ local_path_provisioner }}/deploy/local-path-storage.yaml
+      when: storage == true
+      retries: 5
+      delay: 5
+      register: install_local_path_provisioner
+      until: install_local_path_provisioner is succeeded
+
+    - name: Install NFS Packages on RHEL
+      become: true
+      when: storage == true and ansible_distribution == 'RedHat'
+      yum:
+        name: ['nfs-utils']
+        state: present
+      retries: 5
+      delay: 5
+      register: install_nfs_utils
+      until: install_nfs_utils is succeeded
+
+    - name: Install NFS Packages on Ubuntu
+      become: true
+      when: storage == true and ansible_distribution == 'Ubuntu'
+      apt:
+        name: ['nfs-kernel-server', 'nfs-common']
+        state: present
+        update_cache: true
+      retries: 5
+      delay: 5
+      register: install_nfs_packages
+      until: install_nfs_packages is succeeded
+
+    - name: Setup NFS provisioner
+      become: true
+      when: storage == true
+      block:
+        - name: Setup Mounts for NFS
+          shell: |
+            mkdir -p /data/nfs
+            chown nobody:nogroup /data/nfs
+            chmod 2770 /data/nfs
+          retries: 5
+          delay: 5
+          register: setup_nfs_mounts
+          until: setup_nfs_mounts is succeeded
+
+        - name: Update Exports for NFS
+          lineinfile:
+            path: /etc/exports
+            insertafter: EOF
+            line: "/data/nfs  *(rw,sync,no_subtree_check,no_root_squash,insecure)"
+          retries: 5
+          delay: 5
+          register: update_nfs_exports
+          until: update_nfs_exports is succeeded
+
+        - name: Run exports
+          shell: exportfs -a
+          retries: 5
+          delay: 5
+          register: run_exports
+          until: run_exports is succeeded
+
+    - name: NFS service restart service on Ubuntu
+      become: true
+      when: storage == true and ansible_distribution == 'Ubuntu'
+      systemd_service:
+        name: nfs-kernel-server
+        state: restarted
+        daemon_reload: yes
+      retries: 5
+      delay: 5
+      register: restart_nfs_ubuntu
+      until: restart_nfs_ubuntu is succeeded
+
+    - name: NFS Service restart service on RHEL
+      become: true
+      when: storage == true and ansible_distribution == 'RedHat'
+      systemd_service:
+        name: nfs-server
+        state: restarted
+        daemon_reload: yes
+      retries: 5
+      delay: 5
+      register: restart_nfs_rhel
+      until: restart_nfs_rhel is succeeded
+
+    - name: Install NFS External Provisioner
+      when: storage == true
+      shell: |
+        helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner --force-update
+        helm repo update
+        helm install --version {{ nfs_provisioner }} nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --set nfs.server={{ ansible_default_ipv4.address }} --set nfs.path=/data/nfs --set storageClass.archiveOnDelete=false --create-namespace --namespace nfs-client
+        sleep 10
+        kubectl patch storageclass nfs-client -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
+      retries: 5
+      delay: 5
+      register: install_nfs_provisioner
+      until: install_nfs_provisioner is succeeded
+
+    - name: Copy files
+      when: monitoring == true
+      copy:
+        src: "{{ item }}"
+        dest: "{{ ansible_user_dir }}/"
+      with_fileglob:
+        - "{{lookup('pipe', 'pwd')}}/files/grafana.yaml"
+        - "{{lookup('pipe', 'pwd')}}/files/kube-prometheus-stack.values"
+        - "{{lookup('pipe', 'pwd')}}/files/fluent-values.yaml"
+      retries: 5
+      delay: 5
+      register: copy_monitoring_files
+      until: copy_monitoring_files is succeeded
+
+    - name: Install Kserve on Kubernetes
+      when: kserve == true
+      retries: 5
+      delay: 5
+      until: kserve_check.stdout == 'Successfully installed KServe'
+      shell: curl -s "https://raw.githubusercontent.com/kserve/kserve/release-{{ kserve_version }}/hack/quick_install.sh" | bash > /tmp/kserve-install.log; cat /tmp/kserve-install.log | tail -1f | cut -d " " -f2-
+      register: kserve_check
+      failed_when: false
+      ignore_errors: true
+
+    - name: Apply Nginx IngressClass Name for Kserve
+      when: kserve == true
+      shell: |
+        kubectl apply -f - <<EOF
+        apiVersion: networking.k8s.io/v1
+        kind: IngressClass
+        metadata:
+          name: nginx
+        spec:
+          controller: istio.io/ingress-controller
+        EOF
+      retries: 5
+      delay: 5
+      register: apply_ingress_config
+      until: apply_ingress_config is succeeded
+
+    - name: Install MetalLB
+      shell: "kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v{{ metallb_version }}/config/manifests/metallb-native.yaml; sleep 45"
+      when: loadbalancer == true
+      retries: 5
+      delay: 5
+      register: install_metallb
+      until: install_metallb is succeeded
+
+    - name: Get Host IP
+      shell: interface=$(ip a | grep 'state UP' |  egrep 'enp*|ens*|eno*|enc*|eth*|bond*|wlan*' | awk '{print $2}' | sed 's/://g'); for i in $interface; do ifconfig $i | grep -iw inet | awk '{print $2}'; done
+      register: network
+      retries: 5
+      delay: 5
+      until: network is succeeded
+
+    - name: Local IP
+      set_fact:
+        load_balancer_ip: "{% if loadbalancer_ip == '' %}{{ network.stdout_lines[0] }}/32{%elif loadbalancer_ip != '' %}{{ loadbalancer_ip }}{% endif %}"
+
+    - name: Apply Layer2 Config for MetalLB
+      when: loadbalancer == true
+      shell: |
+        kubectl apply -f - <<EOF
+        apiVersion: metallb.io/v1beta1
+        kind: IPAddressPool
+        metadata:
+          name: first-pool
+          namespace: metallb-system
+        spec:
+          addresses:
+          - {{  load_balancer_ip }}
+        ---
+        apiVersion: metallb.io/v1beta1
+        kind: L2Advertisement
+        metadata:
+          name: example
+          namespace: metallb-system
+        spec:
+          ipAddressPools:
+          - first-pool
+        EOF
+      retries: 5
+      delay: 5
+      register: apply_metallb_config
+      until: apply_metallb_config is succeeded
+
+    - name: Install Elastic Stack
+      ignore_errors: true
+      failed_when: false
+      shell: "{{ item }}"
+      when: monitoring == true
+      with_items:
+        - helm repo add elastic https://helm.elastic.co
+        - helm repo add fluent https://fluent.github.io/helm-charts/
+        - helm repo update
+        - helm install elastic-operator elastic/eck-operator -n elastic-system --create-namespace
+        - sleep 5
+        - kubectl create ns monitoring
+      retries: 5
+      delay: 5
+      register: install_elastic_stack
+      until: install_elastic_stack is succeeded
+
+    - name: Apply Elastic Config
+      ignore_errors: true
+      when:  monitoring == true
+      shell: |
+        kubectl apply -f - <<EOF
+        apiVersion: elasticsearch.k8s.elastic.co/v1
+        kind: Elasticsearch
+        metadata:
+          name: cloud-native
+          namespace: monitoring
+        spec:
+          version: {{ elastic_stack }}
+          nodeSets:
+          - name: default
+            count: 1
+            volumeClaimTemplates:
+            - metadata:
+                name: elasticsearch-data # Do not change this name unless you set up a volume mount for the data path.
+              spec:
+                accessModes:
+                - ReadWriteOnce
+                resources:
+                  requests:
+                    storage: 5Gi
+                storageClassName: local-path
+            config:
+              node.store.allow_mmap: false
+        ---
+        apiVersion: kibana.k8s.elastic.co/v1
+        kind: Kibana
+        metadata:
+          name: cloud-native
+          namespace: monitoring
+        spec:
+          version: {{ elastic_stack }}
+          count: 1
+          http:
+            service:
+              spec:
+                type: NodePort
+          elasticsearchRef:
+            name: cloud-native
+        EOF
+      retries: 5
+      delay: 5
+      register: apply_elastic_config
+      until: apply_elastic_config is succeeded
+
+    - name: Install Fluent Bit
+      shell: "{{ item }}"
+      when: monitoring == true
+      ignore_errors: true
+      failed_when: false
+      with_items:
+        - sleep 10
+        - "kubectl get secrets -n monitoring cloud-native-es-elastic-user -o yaml | sed \"s/  elastic: .*/  elastic: Y25zLXN0YWNr/g\"  | kubectl apply -f -"
+        - kubectl delete pod $(kubectl get pod -n monitoring | grep cloud-native | awk '{print $1}') -n monitoring --force
+        - "helm install -f {{ ansible_user_dir }}/fluent-values.yaml fluent/fluent-bit -n monitoring --generate-name"
+        - "curl -u 'elastic:cns-stack' -X POST -k \"https://$(kubectl get svc -n monitoring | grep cloud-native-kb-http | awk '{print $3}'):5601/api/data_views/data_view\" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d' {  \"data_view\": { \"title\": \"logs*\", \"name\": \"My Logs\"}}'"
+        - kubectl patch svc $(kubectl get svc -n monitoring | grep cloud-native-kb-http | awk '{print $1}') --type='json' -p '[{"op":"replace","path":"/spec/type","value":"NodePort"},{"op":"replace","path":"/spec/ports/0/nodePort","value":32221}]' -n monitoring
+      retries: 5
+      delay: 5
+      register: install_fluent_bit
+      until: install_fluent_bit is succeeded
+
+    - name: Install Prometheus Stack on NVIDIA Cloud Native Stack
+      ignore_errors: true
+      when: monitoring == true
+      block:
+        - name: Add Prometheus Helm repository
+          shell: helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
+          register: helm_repo_add
+          retries: 5
+          delay: 5
+          until: helm_repo_add is succeeded
+
+        - name: Update Helm repositories
+          shell: helm repo update
+          when: helm_repo_add.rc == 0
+          retries: 5
+          delay: 5
+          register: update_helm_repos
+          until: update_helm_repos is succeeded
+
+        - name: Install Prometheus
+          shell: "helm install kube-prometheus-stack --version {{ prometheus_stack }} prometheus-community/kube-prometheus-stack --create-namespace --namespace monitoring --values  {{ ansible_user_dir }}/kube-prometheus-stack.values"
+          when: helm_repo_add.rc == 0
+          retries: 5
+          delay: 5
+          register: install_prometheus
+          until: install_prometheus is succeeded
+
+        - name: Install Grafana Operator
+          shell: "helm upgrade -i grafana-operator oci://ghcr.io/grafana/helm-charts/grafana-operator --version {{ grafana_operator }} -n monitoring"
+          retries: 5
+          delay: 5
+          register: install_grafana_operator
+          until: install_grafana_operator is succeeded
+
+        - name: Apply Grafana configuration
+          shell: kubectl apply -f {{ ansible_user_dir }}/grafana.yaml -n monitoring
+          retries: 5
+          delay: 5
+          register: apply_grafana_config
+          until: apply_grafana_config is succeeded
+
+        - name: Install Prometheus Adapter
+          shell: "helm install --version {{ prometheus_adapter }} prometheus-adapter prometheus-community/prometheus-adapter --namespace monitoring --set prometheus.url=http://kube-prometheus-stack-prometheus.monitoring,prometheus.port=9090"
+          when: helm_repo_add.rc == 0
+          retries: 5
+          delay: 5
+          register: install_prometheus_adapter
+          until: install_prometheus_adapter is succeeded
+
+        - name: Apply Metrics Server configuration
+          shell: kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
+          retries: 5
+          delay: 5
+          register: apply_metrics_server
+          until: apply_metrics_server is succeeded
+
+        - name: Patch Metrics Server Deployment
+          shell: "kubectl patch deployment metrics-server -n kube-system --type='json' -p='[{\"op\": \"add\", \"path\": \"/spec/template/spec/containers/0/args/-\", \"value\": \"--kubelet-insecure-tls\"}]'"
+          retries: 5
+          delay: 5
+          register: patch_metrics_server
+          until: patch_metrics_server is succeeded
+
+        - name: Patch Cluster Policy for DCGM Exporter
+          shell: "kubectl patch clusterpolicy/cluster-policy --type='json' -p='[{\"op\": \"replace\", \"path\": \"/spec/dcgmExporter/serviceMonitor/enabled\", \"value\": true}]'"
+          retries: 5
+          delay: 5
+          register: patch_cluster_policy
+          until: patch_cluster_policy is succeeded
+
+        - name: Delete DCGM Pod
+          shell: kubectl delete pod $(kubectl get pods -n nvidia-gpu-operator | grep dcgm | awk '{print $1}') -n nvidia-gpu-operator --force
+          retries: 5
+          delay: 5
+          register: delete_dcgm_pod
+          until: delete_dcgm_pod is succeeded
+
+    - name: Install LeaderWorkerSet on NVIDIA Cloud Native Stack
+      ignore_errors: true
+      failed_when: false
+      shell: "kubectl apply --server-side -f https://github.com/kubernetes-sigs/lws/releases/download/v{{ lws_version }}/manifests.yaml"
+      when: lws == true
+      retries: 5
+      delay: 5
+      register: install_lws
+      until: install_lws is succeeded
\ No newline at end of file
diff --git a/playbooks/cns_values.yaml b/playbooks/cns_values.yaml
index 08c2e3e3..43d4a869 100644
--- a/playbooks/cns_values.yaml
+++ b/playbooks/cns_values.yaml
@@ -1,4 +1,4 @@
-cns_version: 15.1
+cns_version: 16.1
 
 ## MicroK8s cluster
 microk8s: no
@@ -6,37 +6,39 @@ microk8s: no
 install_k8s: yes
 
 ## Components Versions
-# Container Runtime options are containerd, cri-o, cri-dockerd
+# Container Runtime options are containerd, cri-o
 container_runtime: "containerd"
-containerd_version: "2.1.3"
-runc_version: "1.3.0"
+containerd_version: "2.2.0"
+runc_version: "1.4.0"
 cni_plugins_version: "1.7.1"
 containerd_max_concurrent_downloads: "5"
-nvidia_container_toolkit_version: "1.17.8"
-crio_version: "1.32.6"
-cri_dockerd_version: "0.3.18"
-k8s_version: "1.32.6"
-calico_version: "3.30.2"
+nvidia_container_toolkit_version: "1.18.1"
+crio_version: "1.33.6"
+cri_dockerd_version: "0.4.0"
+k8s_version: "1.33.6"
+calico_version: "3.31.3"
 flannel_version: "0.25.6"
-helm_version: "3.18.3"
-gpu_operator_version: "25.3.4"
-network_operator_version: "25.4.0"
-nim_operator_version: "2.0.1"
+helm_version: "4.0.4"
+gpu_operator_version: "25.10.1"
+network_operator_version: "25.7.0"
+nim_operator_version: "3.0.2"
 nsight_operator_version: "1.1.2"
+kai_scheduler_version: "0.10.2"
 local_path_provisioner: "0.0.31"
 nfs_provisioner: "4.0.18"
-metallb_version: "0.15.2"
-kserve_version: "0.15"
-prometheus_stack: "75.9.0"
-prometheus_adapter: "4.14.1"
-grafana_operator: "v5.18.0"
-elastic_stack: "9.0.0"
-lws_version: "0.6.2"
+metallb_version: "0.15.3"
+kserve_version: "0.16.0"
+prometheus_stack: "79.9.0"
+prometheus_adapter: "5.2.0"
+grafana_operator: "5.18.0"
+elastic_stack: "9.2.1"
+lws_version: "0.7.0"
+volcano_version: "1.13.0"
 
 # GPU Operator Values
 enable_gpu_operator: yes
 confidential_computing: no
-gpu_driver_version: "580.82.07"
+gpu_driver_version: "580.105.08"
 use_open_kernel_module: no
 enable_mig: no
 mig_profile: all-disabled
@@ -83,11 +85,14 @@ cns_nvidia_driver: no
 nvidia_driver_mig: no
 
 ## Kubernetes resources
-k8s_apt_key: "https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key"
-k8s_gpg_key: "https://pkgs.k8s.io/core:/stable:/v1.32/rpm/repodata/repomd.xml.key"
+k8s_apt_key: "https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key"
+k8s_gpg_key: "https://pkgs.k8s.io/core:/stable:/v1.33/rpm/repodata/repomd.xml.key"
 k8s_apt_ring: "/etc/apt/keyrings/kubernetes-apt-keyring.gpg"
 k8s_registry: "registry.k8s.io"
 
+# Enable NVIDIA Kubernetes AI Scheduler
+enable_kai_scheduler: no
+
 # Enable NVIDIA NSight Operator
 enable_nsight_operator: no
 
@@ -110,6 +115,10 @@ kserve: no
 loadbalancer: no
 # Example input loadbalancer_ip: "10.78.17.85/32"
 loadbalancer_ip: ""
+kubernetes_host_ip: ""
+
+# Enable Volcano Scheduler
+volcano: no
 
 ## Cloud Native Stack Validation
 cns_validation: no
diff --git a/playbooks/cns_values_15.0.yaml b/playbooks/cns_values_15.0.yaml
index 04dcf30d..9fcf9bfb 100644
--- a/playbooks/cns_values_15.0.yaml
+++ b/playbooks/cns_values_15.0.yaml
@@ -29,7 +29,7 @@ metallb_version: "0.14.9"
 kserve_version: "0.15"
 prometheus_stack: "70.3.0"
 prometheus_adapter: "4.13.0"
-grafana_operator: "v5.17.0"
+grafana_operator: "5.17.0"
 elastic_stack: "8.17.4"
 lws_version: "0.5.1"
 
@@ -88,6 +88,18 @@ k8s_gpg_key: "https://pkgs.k8s.io/core:/stable:/v1.32/rpm/repodata/repomd.xml.ke
 k8s_apt_ring: "/etc/apt/keyrings/kubernetes-apt-keyring.gpg"
 k8s_registry: "registry.k8s.io"
 
+# Enable NVIDIA Kubernetes AI Scheduler
+enable_kai_scheduler: no
+
+#Enable Dynamic Resource Allocation(DRA) Driver
+enable_dra_driver: no
+
+# Enable Dynamo Cloud
+enable_dynamo_cloud: no
+
+# Enable Volcano Scheduler
+volcano: no
+
 # Enable NVIDIA NSight Operator
 enable_nsight_operator: no
 
@@ -110,6 +122,7 @@ kserve: no
 loadbalancer: no
 # Example input loadbalancer_ip: "10.78.17.85/32"
 loadbalancer_ip: ""
+kubernetes_host_ip: ""
 
 ## Cloud Native Stack Validation
 cns_validation: no
diff --git a/playbooks/cns_values_15.1.yaml b/playbooks/cns_values_15.1.yaml
index 08c2e3e3..e36e245c 100644
--- a/playbooks/cns_values_15.1.yaml
+++ b/playbooks/cns_values_15.1.yaml
@@ -22,6 +22,7 @@ helm_version: "3.18.3"
 gpu_operator_version: "25.3.4"
 network_operator_version: "25.4.0"
 nim_operator_version: "2.0.1"
+kai_scheduler_version: "0.9.7"
 nsight_operator_version: "1.1.2"
 local_path_provisioner: "0.0.31"
 nfs_provisioner: "4.0.18"
@@ -29,9 +30,10 @@ metallb_version: "0.15.2"
 kserve_version: "0.15"
 prometheus_stack: "75.9.0"
 prometheus_adapter: "4.14.1"
-grafana_operator: "v5.18.0"
+grafana_operator: "5.18.0"
 elastic_stack: "9.0.0"
-lws_version: "0.6.2"
+lws_version: "0.6.3"
+volcano_version: "1.13.0"
 
 # GPU Operator Values
 enable_gpu_operator: yes
@@ -88,6 +90,9 @@ k8s_gpg_key: "https://pkgs.k8s.io/core:/stable:/v1.32/rpm/repodata/repomd.xml.ke
 k8s_apt_ring: "/etc/apt/keyrings/kubernetes-apt-keyring.gpg"
 k8s_registry: "registry.k8s.io"
 
+# Enable NVIDIA Kubernetes AI Scheduler
+enable_kai_scheduler: no
+
 # Enable NVIDIA NSight Operator
 enable_nsight_operator: no
 
@@ -110,6 +115,10 @@ kserve: no
 loadbalancer: no
 # Example input loadbalancer_ip: "10.78.17.85/32"
 loadbalancer_ip: ""
+kubernetes_host_ip: ""
+
+# Enable Volcano Scheduler
+volcano: no
 
 ## Cloud Native Stack Validation
 cns_validation: no
diff --git a/playbooks/cns_values_15.2.yaml b/playbooks/cns_values_15.2.yaml
new file mode 100644
index 00000000..3c5a4e59
--- /dev/null
+++ b/playbooks/cns_values_15.2.yaml
@@ -0,0 +1,150 @@
+cns_version: 15.1
+
+## MicroK8s cluster
+microk8s: no
+## Kubernetes Install with Kubeadm
+install_k8s: yes
+
+## Components Versions
+# Container Runtime options are containerd, cri-o
+container_runtime: "containerd"
+containerd_version: "2.2.0"
+runc_version: "1.4.0"
+cni_plugins_version: "1.7.1"
+containerd_max_concurrent_downloads: "5"
+nvidia_container_toolkit_version: "1.18.1"
+crio_version: "1.32.10"
+cri_dockerd_version: "0.4.0"
+k8s_version: "1.32.10"
+calico_version: "3.31.3"
+flannel_version: "0.25.6"
+helm_version: "4.0.4"
+gpu_operator_version: "25.10.1"
+network_operator_version: "25.7.0"
+nim_operator_version: "3.0.2"
+kai_scheduler_version: "0.10.2"
+nsight_operator_version: "1.1.2"
+local_path_provisioner: "0.0.31"
+nfs_provisioner: "4.0.18"
+metallb_version: "0.15.3"
+kserve_version: "0.16.0"
+prometheus_stack: "79.9.0"
+prometheus_adapter: "5.2.0"
+grafana_operator: "5.18.0"
+elastic_stack: "9.2.1"
+lws_version: "0.7.0"
+volcano_version: "1.13.0"
+
+# GPU Operator Values
+enable_gpu_operator: yes
+confidential_computing: no
+gpu_driver_version: "580.105.08"
+use_open_kernel_module: no
+enable_mig: no
+mig_profile: all-disabled
+mig_strategy: single
+# To use GDS, use_open_kernel_module needs to be enabled
+enable_gds: no
+#Secure Boot for only Ubuntu
+enable_secure_boot: no
+enable_cdi: no
+enable_vgpu: no
+vgpu_license_server: ""
+# URL of Helm repo to be added. If using NGC get this from the fetch command in the console
+helm_repository: "https://helm.ngc.nvidia.com/nvidia"
+# Name of the helm chart to be deployed
+gpu_operator_helm_chart: nvidia/gpu-operator
+## This is most likely GPU Operator Driver Registry
+gpu_operator_driver_registry: "nvcr.io/nvidia"
+
+# NGC Values
+## If using a private/protected registry. NGC API Key. Leave blank for public registries
+ngc_registry_password: ""
+## This is most likely an NGC email
+ngc_registry_email: ""
+ngc_registry_username: "$oauthtoken"
+
+# Network Operator Values
+## If the Network Operator is yes then make sure enable_rdma as well yes
+enable_network_operator: no
+## Enable RDMA yes for NVIDIA Certification
+enable_rdma: no
+## Enable for MLNX-OFED Driver Deployment
+deploy_ofed: no
+
+# Prxoy Configuration
+proxy: no
+http_proxy: ""
+https_proxy: ""
+
+# Cloud Native Stack for Developers Values
+## Enable for Cloud Native Stack Developers
+cns_docker: no
+## Enable For Cloud Native Stack Developers with TRD Driver
+cns_nvidia_driver: no
+nvidia_driver_mig: no
+
+## Kubernetes resources
+k8s_apt_key: "https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key"
+k8s_gpg_key: "https://pkgs.k8s.io/core:/stable:/v1.32/rpm/repodata/repomd.xml.key"
+k8s_apt_ring: "/etc/apt/keyrings/kubernetes-apt-keyring.gpg"
+k8s_registry: "registry.k8s.io"
+
+# Enable NVIDIA Kubernetes AI Scheduler
+enable_kai_scheduler: no
+
+# Enable NVIDIA NSight Operator
+enable_nsight_operator: no
+
+# Install NVIDIA NIM Operator
+enable_nim_operator: no
+
+# LeaderWorkerSet https://github.com/kubernetes-sigs/lws/tree/main
+lws: no
+
+# Local Path Provisioner and NFS Provisoner as Storage option
+storage: no
+
+# Monitoring Stack Prometheus/Grafana with GPU Metrics and Elastic Logging stack
+monitoring: no
+
+# Enable Kserve on Cloud Native Stack with Istio and Cert-Manager
+kserve: no
+
+# Install MetalLB
+loadbalancer: no
+# Example input loadbalancer_ip: "10.78.17.85/32"
+loadbalancer_ip: ""
+kubernetes_host_ip: ""
+
+# Enable Volcano Scheduler
+volcano: no
+
+## Cloud Native Stack Validation
+cns_validation: no
+
+# BMC Details for Confidential Computing
+bmc_ip:
+bmc_username:
+bmc_password:
+
+# CSP values
+## AWS EKS values
+aws_region: us-east-2
+aws_cluster_name: cns-cluster-1
+aws_gpu_instance_type: g4dn.2xlarge
+
+## Google Cloud GKE Values
+#https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects
+gke_project_id:
+#https://cloud.google.com/compute/docs/regions-zones#available
+gke_region: us-west1
+gke_node_zones: ["us-west1-b"]
+gke_cluster_name: gke-cluster-1
+
+## Azure AKS Values
+aks_cluster_name: aks-cluster-1
+#https://azure.microsoft.com/en-us/explore/global-infrastructure/geographies/#geographies
+aks_cluster_location: "West US 2"
+#https://learn.microsoft.com/en-us/partner-center/marketplace/find-tenant-object-id
+azure_object_id: [""]
\ No newline at end of file
diff --git a/playbooks/cns_values_16.0.yaml b/playbooks/cns_values_16.0.yaml
index 5d820f1f..b25f7036 100644
--- a/playbooks/cns_values_16.0.yaml
+++ b/playbooks/cns_values_16.0.yaml
@@ -22,6 +22,8 @@ helm_version: "3.18.3"
 gpu_operator_version: "25.3.4"
 network_operator_version: "25.4.0"
 nim_operator_version: "2.0.1"
+dra_driver_version: "25.8.0"
+kai_scheduler_version: "0.9.7"
 nsight_operator_version: "1.1.2"
 local_path_provisioner: "0.0.31"
 nfs_provisioner: "4.0.18"
@@ -29,9 +31,11 @@ metallb_version: "0.15.2"
 kserve_version: "0.15"
 prometheus_stack: "75.9.0"
 prometheus_adapter: "4.14.1"
-grafana_operator: "v5.18.0"
+grafana_operator: "5.18.0"
 elastic_stack: "9.0.0"
-lws_version: "0.6.2"
+lws_version: "0.6.3"
+dynamo_release_version: "0.6.0"
+volcano_version: "1.13.0"
 
 # GPU Operator Values
 enable_gpu_operator: yes
@@ -88,6 +92,9 @@ k8s_gpg_key: "https://pkgs.k8s.io/core:/stable:/v1.33/rpm/repodata/repomd.xml.ke
 k8s_apt_ring: "/etc/apt/keyrings/kubernetes-apt-keyring.gpg"
 k8s_registry: "registry.k8s.io"
 
+# Enable NVIDIA Kubernetes AI Scheduler
+enable_kai_scheduler: no
+
 # Enable NVIDIA NSight Operator
 enable_nsight_operator: no
 
@@ -110,6 +117,10 @@ kserve: no
 loadbalancer: no
 # Example input loadbalancer_ip: "10.78.17.85/32"
 loadbalancer_ip: ""
+kubernetes_host_ip: ""
+
+# Enable Volcano Scheduler
+volcano: no
 
 ## Cloud Native Stack Validation
 cns_validation: no
diff --git a/playbooks/cns_values_16.1.yaml b/playbooks/cns_values_16.1.yaml
new file mode 100644
index 00000000..43d4a869
--- /dev/null
+++ b/playbooks/cns_values_16.1.yaml
@@ -0,0 +1,150 @@
+cns_version: 16.1
+
+## MicroK8s cluster
+microk8s: no
+## Kubernetes Install with Kubeadm
+install_k8s: yes
+
+## Components Versions
+# Container Runtime options are containerd, cri-o
+container_runtime: "containerd"
+containerd_version: "2.2.0"
+runc_version: "1.4.0"
+cni_plugins_version: "1.7.1"
+containerd_max_concurrent_downloads: "5"
+nvidia_container_toolkit_version: "1.18.1"
+crio_version: "1.33.6"
+cri_dockerd_version: "0.4.0"
+k8s_version: "1.33.6"
+calico_version: "3.31.3"
+flannel_version: "0.25.6"
+helm_version: "4.0.4"
+gpu_operator_version: "25.10.1"
+network_operator_version: "25.7.0"
+nim_operator_version: "3.0.2"
+nsight_operator_version: "1.1.2"
+kai_scheduler_version: "0.10.2"
+local_path_provisioner: "0.0.31"
+nfs_provisioner: "4.0.18"
+metallb_version: "0.15.3"
+kserve_version: "0.16.0"
+prometheus_stack: "79.9.0"
+prometheus_adapter: "5.2.0"
+grafana_operator: "5.18.0"
+elastic_stack: "9.2.1"
+lws_version: "0.7.0"
+volcano_version: "1.13.0"
+
+# GPU Operator Values
+enable_gpu_operator: yes
+confidential_computing: no
+gpu_driver_version: "580.105.08"
+use_open_kernel_module: no
+enable_mig: no
+mig_profile: all-disabled
+mig_strategy: single
+# To use GDS, use_open_kernel_module needs to be enabled
+enable_gds: no
+#Secure Boot for only Ubuntu
+enable_secure_boot: no
+enable_cdi: no
+enable_vgpu: no
+vgpu_license_server: ""
+# URL of Helm repo to be added. If using NGC get this from the fetch command in the console
+helm_repository: "https://helm.ngc.nvidia.com/nvidia"
+# Name of the helm chart to be deployed
+gpu_operator_helm_chart: nvidia/gpu-operator
+## This is most likely GPU Operator Driver Registry
+gpu_operator_driver_registry: "nvcr.io/nvidia"
+
+# NGC Values
+## If using a private/protected registry. NGC API Key. Leave blank for public registries
+ngc_registry_password: ""
+## This is most likely an NGC email
+ngc_registry_email: ""
+ngc_registry_username: "$oauthtoken"
+
+# Network Operator Values
+## If the Network Operator is yes then make sure enable_rdma as well yes
+enable_network_operator: no
+## Enable RDMA yes for NVIDIA Certification
+enable_rdma: no
+## Enable for MLNX-OFED Driver Deployment
+deploy_ofed: no
+
+# Prxoy Configuration
+proxy: no
+http_proxy: ""
+https_proxy: ""
+
+# Cloud Native Stack for Developers Values
+## Enable for Cloud Native Stack Developers
+cns_docker: no
+## Enable For Cloud Native Stack Developers with TRD Driver
+cns_nvidia_driver: no
+nvidia_driver_mig: no
+
+## Kubernetes resources
+k8s_apt_key: "https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key"
+k8s_gpg_key: "https://pkgs.k8s.io/core:/stable:/v1.33/rpm/repodata/repomd.xml.key"
+k8s_apt_ring: "/etc/apt/keyrings/kubernetes-apt-keyring.gpg"
+k8s_registry: "registry.k8s.io"
+
+# Enable NVIDIA Kubernetes AI Scheduler
+enable_kai_scheduler: no
+
+# Enable NVIDIA NSight Operator
+enable_nsight_operator: no
+
+# Install NVIDIA NIM Operator
+enable_nim_operator: no
+
+# LeaderWorkerSet https://github.com/kubernetes-sigs/lws/tree/main
+lws: no
+
+# Local Path Provisioner and NFS Provisoner as Storage option
+storage: no
+
+# Monitoring Stack Prometheus/Grafana with GPU Metrics and Elastic Logging stack
+monitoring: no
+
+# Enable Kserve on Cloud Native Stack with Istio and Cert-Manager
+kserve: no
+
+# Install MetalLB
+loadbalancer: no
+# Example input loadbalancer_ip: "10.78.17.85/32"
+loadbalancer_ip: ""
+kubernetes_host_ip: ""
+
+# Enable Volcano Scheduler
+volcano: no
+
+## Cloud Native Stack Validation
+cns_validation: no
+
+# BMC Details for Confidential Computing
+bmc_ip:
+bmc_username:
+bmc_password:
+
+# CSP values
+## AWS EKS values
+aws_region: us-east-2
+aws_cluster_name: cns-cluster-1
+aws_gpu_instance_type: g4dn.2xlarge
+
+## Google Cloud GKE Values
+#https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects
+gke_project_id:
+#https://cloud.google.com/compute/docs/regions-zones#available
+gke_region: us-west1
+gke_node_zones: ["us-west1-b"]
+gke_cluster_name: gke-cluster-1
+
+## Azure AKS Values
+aks_cluster_name: aks-cluster-1
+#https://azure.microsoft.com/en-us/explore/global-infrastructure/geographies/#geographies
+aks_cluster_location: "West US 2"
+#https://learn.microsoft.com/en-us/partner-center/marketplace/find-tenant-object-id
+azure_object_id: [""]
\ No newline at end of file
diff --git a/playbooks/cns_values_17.0.yaml b/playbooks/cns_values_17.0.yaml
new file mode 100644
index 00000000..d4273570
--- /dev/null
+++ b/playbooks/cns_values_17.0.yaml
@@ -0,0 +1,151 @@
+cns_version: 17.0
+
+## MicroK8s cluster
+microk8s: no
+## Kubernetes Install with Kubeadm
+install_k8s: yes
+
+## Components Versions
+# Container Runtime options are containerd, cri-o
+container_runtime: "containerd"
+containerd_version: "2.2.0"
+runc_version: "1.4.0"
+cni_plugins_version: "1.7.1"
+containerd_max_concurrent_downloads: "5"
+nvidia_container_toolkit_version: "1.18.1"
+crio_version: "1.34.2"
+cri_dockerd_version: "0.4.0"
+k8s_version: "1.34.2"
+calico_version: "3.31.3"
+flannel_version: "0.25.6"
+helm_version: "4.0.4"
+gpu_operator_version: "25.10.1"
+network_operator_version: "25.7.0"
+nim_operator_version: "3.0.2"
+nsight_operator_version: "1.1.2"
+kai_scheduler_version: "0.10.2"
+local_path_provisioner: "0.0.31"
+nfs_provisioner: "4.0.18"
+metallb_version: "0.15.3"
+kserve_version: "0.16.0"
+prometheus_stack: "79.9.0"
+prometheus_adapter: "5.2.0"
+grafana_operator: "5.18.0"
+elastic_stack: "9.2.1"
+lws_version: "0.7.0"
+volcano_version: "1.13.0"
+
+# GPU Operator Values
+enable_gpu_operator: yes
+confidential_computing: no
+gpu_driver_version: "580.105.08"
+use_open_kernel_module: no
+enable_mig: no
+mig_profile: all-disabled
+mig_strategy: single
+# To use GDS, use_open_kernel_module needs to be enabled
+enable_gds: no
+#Secure Boot for only Ubuntu
+enable_secure_boot: no
+enable_cdi: no
+enable_vgpu: no
+vgpu_license_server: ""
+# URL of Helm repo to be added. If using NGC get this from the fetch command in the console
+helm_repository: "https://helm.ngc.nvidia.com/nvidia"
+# Name of the helm chart to be deployed
+gpu_operator_helm_chart: nvidia/gpu-operator
+## This is most likely GPU Operator Driver Registry
+gpu_operator_driver_registry: "nvcr.io/nvidia"
+
+# NGC Values
+## If using a private/protected registry. NGC API Key. Leave blank for public registries
+ngc_registry_password: ""
+## This is most likely an NGC email
+ngc_registry_email: ""
+ngc_registry_username: "$oauthtoken"
+
+# Network Operator Values
+## If the Network Operator is yes then make sure enable_rdma as well yes
+enable_network_operator: no
+## Enable RDMA yes for NVIDIA Certification
+enable_rdma: no
+## Enable for MLNX-OFED Driver Deployment
+deploy_ofed: no
+
+# Prxoy Configuration
+proxy: no
+http_proxy: ""
+https_proxy: ""
+
+# Cloud Native Stack for Developers Values
+## Enable for Cloud Native Stack Developers
+cns_docker: no
+## Enable For Cloud Native Stack Developers with TRD Driver
+cns_nvidia_driver: no
+nvidia_driver_mig: no
+
+## Kubernetes resources
+k8s_apt_key: "https://pkgs.k8s.io/core:/stable:/v1.34/deb/Release.key"
+k8s_gpg_key: "https://pkgs.k8s.io/core:/stable:/v1.34/rpm/repodata/repomd.xml.key"
+k8s_apt_ring: "/etc/apt/keyrings/kubernetes-apt-keyring.gpg"
+k8s_registry: "registry.k8s.io"
+
+# Enable NVIDIA Kubernetes AI Scheduler
+enable_kai_scheduler: no
+
+# Enable NVIDIA NSight Operator
+enable_nsight_operator: no
+
+# Install NVIDIA NIM Operator
+enable_nim_operator: no
+
+# LeaderWorkerSet https://github.com/kubernetes-sigs/lws/tree/main
+lws: no
+
+# Local Path Provisioner and NFS Provisoner as Storage option
+storage: no
+
+# Monitoring Stack Prometheus/Grafana with GPU Metrics and Elastic Logging stack
+monitoring: no 
+
+# Enable Kserve on Cloud Native Stack with Istio and Cert-Manager
+kserve: no
+
+
+# Install MetalLB
+loadbalancer: no
+# Example input loadbalancer_ip: "10.78.17.85/32"
+loadbalancer_ip: ""
+kubernetes_host_ip: ""
+
+# Enable Volcano Scheduler
+volcano: no
+
+## Cloud Native Stack Validation
+cns_validation: no
+
+# BMC Details for Confidential Computing
+bmc_ip:
+bmc_username:
+bmc_password:
+
+# CSP values
+## AWS EKS values
+aws_region: us-east-2
+aws_cluster_name: cns-cluster-1
+aws_gpu_instance_type: g4dn.2xlarge
+
+## Google Cloud GKE Values
+#https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects
+gke_project_id:
+#https://cloud.google.com/compute/docs/regions-zones#available
+gke_region: us-west1
+gke_node_zones: ["us-west1-b"]
+gke_cluster_name: gke-cluster-1
+
+## Azure AKS Values
+aks_cluster_name: aks-cluster-1
+#https://azure.microsoft.com/en-us/explore/global-infrastructure/geographies/#geographies
+aks_cluster_location: "West US 2"
+#https://learn.microsoft.com/en-us/partner-center/marketplace/find-tenant-object-id
+azure_object_id: [""]
\ No newline at end of file
diff --git a/playbooks/cns_version.yaml b/playbooks/cns_version.yaml
index 602d2f16..6adfa8e4 100755
--- a/playbooks/cns_version.yaml
+++ b/playbooks/cns_version.yaml
@@ -1 +1 @@
-cns_version: 15.1
\ No newline at end of file
+cns_version: 16.1
\ No newline at end of file
diff --git a/playbooks/files/grafana.yaml b/playbooks/files/grafana.yaml
index 3f49dc7a..3706e47d 100644
--- a/playbooks/files/grafana.yaml
+++ b/playbooks/files/grafana.yaml
@@ -45,7 +45,7 @@ spec:
         - name: grafana
           port: 3000
           nodePort: 32222
-  version: 11.2.0
+  version: 12.2.1
 
 ---
 apiVersion: grafana.integreatly.org/v1beta1
diff --git a/playbooks/gpu_operator.yaml b/playbooks/gpu_operator.yaml
index 8514d3a6..12b23d41 100644
--- a/playbooks/gpu_operator.yaml
+++ b/playbooks/gpu_operator.yaml
@@ -1,3 +1,16 @@
+release_25_10_1:
+  gpu_operator_version: v25.10.1
+  gpu_driver_version: 580.105.08
+  driver_manager_version: 0.10.0
+  container_toolkit: v1.18.0
+  device_plugin: v0.18.0
+  dcgm_exporter_version: 4.4.1-4.6.0
+  nfd_version: v0.18.3
+  gfd_version: v0.18.1
+  mig_manager_version: v0.14.0
+  dcgm_version: 4.2.3-1
+  validator_version: v25.10.1
+  gds_driver: 2.20.5
 release_25_3_4:
   gpu_operator_version: v25.3.4
   gpu_driver_version: 580.82.07
diff --git a/playbooks/k8s-install.yaml b/playbooks/k8s-install.yaml
index cc0760af..0a5dc14f 100755
--- a/playbooks/k8s-install.yaml
+++ b/playbooks/k8s-install.yaml
@@ -259,6 +259,14 @@
      register: set_subnet
      until: set_subnet is succeeded
 
+   - name: Kubernetes Host IP
+     set_fact:
+       kubernetes_host_ip: "{% if kubernetes_host_ip == '' %}{{ network.stdout_lines[0] }}{% else %}{{ kubernetes_host_ip }}{% endif %}"
+     retries: 5
+     delay: 5
+     register: set_kubernetes_host_ip
+     until: set_kubernetes_host_ip is succeeded
+     
    - name: CRI Socket
      set_fact:
        cri_socket: "{% if container_runtime == 'containerd' %}unix:///run/containerd/containerd.sock{% elif container_runtime == 'cri-o' %}unix:///var/run/crio/crio.sock{%elif container_runtime == 'cri-dockerd' %}unix:///run/cri-dockerd.sock{% endif %}"
@@ -267,24 +275,33 @@
      register: set_cri_socket
      until: set_cri_socket is succeeded
 
-   - name: Iniitialize the Kubernetes cluster using kubeadm and containerd for Cloud Native Stack
-     block:
-       - name: Generate kubeadm init config
-         template:
-           src: kubeadm-init-config.template
-           dest: /tmp/kubeadm-init-config.yaml
-         retries: 5
-         delay: 5
-         register: generate_kubeadm_config
-         until: generate_kubeadm_config is succeeded
-
-       - name: Run kubeadm init
-         command: 'kubeadm init --config=/tmp/kubeadm-init-config.yaml'
-         become: true
-         register: kubeadm
-         retries: 5
-         delay: 5
-         until: kubeadm is succeeded
+   - name: Generate kubeadm init config
+     when: "cns_version >= 16.0"
+     template:
+       src: kubeadm-init-config-new.template
+       dest: /tmp/kubeadm-init-config.yaml
+     retries: 5
+     delay: 5
+     register: generate_kubeadm_config
+     until: generate_kubeadm_config is succeeded
+
+   - name: Generate kubeadm init config
+     when: "cns_version < 16.0"
+     template:
+       src: kubeadm-init-config.template
+       dest: /tmp/kubeadm-init-config.yaml
+     retries: 5
+     delay: 5
+     register: generate_kubeadm_config
+     until: generate_kubeadm_config is succeeded
+
+   - name: Run kubeadm init
+     command: 'kubeadm init --config=/tmp/kubeadm-init-config.yaml'
+     become: true
+     register: kubeadm
+     retries: 5
+     delay: 5
+     until: kubeadm is succeeded
 
    - name: Create kube directory
      file:
@@ -321,36 +338,21 @@
 
    - name: Install networking plugin to kubernetes cluster on NVIDIA Cloud Native Stack
      when: "cns_version >= 7.1 and release != 'tegra' or cns_version == 6.4 and release != 'tegra'"
-     command: "kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v{{ calico_version }}/manifests/calico.yaml"
+     shell: |
+        curl -s https://raw.githubusercontent.com/projectcalico/calico/v{{ calico_version }}/manifests/calico.yaml | sed 's/192.168.0.0\/16/192.168.32.0\/22/g' | kubectl apply -f -
      retries: 5
      delay: 5
      register: install_networking_plugin_calico
      until: install_networking_plugin_calico is succeeded
 
-   - name: Install networking plugin to kubernetes cluster on NVIDIA Cloud Native Stack
-     when: "cns_version <= 6.3 and ansible_distribution_major_version == '20' and release != 'tegra' or cns_version == 7.0 and release != 'tegra' and ansible_distribution_major_version == '22'"
-     command: "kubectl apply -f https://projectcalico.docs.tigera.io/archive/v{{ calico_version }}/manifests/calico.yaml"
-     retries: 5
-     delay: 5
-     register: install_networking_plugin_calico_old
-     until: install_networking_plugin_calico_old is succeeded
-
    - name: Update Network plugin for Calico on NVIDIA Cloud Native Stack
      when: "cns_version >= 3.1 and release != 'tegra'"
-     shell: "sleep 5; kubectl set env daemonset/calico-node -n kube-system IP_AUTODETECTION_METHOD=interface=ens*,eth*,enc*,bond*,enp*,eno*"
+     shell: "sleep 25; kubectl set env daemonset/calico-node -n kube-system IP_AUTODETECTION_METHOD=interface=ens*,eth*,enc*,bond*,enp*,eno*"
      retries: 5
      delay: 5
      register: update_network_plugin_calico
      until: update_network_plugin_calico is succeeded
 
-   - name: Install networking plugin to kubernetes cluster on NVIDIA Cloud Native Stack
-     when: "release == 'tegra'"
-     command: "kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v{{ flannel_version }}/Documentation/kube-flannel.yml"
-     retries: 5
-     delay: 5
-     register: install_networking_plugin_flannel
-     until: install_networking_plugin_flannel is succeeded
-
    - name: Taint the Kubernetes Control Plane node
      failed_when: false
      command: kubectl taint nodes --all node-role.kubernetes.io/control-plane-
diff --git a/playbooks/microk8s.yaml b/playbooks/microk8s.yaml
index 9d72d9cd..1ac5659f 100644
--- a/playbooks/microk8s.yaml
+++ b/playbooks/microk8s.yaml
@@ -230,11 +230,15 @@
 
   - name: Installing the GPU Operator on NVIDIA Cloud Native Stack
     when: "release != 'tegra' and confidential_computing == false and enable_gpu_operator == true and cns_docker == false and cns_nvidia_driver == false and use_open_kernel_module == false and enable_mig == false and enable_rdma == false and enable_vgpu == false and enable_gds == false and enable_secure_boot == false and ngc_registry_password == ''"
-    shell: "microk8s.helm install --version {{ gpu_operator_version }} gpu-operator -n nvidia-gpu-operator --create-namespace nvidia/gpu-operator --set toolkit.env[0].name=CONTAINERD_CONFIG  --set toolkit.env[0].value=/var/snap/microk8s/current/args/containerd-template.toml  --set toolkit.env[1].name=CONTAINERD_SOCKET  --set toolkit.env[1].value=/var/snap/microk8s/common/run/containerd.sock --set toolkit.env[2].name=CONTAINERD_RUNTIME_CLASS --set toolkit.env[2].value=nvidia  --set toolkit.env[3].name=CONTAINERD_SET_AS_DEFAULT  --set-string toolkit.env[3].value=true --set driver.repository='{{ gpu_operator_driver_registry }}',driver.version='{{ gpu_driver_version }}'"
+    shell: "microk8s.helm install gpu-operator -n gpu-operator --create-namespace nvidia/gpu-operator --version=v{{ gpu_operator_version }} --set toolkit.env[0].name=CONTAINERD_CONFIG --set toolkit.env[0].value=/var/snap/microk8s/current/args/containerd-template.toml --set toolkit.env[1].name=CONTAINERD_SOCKET --set toolkit.env[1].value=/var/snap/microk8s/common/run/containerd.sock --set toolkit.env[2].name=RUNTIME_CONFIG_SOURCE --set-string toolkit.env[2].value=file=/var/snap/microk8s/current/args/containerd.toml --set driver.version='{{ gpu_driver_version }}'"
+
+  - name: Installing the GPU Operator on NVIDIA Cloud Native Stack Developer with NVIDIA Docker only
+    when: "release != 'tegra' and confidential_computing == false and enable_gpu_operator == true and cns_docker == true and cns_nvidia_driver == false and use_open_kernel_module == false and enable_mig == false and enable_rdma == false and enable_vgpu == false and enable_gds == false and enable_secure_boot == false and ngc_registry_password == ''"
+    shell: "microk8s.helm install gpu-operator -n gpu-operator --create-namespace nvidia/gpu-operator --version=v{{ gpu_operator_version }} --set toolkit.env[0].name=CONTAINERD_CONFIG --set toolkit.env[0].value=/var/snap/microk8s/current/args/containerd-template.toml --set toolkit.env[1].name=CONTAINERD_SOCKET --set toolkit.env[1].value=/var/snap/microk8s/common/run/containerd.sock --set toolkit.env[2].name=RUNTIME_CONFIG_SOURCE --set-string toolkit.env[2].value=file=/var/snap/microk8s/current/args/containerd.toml --set driver.version='{{ gpu_driver_version }}'"
 
   - name: Installing the GPU Operator on NVIDIA Cloud Native Stack Developer
     when: "release != 'tegra' and confidential_computing == false and enable_gpu_operator == true and cns_docker == true and cns_nvidia_driver == true  and use_open_kernel_module == false and enable_mig == false and enable_rdma == false and enable_vgpu == false and enable_gds == false and enable_secure_boot == false and ngc_registry_password == ''"
-    shell: "microk8s.helm install --version {{ gpu_operator_version }} gpu-operator -n nvidia-gpu-operator --create-namespace nvidia/gpu-operator --set driver.enabled=false,toolkit.enabled=false"
+    shell: "microk8s.helm install gpu-operator -n gpu-operator --create-namespace nvidia/gpu-operator --version=v{{ gpu_operator_version }} --set toolkit.env[0].name=CONTAINERD_CONFIG --set toolkit.env[0].value=/var/snap/microk8s/current/args/containerd-template.toml --set toolkit.env[1].name=CONTAINERD_SOCKET --set toolkit.env[1].value=/var/snap/microk8s/common/run/containerd.sock --set toolkit.env[2].name=RUNTIME_CONFIG_SOURCE --set-string toolkit.env[2].value=file=/var/snap/microk8s/current/args/containerd.toml --set driver.enabled=false,toolkit.enabled=false"
 
   - name: Installing the GPU Operator with Secure Boot on NVIDIA Cloud Native Stack
     when: "release != 'tegra' and confidential_computing == false and enable_gpu_operator == true and cns_docker == false and cns_nvidia_driver == false and use_open_kernel_module == true and enable_mig == false and enable_rdma == false and enable_vgpu == false and enable_gds == false and enable_secure_boot == true and ngc_registry_password == ''"
diff --git a/playbooks/nvidia-docker.yaml b/playbooks/nvidia-docker.yaml
index 27303a67..f970c4cb 100644
--- a/playbooks/nvidia-docker.yaml
+++ b/playbooks/nvidia-docker.yaml
@@ -341,52 +341,119 @@
       register: add_user_to_docker_group
       until: add_user_to_docker_group is succeeded
 
-    - name: Configure CDI
-      shell: nvidia-ctk runtime configure --runtime containerd --nvidia-set-as-default --cdi.enabled --config /etc/containerd/config.toml; nvidia-ctk runtime configure --runtime docker --cdi.enabled --nvidia-set-as-default; nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml
+
+    - name: Configure CDI for Docker/Containerd
+      shell: "nvidia-ctk runtime configure --runtime docker --cdi.enabled --nvidia-set-as-default; nvidia-ctk runtime configure --runtime containerd --cdi.enabled --nvidia-set-as-default; nvidia-ctk config --config-file /usr/local/nvidia/toolkit/.config/nvidia-container-runtime/config.toml --in-place --set accept-nvidia-visible-devices-as-volume-mounts=true"
       become: true
-      when: nvidia_docker_exists.rc >= 1
+      when: nvidia_docker_exists.rc >= 1 and container_runtime == 'cri-docker' or nvidia_docker_exists.rc >= 1 and container_runtime == 'containerd' 
       ignore_errors: true
       retries: 5
       delay: 5
       register: configure_cdi
       until: configure_cdi is succeeded
 
-    - name: NGC CLI Setup
+    - name: Configure CDI for CRI-O Container Runtime
+      shell: nvidia-ctk runtime configure --runtime crio --cdi.enabled --nvidia-set-as-default
+      become: true
+      when: nvidia_docker_exists.rc >= 1 and container_runtime == 'cri-o' 
+      ignore_errors: true
+      retries: 5
+      delay: 5
+      register: configure_cdi
+      until: configure_cdi is succeeded
+
+    - name: Configure GPU Operator NVIDIA Driver for Nvidia Container Runtime
+      become: true
+      when: cns_nvidia_driver == false
+      ignore_errors: true
+      lineinfile:
+        path: /etc/nvidia-container-runtime/config.toml
+        regexp: '#root = "/run/nvidia/driver"'
+        line: 'root = "/run/nvidia/driver"'
+      retries: 5
+      delay: 5
+      register: configure_nvidia_driver
+      until: configure_nvidia_driver is succeeded
+
+    - name: Reload the configurations
+      become: true
       block:
-        - name: Download CLI
-          get_url:
-            url: https://api.ngc.nvidia.com/v2/resources/nvidia/ngc-apps/ngc_cli/versions/3.51.0/files/ngccli_linux.zip
-            dest: /tmp/ngccli_linux.zip
-            mode: 0664
-          retries: 5
-          delay: 5
-          register: download_ngc_cli
-          until: download_ngc_cli is succeeded
+       - name: reload daemon
+         systemd_service:
+           daemon_reload: true
+         failed_when: false
+         retries: 5
+         delay: 5
+         register: reload_daemon
+         until: reload_daemon is succeeded
+
+       - name: restart services
+         failed_when: false
+         systemd_service:
+           name: "{{ item }}"
+           state: restarted
+         with_items:
+           - cri-docker
+           - docker
+           - kubelet
+           - containerd
+           - crio
+           - cri-o
+         retries: 5
+         delay: 5
+         register: restart_services
+         until: restart_services is succeeded
+
+    - name: Download NGC CLI
+      when: ansible_architecture == 'x86_64'
+      get_url:
+        url: https://api.ngc.nvidia.com/v2/resources/nvidia/ngc-apps/ngc_cli/versions/4.10.0/files/ngccli_linux.zip
+        dest: /tmp/ngccli_linux.zip
+        mode: 0664
+      retries: 5
+      delay: 5
+      register: download_ngc_cli
+      until: download_ngc_cli is succeeded
 
+    - name: Download NGC CLI
+      when: ansible_architecture == 'aarch64'
+      get_url:
+        url: https://api.ngc.nvidia.com/v2/resources/nvidia/ngc-apps/ngc_cli/versions/4.10.0/files/ngccli_arm64.zip
+        dest: /tmp/ngccli_linux.zip
+        mode: 0664
+      retries: 5
+      delay: 5
+      register: download_ngc_cli
+      until: download_ngc_cli is succeeded
+
+    - name: NGC CLI Setup
+      block:
         - name: Install NGC CLI
           unarchive:
             src: /tmp/ngccli_linux.zip
-            dest: "{{ ansible_user_dir }}"
+            dest: "{{ ansible_user_dir }}/"
             remote_src: yes
           retries: 5
           delay: 5
           register: install_ngc_cli
           until: install_ngc_cli is succeeded
 
-        - name: change ngc file permission
+        - name: Ensure ngc file is executable
           file:
             path: "{{ ansible_user_dir }}/ngc-cli/ngc"
-            mode: '0777'
+            mode: '0755'
+            state: file
           retries: 5
           delay: 5
           register: change_ngc_permission
           until: change_ngc_permission is succeeded
 
-        - name: Add Path to bashrc
+        - name: Ensure ngc-cli path is in bashrc
           lineinfile:
             path: "{{ ansible_user_dir }}/.bashrc"
-            insertafter: '^PATH='
-            line: 'PATH=$PATH:{{ ansible_user_dir }}/ngc-cli'
+            insertafter: EOF
+            regexp: '^(export )?PATH=.*{{ ansible_user_dir }}/ngc-cli/?(:|$)'
+            line: 'export PATH=$PATH:{{ ansible_user_dir }}/ngc-cli'
             state: present
           retries: 5
           delay: 5
diff --git a/playbooks/nvidia-driver.yaml b/playbooks/nvidia-driver.yaml
index 39b1255b..afbdafdb 100755
--- a/playbooks/nvidia-driver.yaml
+++ b/playbooks/nvidia-driver.yaml
@@ -269,6 +269,20 @@
           register: install_driver_packages_2
           until: install_driver_packages_2 is succeeded
 
+    - name: Install NVIDIA Utils on Ubuntu
+      become: true
+      when: "ansible_distribution == 'Ubuntu'"
+      ignore_errors: true
+      apt:
+        name: ['nvidia-compute-utils-{{ driver_version }}={{ gpu_driver_version }}*', 'libnvidia-cfg1-{{ driver_version }}={{ gpu_driver_version}}*', 'nvidia-persistenced={{ gpu_driver_version}}*']
+        state: present
+        update_cache: true
+        force: yes
+      retries: 5
+      delay: 5
+      register: install_nvidia_utils_ubuntu
+      until: install_nvidia_utils_ubuntu is succeeded
+
     - name: Enable MIG with nvidia-smi
       become: true
       shell: nvidia-smi -mig 1
diff --git a/playbooks/cns_values_14.0.yaml b/playbooks/older_versions/cns_values_14.0.yaml
similarity index 100%
rename from playbooks/cns_values_14.0.yaml
rename to playbooks/older_versions/cns_values_14.0.yaml
diff --git a/playbooks/cns_values_14.1.yaml b/playbooks/older_versions/cns_values_14.1.yaml
similarity index 100%
rename from playbooks/cns_values_14.1.yaml
rename to playbooks/older_versions/cns_values_14.1.yaml
diff --git a/playbooks/cns_values_14.2.yaml b/playbooks/older_versions/cns_values_14.2.yaml
similarity index 100%
rename from playbooks/cns_values_14.2.yaml
rename to playbooks/older_versions/cns_values_14.2.yaml
diff --git a/playbooks/operators-install.yaml b/playbooks/operators-install.yaml
index eb82dc8a..8274d72b 100755
--- a/playbooks/operators-install.yaml
+++ b/playbooks/operators-install.yaml
@@ -161,19 +161,31 @@
      register: copy_network_files
      until: copy_network_files is succeeded
 
-   - name: Update Active mellanox NIC in network-operator-values.yaml
-     when: "enable_network_operator == true and network_operator_version < '24.10.1'"
-     failed_when: false
-     shell: 'sed -i "s/devices: \[.*\]/devices: \\[ {{ active_nic.stdout }}\]/g" {{ ansible_user_dir }}/network-operator-values.yaml'
+   - name: Download Mellanox NIC Cluster Policy YAML
+     ansible.builtin.get_url:
+       url: "https://raw.githubusercontent.com/Mellanox/network-operator/refs/tags/v{{ network_operator_version }}/example/crs/mellanox.com_v1alpha1_nicclusterpolicy_cr.yaml"
+       dest: "/tmp/mellanox_nic_policy.yaml"
+       mode: '0666'
+     register: download_mellanox_nic_policy
+     until: download_mellanox_nic_policy is succeeded
+     retries: 5
+     delay: 5
+
+   - name: Update Mellanox Cluster Policy
+     when: "enable_network_operator == true"
+     ansible.builtin.shell: |
+       sed -i 's/nvstaging/nvidia/g' /tmp/mellanox_nic_policy.yaml
+       sed -i '/^spec:$/a\{% raw %}{% if deploy_ofed %}{% endraw %}' /tmp/mellanox_nic_policy.yaml
+       sed -i '/^  rdmaSharedDevicePlugin:/i\{% raw %}{% endif %}{% endraw %}' /tmp/mellanox_nic_policy.yaml
      retries: 5
      delay: 5
-     register: update_mellanox_nic
-     until: update_mellanox_nic is succeeded
+     register: update_mellanox_cluster_policy
+     until: update_mellanox_cluster_policy is succeeded
 
    - name: Generate NIC Cluster Policy template
-     when: "enable_network_operator == true and network_operator_version >= '24.10.1'"
+     when: "enable_network_operator == true"
      copy:
-       src: "{{lookup('pipe', 'pwd')}}/files/nic-cluster-policy.yaml"
+       src: "/tmp/mellanox_nic_policy.yaml"
        dest: "{{ ansible_user_dir }}/nic-cluster-policy.yaml.j2"
      retries: 5
      delay: 5
@@ -181,7 +193,7 @@
      until: generate_nic_policy is succeeded
 
    - name: Create final NIC Cluster Policy configuration
-     when: "enable_network_operator == true and network_operator_version >= '24.10.1'"
+     when: "enable_network_operator == true"
      ansible.builtin.template:
        src: "{{ ansible_user_dir }}/nic-cluster-policy.yaml.j2"
        dest: "{{ ansible_user_dir }}/nic-cluster-policy.yaml"
@@ -190,15 +202,6 @@
      register: create_nic_policy
      until: create_nic_policy is succeeded
 
-   - name: Update Active mellanox NIC in network-operator-values.yaml
-     when: "enable_network_operator == true and cns_version >= 4.1"
-     failed_when: false
-     shell: 'sed -i "s/              \"ifNames\": \[.*\]/              \"ifNames\": \\[\"{{ active_nic.stdout }}\"\]/g" {{ ansible_user_dir }}/nic-cluster-policy.yaml'
-     retries: 5
-     delay: 5
-     register: update_mellanox_nic_cns
-     until: update_mellanox_nic_cns is succeeded
-
    - name: Installing the Network Operator on NVIDIA Cloud Native Stack
      when: "enable_network_operator == true and cns_version >= 4.1"
      shell: "{{ item }}"
@@ -212,15 +215,7 @@
      until: install_network_operator is succeeded
 
    - name: Installing the Network Operator on NVIDIA Cloud Native Stack
-     when: "enable_network_operator == true and  network_operator_version < '24.10.1'"
-     shell: "helm install --version {{ network_operator_version }} -f {{ ansible_user_dir }}/network-operator-values.yaml -n network-operator --create-namespace --wait network-operator mellanox/network-operator"
-     retries: 5
-     delay: 5
-     register: install_network_operator_x86
-     until: install_network_operator_x86 is succeeded
-
-   - name: Installing the Network Operator on NVIDIA Cloud Native Stack
-     when: "enable_network_operator == true and  network_operator_version >= '24.10.1'"
+     when: "enable_network_operator == true"
      shell: "helm install --version {{ network_operator_version }} -f {{ ansible_user_dir }}/network-operator-value.yaml -n network-operator --create-namespace --wait network-operator mellanox/network-operator"
      retries: 5
      delay: 5
@@ -228,7 +223,7 @@
      until: install_network_operator_x86_new is succeeded
 
    - name: Applying the NIC Cluster Policy on NVIDIA Cloud Native Stack
-     when: "enable_network_operator == true and ansible_architecture == 'x86_64' and network_operator_version >= '24.10.1'"
+     when: "enable_network_operator == true and ansible_architecture == 'x86_64'"
      shell: "kubectl apply -f {{ ansible_user_dir }}/nic-cluster-policy.yaml"
      retries: 5
      delay: 5
@@ -377,7 +372,7 @@
 
    - name: Installing the GPU Operator with NVIDIA Docker on NVIDIA Cloud Native Stack
      when: "confidential_computing == false and enable_gpu_operator == true and cns_docker == true and cns_nvidia_driver == false and  enable_mig == false and enable_vgpu == false and enable_rdma == false and ngc_registry_password == ''"
-     shell: helm install --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --create-namespace --namespace nvidia-gpu-operator '{{ gpu_operator_helm_chart }}' --set toolkit.enabled=false --wait --generate-name
+     shell: helm install --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --create-namespace --namespace nvidia-gpu-operator '{{ gpu_operator_helm_chart }}' --wait --generate-name
      retries: 5
      delay: 5
      register: install_gpu_operator_docker
@@ -393,7 +388,7 @@
 
    - name: Installing the GPU Operator with Docker and NVIDIA Host Driver on NVIDIA Cloud Native Stack
      when: "confidential_computing == false and enable_gpu_operator == true and cns_docker == true and cns_nvidia_driver == true and enable_mig == false and enable_vgpu == false and enable_rdma == false and ngc_registry_password == ''"
-     shell: helm install --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --create-namespace --namespace nvidia-gpu-operator '{{ gpu_operator_helm_chart }}' --set driver.enabled=false,toolkit.enabled=false --wait --generate-name
+     shell: helm install --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --create-namespace --namespace nvidia-gpu-operator '{{ gpu_operator_helm_chart }}' --set driver.enabled=false --wait --generate-name
      retries: 5
      delay: 5
      register: install_gpu_operator_docker_host_driver
@@ -457,7 +452,7 @@
 
    - name: Installing the GPU Operator with Network Operator on NVIDIA Cloud Native Stack
      when: "confidential_computing == false and enable_gpu_operator == true and use_open_kernel_module == false and deploy_ofed == true and enable_mig == false and enable_rdma == true and enable_vgpu == false and enable_gds == false and enable_secure_boot == false and cns_nvidia_driver == false and ngc_registry_password == ''"
-     shell: "helm install --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --create-namespace --namespace nvidia-gpu-operator --devel '{{ gpu_operator_helm_chart }}' --set driver.rdma.enabled=true,driver.version='{{ gpu_driver_version }}',driver.repository='{{ gpu_operator_driver_registry }}' --wait --generate-name"
+     shell: "sleep 180 && helm install --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --create-namespace --namespace nvidia-gpu-operator --devel '{{ gpu_operator_helm_chart }}' --set driver.rdma.enabled=true,driver.version='{{ gpu_driver_version }}',driver.repository='{{ gpu_operator_driver_registry }}' --wait --generate-name"
      retries: 5
      delay: 5
      register: install_gpu_operator_network
@@ -575,6 +570,14 @@
      register: container_networking_changes
      until: container_networking_changes is succeeded
 
+   - name: add nvidia-smi alias
+     become: false
+     lineinfile:
+       path: '{{ ansible_user_dir }}/.bashrc'
+       regexp: '^alias nvidia-smi='
+       line: "alias nvidia-smi='sudo chroot /run/nvidia/driver nvidia-smi'"
+       state: present
+
    - name: Install NIM Operator
      shell: "helm install --version {{ nim_operator_version }} --create-namespace --namespace nim-operator nim-operator nvidia/k8s-nim-operator -n nim-operator"
      when: "enable_nim_operator == true"
@@ -599,4 +602,8 @@
      retries: 5
      delay: 5
      register: install_nsight_operator
-     until: install_nsight_operator is succeeded
\ No newline at end of file
+     until: install_nsight_operator is succeeded
+
+   - name: Install NVIDIA Kubernetes AI Scheduler
+     shell: helm upgrade -i kai-scheduler oci://ghcr.io/nvidia/kai-scheduler/kai-scheduler -n kai-scheduler --create-namespace --version v{{ kai_scheduler_version }} --set "global.gpuSharing=true"
+     when: enable_kai_scheduler == true
\ No newline at end of file
diff --git a/playbooks/operators-upgrade.yaml b/playbooks/operators-upgrade.yaml
index dbefcaf2..28fed097 100644
--- a/playbooks/operators-upgrade.yaml
+++ b/playbooks/operators-upgrade.yaml
@@ -33,6 +33,14 @@
        path: "{{ ansible_user_dir }}/values.yaml"
        state: absent
 
+   - name: Get the GPU Operator Values.yaml
+     shell: helm show --version=v{{ gpu_operator_version }} values '{{ gpu_operator_helm_chart }}' > {{ ansible_user_dir }}/values.yaml
+     when: "enable_gpu_operator == true"
+     retries: 5
+     delay: 5
+     register: get_gpu_operator_values
+     until: get_gpu_operator_values is succeeded
+
    - name: Check Current Running Cloud Native Stack Version
      shell: kubectl get nodes --no-headers | awk '{print $NF}'
      register: k8sversion
@@ -162,6 +170,20 @@
      register: gpu_operator_crds_upgrade_5
      until: gpu_operator_crds_upgrade_5 is succeeded
 
+   - name: Upgrade GPU Operator CRDs on Cloud Native Stack
+     when: "enable_gpu_operator == true and k8sversion.stdout == 'v1.33.6' or enable_gpu_operator == true and k8sversion.stdout == 'v1.32.10'"
+     shell: "{{ item }}"
+     with_items:
+       - kubectl delete crd clusterpolicies.nvidia.com nvidiadrivers.nvidia.com
+       - kubectl apply -f https://gitlab.com/nvidia/kubernetes/gpu-operator/-/raw/v25.10.0/deployments/gpu-operator/crds/nvidia.com_clusterpolicies.yaml
+       - kubectl apply -f https://gitlab.com/nvidia/kubernetes/gpu-operator/-/raw/v25.10.0/deployments/gpu-operator/charts/node-feature-discovery/crds/nfd-api-crds.yaml
+       - kubectl apply -f https://gitlab.com/nvidia/kubernetes/gpu-operator/-/raw/v25.10.0/deployments/gpu-operator/crds/nvidia.com_nvidiadrivers.yaml
+       - helm show --version=v{{ gpu_operator_version }} values nvidia/gpu-operator > {{ ansible_user_dir }}/values.yaml
+     retries: 5
+     delay: 5
+     register: gpu_operator_crds_upgrade_6
+     until: gpu_operator_crds_upgrade_6 is succeeded
+
    - name: Get Host IP
      shell: ip route get 1 | awk '{print $7; exit}' | tr -d '\n'
      register: network
@@ -182,7 +204,7 @@
 
    - name: Upgrade GPU Operator with Pre Installed NVIDIA Driver on Cloud Native Stack
      when: "enable_gpu_operator == true and 'running' in k8sup.stdout and cns_docker == true and enable_mig == false and enable_vgpu == false and enable_rdma == false and enable_gds == false and enable_secure_boot == false"
-     shell: "helm upgrade $(helm ls -A | grep gpu-oper | awk '{print $1}') nvidia/gpu-operator --version {{ gpu_operator_version }} --namespace nvidia-gpu-operator --values {{ ansible_user_dir }}/values.yaml --set driver.enabled=false,toolkit.enabled=false "
+     shell: "helm upgrade $(helm ls -A | grep gpu-oper | awk '{print $1}') nvidia/gpu-operator --version {{ gpu_operator_version }} --namespace nvidia-gpu-operator --values {{ ansible_user_dir }}/values.yaml --set driver.enabled=false"
      retries: 5
      delay: 5
      register: gpu_operator_upgrade_pre_installed
@@ -190,7 +212,7 @@
 
    - name: Installing the GPU Operator with Pre Installed NVIDIA Driver and MIG on NVIDIA Cloud Native Stack
      when: "cns_docker == true and enable_mig == true and enable_rdma == false  and enable_vgpu == false and gpu_operator.rc >= 1 and ngc_registry_password == ''"
-     shell: helm upgrade $(helm ls -A | grep gpu-oper | awk '{print $1}') nvidia/gpu-operator --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --namespace nvidia-gpu-operator --set mig.strategy=single,driver.enabled=false,toolkit.enabled=false --wait --generate-name
+     shell: helm upgrade $(helm ls -A | grep gpu-oper | awk '{print $1}') nvidia/gpu-operator --version {{ gpu_operator_version }} --values {{ ansible_user_dir }}/values.yaml --namespace nvidia-gpu-operator --set mig.strategy=single,driver.enabled=false --wait --generate-name
      retries: 5
      delay: 5
      register: gpu_operator_install_mig
diff --git a/playbooks/prerequisites.yaml b/playbooks/prerequisites.yaml
index 9121485d..2240ec82 100755
--- a/playbooks/prerequisites.yaml
+++ b/playbooks/prerequisites.yaml
@@ -290,6 +290,8 @@
             - {name: "net.bridge.bridge-nf-call-ip6tables", value: "1", reload: no}
             - {name: "net.bridge.bridge-nf-call-iptables", value: "1", reload: no}
             - {name: "net.ipv4.ip_forward", value: "1", reload: yes}
+            - {name: "net.ipv4.conf.all.rp_filter", value: "0", reload: yes}
+            - {name: "net.ipv4.conf.default.rp_filter", value: "0", reload: yes}
             - {name: "fs.inotify.max_user_watches", value: "2099999999", reload: no}
             - {name: "fs.inotify.max_user_instances", value: "2099999999", reload: no}
             - {name: "fs.inotify.max_queued_events", value: "2099999999", reload: yes}
@@ -957,6 +959,14 @@
       register: update_docker_service
       until: update_docker_service is succeeded
 
+    - name: Add current user to docker group
+      when: container_runtime == 'cri-dockerd'
+      become: true
+      user:
+        name: "{{ ansible_user }}"
+        groups: docker
+        append: yes
+
     - name: Starting and enabling the required services
       become: true
       systemd_service:
diff --git a/playbooks/readme.md b/playbooks/readme.md
index 3d81ee5f..6464c736 100755
--- a/playbooks/readme.md
+++ b/playbooks/readme.md
@@ -15,7 +15,7 @@ This page describes the steps required to use Ansible to install the NVIDIA Clou
 ## Prerequisites
 
 - system has direct internet access
-- system should have an Operating system either Ubuntu 20.04 and above or RHEL 8.7
+- system should have an Operating system either Ubuntu 22.04 and above or RHEL 8.7
 - system has adequate internet bandWidth
 - DNS server is working fine on the System
 - system can access Google repo(for k8s installation)
@@ -80,12 +80,12 @@ Cloud Native Stack Supports below versions.
 
 Available versions are:
 
-- 16.0 (Ubuntu 24.04)
-- 15.1 (Ubuntu 24.04)
-- 15.0 (Ubuntu 24.04)
-- 14.2
-- 14.1
-- 14.0
+- 17.0
+- 16.1
+- 16.0
+- 15.2 
+- 15.1
+- 15.0
 
 Edit the `cns_version.yaml` and update the version you want to install
 
@@ -97,8 +97,8 @@ If you want to cusomize any predefined components versions or any other custom p
 
 Example:
 ```
-$ nano cns_values_15.1.yaml
-cns_version: 15.1
+$ nano cns_values_16.1.yaml
+cns_version: 16.1
 
 ## MicroK8s cluster
 microk8s: no
@@ -107,36 +107,40 @@ install_k8s: yes
 
 ## Components Versions
 # Container Runtime options are containerd, cri-o, cri-dockerd
-container_runtime: "containerd"
-containerd_version: "2.1.3"
-runc_version: "1.3.0"
+container_runtime: "cri-dockerd"
+containerd_version: "2.2.0"
+runc_version: "1.3.3"
 cni_plugins_version: "1.7.1"
 containerd_max_concurrent_downloads: "5"
-nvidia_container_toolkit_version: "1.17.8"
-crio_version: "1.32.6"
-cri_dockerd_version: "0.3.18"
-k8s_version: "1.32.6"
-calico_version: "3.30.2"
+nvidia_container_toolkit_version: "1.18.1"
+crio_version: "1.33.6"
+cri_dockerd_version: "0.4.0"
+k8s_version: "1.33.6"
+calico_version: "3.31.0"
 flannel_version: "0.25.6"
-helm_version: "3.18.3"
-gpu_operator_version: "25.3.1"
-network_operator_version: "25.4.0"
-nim_operator_version: "2.0.1"
+helm_version: "4.0.0"
+gpu_operator_version: "25.10.1"
+network_operator_version: "25.7.0"
+nim_operator_version: "3.0.2"
 nsight_operator_version: "1.1.2"
+kai_scheduler_version: "0.10.2"
 local_path_provisioner: "0.0.31"
 nfs_provisioner: "4.0.18"
 metallb_version: "0.15.2"
-kserve_version: "0.15"
-prometheus_stack: "75.9.0"
-prometheus_adapter: "4.15.1"
-grafana_operator: "v5.18.0"
+kserve_version: "0.16.0"
+prometheus_stack: "78.5.0"
+prometheus_adapter: "5.2.0"
+grafana_operator: "5.18.0"
 elastic_stack: "9.0.0"
-lws_version: "0.6.2"
+lws_version: "0.7.0"
+dra_driver_version: "25.8.0"
+dynamo_release_version: "0.6.0"
+volcano_version: "1.13.0"
 
 # GPU Operator Values
 enable_gpu_operator: yes
 confidential_computing: no
-gpu_driver_version: "570.158.01"
+gpu_driver_version: "580.95.05"
 use_open_kernel_module: no
 enable_mig: no
 mig_profile: all-disabled
@@ -177,22 +181,31 @@ https_proxy: ""
 
 # Cloud Native Stack for Developers Values
 ## Enable for Cloud Native Stack Developers
-cns_docker: no
+cns_docker: yes
 ## Enable For Cloud Native Stack Developers with TRD Driver
 cns_nvidia_driver: no
 nvidia_driver_mig: no
 
 ## Kubernetes resources
-k8s_apt_key: "https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key"
-k8s_gpg_key: "https://pkgs.k8s.io/core:/stable:/v1.32/rpm/repodata/repomd.xml.key"
+k8s_apt_key: "https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key"
+k8s_gpg_key: "https://pkgs.k8s.io/core:/stable:/v1.33/rpm/repodata/repomd.xml.key"
 k8s_apt_ring: "/etc/apt/keyrings/kubernetes-apt-keyring.gpg"
 k8s_registry: "registry.k8s.io"
 
+# Enable NVIDIA Kubernetes AI Scheduler
+enable_kai_scheduler: no
+
+#Enable NVIDIA Dynamic Resource Allocation(DRA) Driver
+enable_dra_driver: no
+
+# Enable NVIDIA Dynamo Cloud, Note that Dynamo requires Storage Class on the cluster
+enable_dynamo_cloud: no
+
 # Enable NVIDIA NSight Operator
 enable_nsight_operator: no
 
 # Install NVIDIA NIM Operator
-enable_nim_operator: no
+enable_nim_operator: yes
 
 # LeaderWorkerSet https://github.com/kubernetes-sigs/lws/tree/main
 lws: no
@@ -211,6 +224,9 @@ loadbalancer: no
 # Example input loadbalancer_ip: "10.78.17.85/32"
 loadbalancer_ip: ""
 
+# Enable Volcano Scheduler
+volcano: no
+
 ## Cloud Native Stack Validation
 cns_validation: no
 
@@ -325,9 +341,9 @@ If you're planning to enable DRA, then it's recommended to enable CDI with GPU O
 
 Example:
 ```
-$ nano cns_values_15.1.yaml
+$ nano cns_values_16.1.yaml
 
-cns_version: 15.1
+cns_version: 16.1
 
 enable_cdi: yes
 ```
@@ -338,9 +354,9 @@ If you wnt to enable NIM Operator on Cloud Native Stack, you can enable the conf
 
 Example:
 ```
-$ nano cns_values_15.1.yaml
+$ nano cns_values_16.1.yaml
 
-cns_version: 15.1
+cns_version: 16.1
 
 enable_nim_operator: yes
 ```
@@ -352,23 +368,107 @@ If you wnt to enable Nsight Operator on Cloud Native Stack, you can enable the c
 
 Example:
 ```
-$ nano cns_values_15.1.yaml
+$ nano cns_values_16.1.yaml
 
-cns_version: 15.1
+cns_version: 16.1
 
 enable_nsight_operator: yes
 ```
 For more information, Refer [Nsight Operator](https://catalog.ngc.nvidia.com/orgs/nvidia/teams/devtools/helm-charts/nsight-operator)
 
+## Enable Kubernetes AI Scheduler
+
+If you wnt to enable Kubernetes AI Scheduler on Cloud Native Stack, you can enable the configuration in `cns_values_xx.yaml` and trigger the installation
+
+Example:
+```
+$ nano cns_values_16.1.yaml
+
+cns_version: 16.1
+
+enable_kai_scheduler: yes
+```
+For more information, Refer [NVIDIA KAI Scheduler](https://github.com/NVIDIA/KAI-Scheduler/tree/main)
+
+sample validation
+
+create queue.yaml with below content 
+```
+apiVersion: scheduling.run.ai/v2
+kind: Queue
+metadata:
+  name: default
+spec:
+  resources:
+    cpu:
+      quota: -1
+      limit: -1
+      overQuotaWeight: 1
+    gpu:
+      quota: -1
+      limit: -1
+      overQuotaWeight: 1
+    memory:
+      quota: -1
+      limit: -1
+      overQuotaWeight: 1
+---
+apiVersion: scheduling.run.ai/v2
+kind: Queue
+metadata:
+  name: test
+spec:
+  parentQueue: default
+  resources:
+    cpu:
+      quota: -1
+      limit: -1
+      overQuotaWeight: 1
+    gpu:
+      quota: -1
+      limit: -1
+      overQuotaWeight: 1
+    memory:
+      quota: -1
+      limit: -1
+      overQuotaWeight: 1
+```
+
+create gpu-sharing.yaml with below content 
+
+```
+apiVersion: v1
+kind: Pod
+metadata:
+  name: gpu-sharing
+  labels:
+    kai.scheduler/queue: test
+  annotations:
+    gpu-fraction: "0.5"
+spec:
+  schedulerName: kai-scheduler
+  containers:
+    - name: ubuntu
+      image: ubuntu
+      args: ["sleep", "infinity"]
+```
+
+apply the changes
+
+```
+kubectl apply -f queue.yaml
+kubectl apply -f gpu-sharing.yaml
+```
+
 ### Enable MicroK8s 
 
 If you want to use microk8s you can enable the configuration in `cns_values_xx.yaml` and trigger the installation
 
 Example:
 ```
-$ nano cns_values_15.1.yaml
+$ nano cns_values_16.1.yaml
 
-cns_version: 15.1
+cns_version: 16.1
 
 microk8s: yes
 ```
@@ -379,9 +479,9 @@ If you want to use LWS you can enable the configuration in `cns_values_xx.yaml`
 
 Example:
 ```
-$ nano cns_values_15.1.yaml
+$ nano cns_values_16.1.yaml
 
-cns_version: 15.1
+cns_version: 16.1
 
 lws: yes
 ```
@@ -395,7 +495,7 @@ If you want to use Kserve on CNS, you can enable the configuration in `cns_value
 
 Example: 
 ```
-nano cns_values_15.1.yaml
+nano cns_values_16.1.yaml
 
 # Local Path Provisioner and NFS Provisoner as Storage option
 storage: yes
@@ -848,7 +948,7 @@ Upgrade option is available from one minor version to next minor version of CNS.
 
 Example: Cloud Native Stack 13.0 can upgrade to 13.1 but 13.x can not upgrade to 14.x
 
-`NOTE:` Currently there's a containerd limitation for upgrade from CNS 14.0 to CNS 15.1, please find the details [here](https://github.com/containerd/containerd/issues/11535)
+`NOTE:` Currently there's a containerd limitation for upgrade from CNS 14.0 to CNS 16.1, please find the details [here](https://github.com/containerd/containerd/issues/11535)
 
 ### Uninstall
 
diff --git a/playbooks/setup.sh b/playbooks/setup.sh
index 5995727b..a16dcb09 100755
--- a/playbooks/setup.sh
+++ b/playbooks/setup.sh
@@ -327,6 +327,8 @@ if [ $1 == "install" ]; then
                 ansible -c local -i localhost, all -m lineinfile -a "path={{lookup('pipe', 'pwd')}}/cns_values_"$version".yaml regexp='confidential_computing: no' line='confidential_computing: yes'"
                 ansible-playbook -c local -i localhost, cns_cc_bios.yaml
                 ansible-playbook -i hosts cns-installation.yaml
+        elif [[ $2 == 'launchpad' ]]; then
+                ansible-playbook -i hosts cns-installation.yaml
       	elif [ -z $2 ]; then
 		echo "Installing NVIDIA Cloud Native Stack Version $version"
 		id=$(sudo dmidecode --string system-uuid | awk -F'-' '{print $1}' | cut -c -3)
diff --git a/playbooks/templates/kubeadm-init-config-new.template b/playbooks/templates/kubeadm-init-config-new.template
new file mode 100644
index 00000000..20e50650
--- /dev/null
+++ b/playbooks/templates/kubeadm-init-config-new.template
@@ -0,0 +1,34 @@
+apiVersion: kubeadm.k8s.io/v1beta4
+kind: InitConfiguration
+nodeRegistration:
+  criSocket: "{{ cri_socket }}"
+localAPIEndpoint:
+  advertiseAddress: "{{ kubernetes_host_ip }}"
+---
+apiVersion: kubeadm.k8s.io/v1beta4
+kind: ClusterConfiguration
+apiServer:
+  extraArgs:
+  - name: "feature-gates"
+    value: "DynamicResourceAllocation=true"
+  - name: "runtime-config"
+    value: "resource.k8s.io/v1beta1=true"
+  - name: "runtime-config"
+    value: "resource.k8s.io/v1beta2=true"
+controllerManager:
+  extraArgs:
+  - name: "feature-gates"
+    value: "DynamicResourceAllocation=true"
+scheduler:
+  extraArgs:
+  - name: "feature-gates"
+    value: "DynamicResourceAllocation=true"
+networking:
+  podSubnet: "{{ subnet }}"
+kubernetesVersion: "v{{ k8s_version }}"
+imageRepository: "{{ k8s_registry }}"
+---
+apiVersion: kubelet.config.k8s.io/v1beta1
+kind: KubeletConfiguration
+featureGates:
+  DynamicResourceAllocation: true
\ No newline at end of file
diff --git a/playbooks/templates/kubeadm-init-config.template b/playbooks/templates/kubeadm-init-config.template
index 2426ef0a..b62fcd0d 100644
--- a/playbooks/templates/kubeadm-init-config.template
+++ b/playbooks/templates/kubeadm-init-config.template
@@ -3,7 +3,7 @@ kind: InitConfiguration
 nodeRegistration:
   criSocket: "{{ cri_socket }}"
 localAPIEndpoint:
-  advertiseAddress: "{{ network.stdout_lines[0] }}"
+  advertiseAddress: "{{ kubernetes_host_ip }}"
 ---
 apiVersion: kubeadm.k8s.io/v1beta3
 kind: ClusterConfiguration

From bce8b9fdcc4347940a0175a34b3eb2a43b588bfe Mon Sep 17 00:00:00 2001
From: Anurag Guda <anuragmsu@gmail.com>
Date: Fri, 2 Jan 2026 11:18:07 -0600
Subject: [PATCH 2/3] 25.12.0 Release Update

---
 playbooks/cns-validation.yaml | 36 +++++++++++++++++------------------
 1 file changed, 18 insertions(+), 18 deletions(-)

diff --git a/playbooks/cns-validation.yaml b/playbooks/cns-validation.yaml
index a0bc587e..9d11dd4a 100755
--- a/playbooks/cns-validation.yaml
+++ b/playbooks/cns-validation.yaml
@@ -318,15 +318,15 @@
         echo -e "==========================================================================================="
         echo -e "  Components                          Target Version          ||     Installed Version    "
         echo -e "==========================================================================================="
-        echo -e "GPU Operator Version                  {{ release_25_10_0['gpu_operator_version'] }}                 ||     {{ gpuoperator.stdout }}"
-        echo -e "NVIDIA Container Driver Version       {{ release_25_10_0['gpu_driver_version'] }}               ||     {{ nvcdriver.stdout }}"
-        echo -e "GPU Operator NV Toolkit Driver        {{ release_25_10_0['container_toolkit'] }}                 ||     {{ nvtoolkit.stdout }}"
-        echo -e "K8sDevice Plugin Version              {{ release_25_10_0['device_plugin']  }}                 ||     {{ k8sdevice.stdout }}"
-        echo -e "Data Center GPU Manager(DCGM) Version {{ release_25_10_0['dcgm_exporter_version'] }}             ||     {{ dcgm_exporter.stdout }}"
-        echo -e "Node Feature Discovery Version        {{ release_25_10_0['nfd_version'] }}                 ||     {{ nodediscover.stdout }}"
-        echo -e "GPU Feature Discovery Version         {{ release_25_10_0['gfd_version'] }}                  ||     {{ gpudiscover.stdout }}"
-        echo -e "NVIDIA validator version              {{ release_25_10_0['validator_version'] }}                 ||     {{ validator.stdout }}"
-        echo -e "NVIDIA MIG Manager version            {{ release_25_10_0['mig_manager_version'] }}                  ||     {{ mig_manager.stdout }}"
+        echo -e "GPU Operator Version                  {{ release_25_10_1['gpu_operator_version'] }}                 ||     {{ gpuoperator.stdout }}"
+        echo -e "NVIDIA Container Driver Version       {{ release_25_10_1['gpu_driver_version'] }}               ||     {{ nvcdriver.stdout }}"
+        echo -e "GPU Operator NV Toolkit Driver        {{ release_25_10_1['container_toolkit'] }}                 ||     {{ nvtoolkit.stdout }}"
+        echo -e "K8sDevice Plugin Version              {{ release_25_10_1['device_plugin']  }}                 ||     {{ k8sdevice.stdout }}"
+        echo -e "Data Center GPU Manager(DCGM) Version {{ release_25_10_1['dcgm_exporter_version'] }}             ||     {{ dcgm_exporter.stdout }}"
+        echo -e "Node Feature Discovery Version        {{ release_25_10_1['nfd_version'] }}                 ||     {{ nodediscover.stdout }}"
+        echo -e "GPU Feature Discovery Version         {{ release_25_10_1['gfd_version'] }}                  ||     {{ gpudiscover.stdout }}"
+        echo -e "NVIDIA validator version              {{ release_25_10_1['validator_version'] }}                 ||     {{ validator.stdout }}"
+        echo -e "NVIDIA MIG Manager version            {{ release_25_10_1['mig_manager_version'] }}                  ||     {{ mig_manager.stdout }}"
         echo -e
         echo -e "NOTE: NVIDIA Mig Manager is valid for only A100 and A30 and H100 GPU's"
         echo -e
@@ -410,15 +410,15 @@
         echo -e "==========================================================================================="
         echo -e "  Components                          Target Version          ||     Installed Version    "
         echo -e "==========================================================================================="
-        echo -e "GPU Operator Version                  {{ release_25_10_0['gpu_operator_version'] }}                ||     {{ gpuoperator.stdout }}"
-        echo -e "NVIDIA Container Driver Version       {{ release_25_10_0['gpu_driver_version'] }}             ||     {{ nvidia_driver.stdout }}"
-        echo -e "NVIDIA Toolkit Driver                 {{ release_25_10_0['container_toolkit'] }}                 ||     {{ nvidia_ct.stdout }}"
-        echo -e "K8sDevice Plugin Version              {{ release_25_10_0['device_plugin']  }}                 ||     {{ k8sdevice.stdout }}"
-        echo -e "Data Center GPU Manager(DCGM) Version {{ release_25_10_0['dcgm_exporter_version'] }}             ||     {{ dcgm_exporter.stdout }}"
-        echo -e "Node Feature Discovery Version        {{ release_25_10_0['nfd_version'] }}                 ||     {{ nodediscover.stdout }}"
-        echo -e "GPU Feature Discovery Version         {{ release_25_10_0['gfd_version'] }}                  ||     {{ gpudiscover.stdout }}"
-        echo -e "NVIDIA validator version              {{ release_25_10_0['validator_version'] }}                 ||     {{ validator.stdout }}"
-        echo -e "NVIDIA MIG Manager version            {{ release_25_10_0['mig_manager_version'] }}                  ||     {{ mig_manager.stdout }}"
+        echo -e "GPU Operator Version                  {{ release_25_10_1['gpu_operator_version'] }}                ||     {{ gpuoperator.stdout }}"
+        echo -e "NVIDIA Container Driver Version       {{ release_25_10_1['gpu_driver_version'] }}             ||     {{ nvidia_driver.stdout }}"
+        echo -e "NVIDIA Toolkit Driver                 {{ release_25_10_1['container_toolkit'] }}                 ||     {{ nvidia_ct.stdout }}"
+        echo -e "K8sDevice Plugin Version              {{ release_25_10_1['device_plugin']  }}                 ||     {{ k8sdevice.stdout }}"
+        echo -e "Data Center GPU Manager(DCGM) Version {{ release_25_10_1['dcgm_exporter_version'] }}             ||     {{ dcgm_exporter.stdout }}"
+        echo -e "Node Feature Discovery Version        {{ release_25_10_1['nfd_version'] }}                 ||     {{ nodediscover.stdout }}"
+        echo -e "GPU Feature Discovery Version         {{ release_25_10_1['gfd_version'] }}                  ||     {{ gpudiscover.stdout }}"
+        echo -e "NVIDIA validator version              {{ release_25_10_1['validator_version'] }}                 ||     {{ validator.stdout }}"
+        echo -e "NVIDIA MIG Manager version            {{ release_25_10_1['mig_manager_version'] }}                  ||     {{ mig_manager.stdout }}"
         echo -e
         echo -e "NOTE: NVIDIA Mig Manager is valid for only A100 and A30 and H100 GPU's"
         echo -e

From 2bce58d8d9ad3a14bb6918a57a313d9f3a818925 Mon Sep 17 00:00:00 2001
From: Anurag Guda <anuragmsu@gmail.com>
Date: Fri, 2 Jan 2026 11:23:46 -0600
Subject: [PATCH 3/3] 25.12.0 Release Update

---
 playbooks/cns_values_15.0.yaml   |  6 ------
 playbooks/cns_values_15.2.yaml   |  2 +-
 playbooks/cns_values_16.0.yaml   |  2 --
 playbooks/operators-upgrade.yaml |  6 +++---
 playbooks/readme.md              | 29 +++++++++++------------------
 5 files changed, 15 insertions(+), 30 deletions(-)

diff --git a/playbooks/cns_values_15.0.yaml b/playbooks/cns_values_15.0.yaml
index 9fcf9bfb..d8fac127 100644
--- a/playbooks/cns_values_15.0.yaml
+++ b/playbooks/cns_values_15.0.yaml
@@ -91,12 +91,6 @@ k8s_registry: "registry.k8s.io"
 # Enable NVIDIA Kubernetes AI Scheduler
 enable_kai_scheduler: no
 
-#Enable Dynamic Resource Allocation(DRA) Driver
-enable_dra_driver: no
-
-# Enable Dynamo Cloud
-enable_dynamo_cloud: no
-
 # Enable Volcano Scheduler
 volcano: no
 
diff --git a/playbooks/cns_values_15.2.yaml b/playbooks/cns_values_15.2.yaml
index 3c5a4e59..2297e407 100644
--- a/playbooks/cns_values_15.2.yaml
+++ b/playbooks/cns_values_15.2.yaml
@@ -1,4 +1,4 @@
-cns_version: 15.1
+cns_version: 15.2
 
 ## MicroK8s cluster
 microk8s: no
diff --git a/playbooks/cns_values_16.0.yaml b/playbooks/cns_values_16.0.yaml
index b25f7036..4771e32c 100644
--- a/playbooks/cns_values_16.0.yaml
+++ b/playbooks/cns_values_16.0.yaml
@@ -22,7 +22,6 @@ helm_version: "3.18.3"
 gpu_operator_version: "25.3.4"
 network_operator_version: "25.4.0"
 nim_operator_version: "2.0.1"
-dra_driver_version: "25.8.0"
 kai_scheduler_version: "0.9.7"
 nsight_operator_version: "1.1.2"
 local_path_provisioner: "0.0.31"
@@ -34,7 +33,6 @@ prometheus_adapter: "4.14.1"
 grafana_operator: "5.18.0"
 elastic_stack: "9.0.0"
 lws_version: "0.6.3"
-dynamo_release_version: "0.6.0"
 volcano_version: "1.13.0"
 
 # GPU Operator Values
diff --git a/playbooks/operators-upgrade.yaml b/playbooks/operators-upgrade.yaml
index 28fed097..21483a8a 100644
--- a/playbooks/operators-upgrade.yaml
+++ b/playbooks/operators-upgrade.yaml
@@ -175,9 +175,9 @@
      shell: "{{ item }}"
      with_items:
        - kubectl delete crd clusterpolicies.nvidia.com nvidiadrivers.nvidia.com
-       - kubectl apply -f https://gitlab.com/nvidia/kubernetes/gpu-operator/-/raw/v25.10.0/deployments/gpu-operator/crds/nvidia.com_clusterpolicies.yaml
-       - kubectl apply -f https://gitlab.com/nvidia/kubernetes/gpu-operator/-/raw/v25.10.0/deployments/gpu-operator/charts/node-feature-discovery/crds/nfd-api-crds.yaml
-       - kubectl apply -f https://gitlab.com/nvidia/kubernetes/gpu-operator/-/raw/v25.10.0/deployments/gpu-operator/crds/nvidia.com_nvidiadrivers.yaml
+       - kubectl apply -f https://gitlab.com/nvidia/kubernetes/gpu-operator/-/raw/v25.10.1/deployments/gpu-operator/crds/nvidia.com_clusterpolicies.yaml
+       - kubectl apply -f https://gitlab.com/nvidia/kubernetes/gpu-operator/-/raw/v25.10.1/deployments/gpu-operator/charts/node-feature-discovery/crds/nfd-api-crds.yaml
+       - kubectl apply -f https://gitlab.com/nvidia/kubernetes/gpu-operator/-/raw/v25.10.1/deployments/gpu-operator/crds/nvidia.com_nvidiadrivers.yaml
        - helm show --version=v{{ gpu_operator_version }} values nvidia/gpu-operator > {{ ansible_user_dir }}/values.yaml
      retries: 5
      delay: 5
diff --git a/playbooks/readme.md b/playbooks/readme.md
index 6464c736..d4d4ef1a 100755
--- a/playbooks/readme.md
+++ b/playbooks/readme.md
@@ -107,18 +107,18 @@ install_k8s: yes
 
 ## Components Versions
 # Container Runtime options are containerd, cri-o, cri-dockerd
-container_runtime: "cri-dockerd"
+container_runtime: "containerd"
 containerd_version: "2.2.0"
-runc_version: "1.3.3"
+runc_version: "1.4.0"
 cni_plugins_version: "1.7.1"
 containerd_max_concurrent_downloads: "5"
 nvidia_container_toolkit_version: "1.18.1"
 crio_version: "1.33.6"
 cri_dockerd_version: "0.4.0"
 k8s_version: "1.33.6"
-calico_version: "3.31.0"
+calico_version: "3.31.3"
 flannel_version: "0.25.6"
-helm_version: "4.0.0"
+helm_version: "4.0.4"
 gpu_operator_version: "25.10.1"
 network_operator_version: "25.7.0"
 nim_operator_version: "3.0.2"
@@ -126,21 +126,19 @@ nsight_operator_version: "1.1.2"
 kai_scheduler_version: "0.10.2"
 local_path_provisioner: "0.0.31"
 nfs_provisioner: "4.0.18"
-metallb_version: "0.15.2"
+metallb_version: "0.15.3"
 kserve_version: "0.16.0"
-prometheus_stack: "78.5.0"
+prometheus_stack: "79.9.0"
 prometheus_adapter: "5.2.0"
 grafana_operator: "5.18.0"
-elastic_stack: "9.0.0"
+elastic_stack: "9.2.1"
 lws_version: "0.7.0"
-dra_driver_version: "25.8.0"
-dynamo_release_version: "0.6.0"
 volcano_version: "1.13.0"
 
 # GPU Operator Values
 enable_gpu_operator: yes
 confidential_computing: no
-gpu_driver_version: "580.95.05"
+gpu_driver_version: "580.105.08"
 use_open_kernel_module: no
 enable_mig: no
 mig_profile: all-disabled
@@ -181,7 +179,7 @@ https_proxy: ""
 
 # Cloud Native Stack for Developers Values
 ## Enable for Cloud Native Stack Developers
-cns_docker: yes
+cns_docker: no
 ## Enable For Cloud Native Stack Developers with TRD Driver
 cns_nvidia_driver: no
 nvidia_driver_mig: no
@@ -195,17 +193,11 @@ k8s_registry: "registry.k8s.io"
 # Enable NVIDIA Kubernetes AI Scheduler
 enable_kai_scheduler: no
 
-#Enable NVIDIA Dynamic Resource Allocation(DRA) Driver
-enable_dra_driver: no
-
-# Enable NVIDIA Dynamo Cloud, Note that Dynamo requires Storage Class on the cluster
-enable_dynamo_cloud: no
-
 # Enable NVIDIA NSight Operator
 enable_nsight_operator: no
 
 # Install NVIDIA NIM Operator
-enable_nim_operator: yes
+enable_nim_operator: no
 
 # LeaderWorkerSet https://github.com/kubernetes-sigs/lws/tree/main
 lws: no
@@ -223,6 +215,7 @@ kserve: no
 loadbalancer: no
 # Example input loadbalancer_ip: "10.78.17.85/32"
 loadbalancer_ip: ""
+kubernetes_host_ip: ""
 
 # Enable Volcano Scheduler
 volcano: no
