Upgrade prerequisites and recovery
Follow your version-specific upgrade guide. Versions below refer to stacks or NVCA, not umbrella releases. Inspect queues only for failed drains or stuck deployments.
Task worker images
When to use: upgrading from Self-Managed 1.0.1 or earlier to 1.0.8 or later versions, if you run tasks. Otherwise, skip this section.
Task image names and registry wiring changed on this path. Before maintenance:
- Select the images from the target’s manifest.
The Self-Managed 1.0.10 inventory
selects
nvcr.io/nvidia/nvcf/nvcf-worker-init-oss:1.2.4andnvcr.io/nvidia/nvcf/nvcf-worker-task-oss:1.1.6. For another target, use that release’s inventory. - Render the target with your registry settings. Resolve the paths below, then mirror both images to those paths, preserving each required architecture.
- Run the pull check below on every affected compute cluster and node pool. Continue only when both images succeed. Package availability is a separate prerequisite; an image or inventory does not provide the stack archive.
Resolve the target image paths
Use Bash, jq and Mike Farah’s yq v4. Set TASK_RENDER to the target render’s
helm-nvcf-nvct-api/templates directory. Its configmap-remote-config.yaml contains
nvct-api-remote-config; configmap-env.yaml contains nvct-api-env by default.
These commands use the rendered files, including any configured name overrides.
The two output lines are the init and task worker destinations. Compare their names and tags or digests with the selected inventory before copying images.
Verify pulls from a compute node
Keep TASK_IMAGES from the previous commands. Select an existing task namespace,
node, service account and the pull secrets intended for the target registry.
Repeat for each node pool and architecture in each compute cluster. Add the
task’s tolerations to the probe spec if the node has NoExecute taints.
The probe uses --help because these images have no shell. Record the cluster,
node and image digests. On failure, inspect kt describe "pod/$pod", correct
access or image selection, and repeat. Delete that probe after collecting its
evidence. A nonempty imageID proves the runtime resolved the image. The container may
still be running or exit unsuccessfully; neither outcome invalidates the pull
check. This does not verify task execution.
Deployments stuck after a NATS restart
When to use: NATS will restart while any compute cluster runs NVCA 3.10.0 through 3.10.2, or deployments hang after a NATS restart.
- Before rolling NATS, upgrade every affected compute cluster to NVCA 3.10.3 or a later compatible patch. Preserve registration. Skip clusters already fixed; for other release trains, use your guide’s corrected selection. Compute Plane 1.0.0 selects NVCA 3.10.0; 1.0.5 selects 3.10.3.
- Allow the consumer’s
ack_waitinterval for redelivery after the agent upgrade. Restarting the old agent alone does not fix reused message IDs. - Repeat the guide’s complete drain gate. If creation messages remain or deployments stay stuck, inspect them below. Keep pending work intact.
Inspect retained creation messages
When to use: creation messages or stuck deployments remain after the drain wait. Keep deployments, scaling, invocations, and tasks paused at their callers.
-
Hold the NATS rollout. Select the control-plane context and the NATS context owning the stream (
defaultunless customized). Use the chart’snats-boxpod and a new private evidence directory. Run these steps in one shell. -
Check
state.messagesinstream-before.json. If zero, return to the complete drain gate; a stuck deployment needs another diagnosis. Otherwise, record each consumer’sack_wait, pending, and acknowledgement-pending counts withnats_read consumer info "$STREAM" <consumer> --json. -
Inspect retained sequences, starting at
state.first_seq. Gaps can represent deleted or acknowledged messages. Keep message contents private. -
Capture requests from every affected compute cluster. Set a unique cluster label for the filename; each capture gets a new file, including repeat runs.
-
Match
requestId,ncaId, deployment and function/version or task IDs againstICMSRequest.specand the owning account’s API. Do not rely onSQSMessageID, which can collide. For a function:For a task, use
task get <message-task-id> --jsonwith the same CLI and account configuration. A failed read or unverified 404 does not prove the request is obsolete.
If messages remain
When to use: corrected agents have had time to redeliver work, but the drain gate still fails, or any consuming cluster cannot be checked.
- Stop the upgrade, keep callers paused, and share the private evidence with
NVIDIA support. Do not purge the stream, delete messages by sequence, or
remove active
ICMSRequestobjects. A restarted stream can reuse a sequence; comparing a message before deletion cannot prevent that race. - Resume the NATS rollout only after the complete drain gate passes on every server and affected queue. After upgrading, verify the original function still invokes and a new deployment succeeds.