Learn KOP - Create Nvidia GPU Operator Blueprint - Rafay Product Documentation

Part 2: Blueprint

What Will You Do

In this part of the self-paced exercise, you will create a custom cluster blueprint with Nvidia's GPU Operator based on declarative specifications.

Step 1: GPU Operator Repository

Nvidia distributes their GPU Operator software via their official Helm repository. In this step, you will create a repository in your project so that the controller can retrieve the Helm charts automatically.

The "repository.yaml" file contains the declarative specification for the repository. In this case, the specification is of type "Helm Repository" and the "endpoint" is pointing to Nvidia's official Helm repository.

apiVersion: config.rafay.dev/v2
kind: Repository
metadata:
  name: gpu
spec:
  repositoryType: HelmRepository
  endpoint:  https://helm.ngc.nvidia.com/nvidia
  credentialType: CredentialTypeNotSet

Type the command below:

rctl create repository -f repository.yaml

If you did not encounter any errors, you can optionally verify if everything was created correctly on the controller.

Step 2: Create Namespace

In this step, you will create a namespace for the Nvidia GPU Operator. The "namespace.yaml" file contains the declarative specification.

The following items may need to be updated/customized if you made changes to these or used alternate names.

kind: ManagedNamespace
apiVersion: config.rafay.dev/v2
metadata:
  name: gpu-operator-resources
  description: namespace for gpu-operator
  labels:
  annotations:
spec:
  type: RafayWizard
  resourceQuota:
  placement:
    placementType: ClusterSpecific
    clusterLabels:
    - key: rafay.dev/clusterName
      value: demo-gpu-mks
rctl create namespace -f namespace.yaml

If you did not encounter any errors, you can optionally verify if everything was created correctly on the controller.

Step 3: Create Addon

In this step, you will create a custom addon for the Nvidia GPU Operator. The "addon.yaml" file contains the declarative specification.

kind: AddonVersion
metadata:
  name: v1
  project: defaultproject
spec:
  addon: gpu-operator
  namespace: gpu-operator-resources
  template:
    type: Helm3
    valuesFile: values.yaml
    repository_ref: gpu
    repo_artifact_meta:
      helm:
       tag: v23.3.1
       chartName: gpu-operator

Type the command below:

rctl create addon version -f addon.yaml

If you did not encounter any errors, you can optionally verify if everything was created correctly on the controller.

Step 4: Create Blueprint

In this step, you will create a custom cluster blueprint with the Nvidia GPU Operator and a number of other system addons. The "blueprint.yaml" file contains the declarative specification.

kind: Blueprint
metadata:
  # blueprint name
  name: gpu-blueprint
  #project name
  project: defaultproject
rctl create blueprint -f blueprint.yaml

If you did not encounter any errors, you can optionally verify if everything was created correctly on the controller.

New Version

Although we have a custom blueprint, we have not provided any details on what it comprises. In this step, you will create and add a new version to the custom blueprint. The YAML below is a declarative spec for the new version.

kind: BlueprintVersion
metadata:
  name: v1
  project: defaultproject
  description: Nvidia GPU Operator
spec:
  blueprint: gpu-blueprint
  baseSystemBlueprint: default
  baseSystemBlueprintVersion: ""
  addons:
    - name: gpu-operator
      version: v1
  # cluster-scoped or namespace-scoped
  pspScope: cluster-scoped
  rafayIngress: false
  rafayMonitoringAndAlerting: true
  kubevirt: false
  # BlockAndNotify or DetectAndNotify
  driftAction: BlockAndNotify
rctl create blueprint version -f blueprint-v1.yaml

If you did not encounter any errors, you can optionally verify if everything was created correctly on the controller.

Next, we will update the cluster to use the newly created blueprint.

rctl update cluster demo-gpu-mks --blueprint gpu-blueprint --blueprint-version v1

Step 5: Verify GPU Operator

Now, let us verify whether the Nvidia GPU Operator's resources are operational on the MKS cluster.

kubectl get po -n gpu-operator-resources

You should see something like the following. Note, it will take ~6 minutes for all of the pods to get to a running state.

NAME                                                          READY   STATUS      RESTARTS   AGE
gpu-feature-discovery-clgss                                   1/1     Running     0          6m10s
gpu-operator-54b8dfbc87-rn9vd                                 1/1     Running     0          6m46s
gpu-operator-node-feature-discovery-master-645bd79495-vkwlh   1/1     Running     0          6m46s
gpu-operator-node-feature-discovery-worker-zzws7              1/1     Running     0          6m46s
nvidia-container-toolkit-daemonset-rq5mz                      1/1     Running     0          6m10s
nvidia-cuda-validator-qv24d                                   0/1     Completed   0          70s
nvidia-dcgm-exporter-tvt4s                                    1/1     Running     0          6m10s
nvidia-device-plugin-daemonset-qxssv                          1/1     Running     0          6m10s
nvidia-device-plugin-validator-k7gvc                          0/1     Completed   0          14s
nvidia-driver-daemonset-nc7w5                                 1/1     Running     0          6m28s
nvidia-operator-validator-9bzrt                               1/1     Running     0          6m10s

The GPU Operator will automatically add "required labels" to the GPU enabled worker nodes.

Recap

As of this step, you have created and applied a "cluster blueprint" with the GPU Operator as one of the addons.

You are now ready to move on to the next step where you will deploy a "GPU Workload" and review the integrated "GPU Dashboards."

Note that you can also reuse this cluster blueprint for as many clusters as you require in this project and also share the blueprint with other projects.