Skip to lesson

NVIDIANVIDIA-Certified Professional: Agentic AI2026-107.2 Deploy NVIDIA NIM microservices for high-performance inference.

Choose how Kubernetes manages NIM deployments

Completed by the knowledge check

Learning objective

Deploy NIM on Kubernetes with Helm or the NIM Operator.

Core idea

Helm and the NIM Operator give you different application management interfaces. With the NIM chart, you manage a release through chart values. With the Operator, you declare NIM-specific resources, including NIMService and optional NIMCache, and its controller manages the corresponding workloads.

Both paths still require usable GPU nodes, compatible model profiles, artifact access, and storage. Installing a controller or submitting a release does not prove the model can serve requests. See 4.4.1 for GPU Pod admission and 7.2.1 for endpoint verification. Here the choice is which interface your platform team owns and how that interface connects the deployment’s dependencies.

How it works

Deploy a chart release

The NIM Helm page specifies Kubernetes 1.26 or later and Helm 3.0.0 or later, together with GPU-capable nodes and persistent storage for model caching. Check the cluster’s supported release separately: a documented minimum is not a recommendation to operate an unsupported Kubernetes release.

Fetch the versioned nim-llm chart from https://helm.ngc.nvidia.com/nim/charts/, using the chart version selected from the NGC Catalog. The documented download uses NGC credentials. After extracting it, inspect helm show readme nim-llm/ and helm show values nim-llm/; values are an interface owned by the chart version, not arbitrary container settings.

The essential values establish distinct deployment concerns:

  • image.repository and image.tag select the container and its version.
  • imagePullSecrets supplies registry credentials when required.
  • model.ngcAPISecret supplies model-download credentials when required.
  • persistence configures cache storage, including its storage class, size, and access mode.
  • resources sets resource requirements, including limits.nvidia.com/gpu according to the selected profile.
  • env supplies runtime variables such as NIM_MODEL_PROFILE.
  • customArgs supplies backend arguments as separate option and value list entries.

After preparing values.yaml, helm install my-nim nim-llm/ -f values.yaml creates the release. The deployment artifact worth reviewing is the combination of chart version and values, including its profile selector. Verify the resulting workload and endpoint.

Use customArgs rather than replacing NIM_PASSTHROUGH_ARGS with only your additions. The chart documentation warns that Kubernetes replaces an image-provided environment value rather than appending to it. customArgs preserves the image’s passthrough value and applies the added arguments at direct-argument priority. The flags still belong to the backend in the selected image; a vLLM argument cannot be assumed to work for SGLang.

Declare an Operator-managed service

On Kubernetes, NVIDIA documents the nvidia/k8s-nim-operator Helm chart; on OpenShift, it documents the web console’s Software Catalog (OperatorHub before OpenShift 4.20). The operator-sdk installation path is marked development-only. Installing the controller is a platform step; creating NIMService objects deploys the application.

The installation page requires the GPU Operator, cluster-admin access, and either an active NVIDIA AI Enterprise subscription or NVIDIA Developer Program membership. See 4.4.1 for GPU Operator responsibilities. Include those prerequisites when deciding who owns the Operator.

NIMService uses apiVersion: apps.nvidia.com/v1alpha1 and represents the resource nimservices.apps.nvidia.com. Its spec.image identifies repository, tag, pull policy, and pull secrets. spec.authSecret identifies the generic secret used for model-download credentials. The service reference marks that field required.

Use spec.resources.limits.nvidia.com/gpu for the GPU allocation and spec.replicas for a fixed replica count. spec.env carries environment variables, and spec.args carries container arguments for a single-node service. These are resource fields, not Helm values. For example, imagePullSecrets belongs to the chart interface, while the Operator examples use spec.image.pullSecrets.

The default Operator probes target /v1/health/live and /v1/health/ready. Customize them through spec.livenessProbe.probe and spec.readinessProbe.probe when the deployment needs a different probe specification. Preserve the difference between container liveness and loaded-model readiness established in 7.2.1.

Choose cached models or service-owned downloads

NIMCache, represented by nimcaches.apps.nvidia.com, manages model caching separately from the service. A NIMService attaches it through spec.storage.nimCache.name, with an optional spec.storage.nimCache.profile. Inspect the cache’s .status.profiles to identify the cached profile instead of inventing a name. Cache status Ready means the download and caching job succeeded; it is not the service’s inference readiness.

Without a separate cache resource, spec.storage.pvc lets the service download profiles into persistent storage. Its create, name, size, storageClass, and volumeAccessMode fields define that storage arrangement. If both storage paths are set, spec.storage.nimCache takes precedence over spec.storage.pvc.

The cache page documents an operational ownership consequence: deleting a NIMCache created with spec.storage.pvc.create: true also deletes the Operator-created persistent volume and claim. Establish who owns that object’s deletion before treating it as disposable deployment metadata.

When a cache reports NotReady or no status, inspect the cache Pod and events. NVIDIA documents large image downloads as one cause of prolonged ContainerCreating and temporary ReconcileFailed events. Confirm whether the image is still downloading before deleting and recreating the cache. A genuine Failed cache state instead means the job failed to download and cache the profile; investigate that job’s outcome.

Budget upgrade capacity and verify service

The chart defaults to a StatefulSet. Confirm its update strategy with helm show values nim-llm/ for the chosen chart version; statefulSet.enabled alone identifies the workload kind. A StatefulSet’s default .spec.updateStrategy.type: RollingUpdate deletes and recreates one Pod at a time, waiting for each replacement to become Running and Ready. It can reuse the released GPU without a surge replica.

Set statefulSet.enabled: false for Deployment mode; only then does the chart’s deployment.strategy apply. Compare the upgrade behaviors:

BehaviorGPU headroomAvailability cost
StatefulSet default RollingUpdateReuses each deleted Pod’s GPUFive of six replicas serve during six sequential replacements
Deployment RollingUpdate as described by NVIDIARoom for a replacement before the old Pod terminatesRequires spare capacity for that surge
Deployment RecreateNo surge GPU neededAll replicas stop before replacements start

Budget sequential replacement time as well as spare GPUs. A delete-first rolling update avoids full interruption but can exceed the maintenance window when model loading is slow.

Inspect Pods, forward the Helm service with kubectl port-forward svc/my-nim-nim-llm 8000:8000, and check /v1/health/ready. Then discover the model and send a representative API request as in 7.2.1. For an Operator deployment, inspect the NIMCache and NIMService resources as well as their Pods.

Key distinctions and trade-offs

Choose the workload interface deliberately:

OptionDeciding conditionMechanismOwnership and cost
NIM chartTeam already manages model releases through chart valuesnim-llm, values.yaml, helm installTeam owns release values and storage configuration
NIM OperatorPlatform standardizes NIM-specific service and cache resourcesNIMService, NIMCacheGPU Operator, cluster-admin access, subscription or membership, controller and cache lifecycle
Separate cacheModel preparation needs an independently observable lifecyclespec.storage.nimCacheExtra object and explicit deletion consequences
Direct persistent storageService owns profile download into its volumespec.storage.pvcDownload readiness remains part of service preparation

Helm also installs the Operator, so “uses Helm” alone does not identify who manages the serving workload. Read whether the proposed artifact is chart values or a NIM custom resource.

Helm appears on both paths, so whether chart values or a NIM custom resource follows it identifies who manages the serving workload.

Helm appears on both paths, so chart values or a NIM custom resource identifies who manages the serving workloadTwo lanes. In the NIM chart lane, chart values go through helm install to a release, which defaults to a StatefulSet. In the NIM Operator lane, the k8s-nim-operator Helm chart installs the controller, which manages the workloads corresponding to a NIMService; a NIMService optionally attaches a NIMCache. Both lanes end at the same check of /v1/health/ready.NIM OperatorNIM charthelm installdefaults toinstallsmanagesattachesk8s-nim-operatorHelm chartControllerNIMServiceNIMCacheCorrespondingworkloadsChart valuesReleaseStatefulSetCheck/v1/health/ready

Architecture / decision scenario

A legal-document research service has six approved one-GPU replicas and exactly six allocatable GPUs. Its two-person team manages Helm releases within a 10-minute maintenance window. Rehearsals measure 75 seconds from live to ready and 15 seconds for termination, scheduling, and reaching live: 90 seconds per replacement.

The platform owner confirms StatefulSet default rolling behavior in the selected chart values. Six sequential replacements take about 540 seconds, leaving five replicas serving during each replacement. That fits the 600-second window without a seventh GPU. The team keeps this mode instead of Deployment RollingUpdate, whose described surge cannot fit, or Deployment Recreate, which would interrupt all six replicas. If measured replacement time exceeded 100 seconds, the sequential estimate would exceed the window and require a revised window or an explicitly accepted interruption.

A proposal to standardize independently prepared caches is a separate reason to evaluate NIMCache and NIMService. The platform team must accept the GPU Operator prerequisite, cluster-admin installation, subscription or membership requirement, controller operations, and cache deletion ownership. Adding the Operator alone does not shorten the measured model-loading time.

Common exam traps

  • Assuming Helm and Operator are mutually exclusive installation tools.
  • Passing Helm value names as NIMService fields.
  • Confusing image-pull credentials with model-download credentials.
  • Treating cache Ready as proof of inference readiness.
  • Setting deployment.strategy while leaving StatefulSet mode enabled.
  • Deleting an Operator-created cache without accounting for its volume lifecycle.

What to remember

Choose chart values or NIM custom resources according to who operates the deployment. Configure image access, profile, GPUs, and persistent model storage through that interface, then verify cache preparation and actual inference separately. Upgrade policy must fit real GPU headroom.

Knowledge check

References