OVCC: Deployment#

Configuration#

First follow the configuration guide to craft a values.yaml for your environment.

Deployment Steps#

Warning

Replace <ngc-api-key> in the following commands with your org’s access token or your NGC personal key with access to nvidia/omniverse NGC repository.

1. Configure Helm#

If the chart repo nvidia/omniverse is not setup, execute the following to add the repo and update the local chart index.

To review your existing chart repositories run the following.

helm repo list

If https://helm.ngc.nvidia.com/nvidia/omniverse is not listed, run the following to setup the chart repository.

helm repo add omniverse https://helm.ngc.nvidia.com/nvidia/omniverse \
    --username '$oauthtoken' \
    --password "<ngc-api-key>"

helm repo update

2. Prepare Namespace#

Create the Kubernetes namespace where the service will be deployed, if it doesn’t already exist. Skip this step if the target namespace already exists.

# Create the namespace if does not already exist.
kubectl create namespace ovcc

3. Create Required Secrets#

  • Image Pull Secret Create a secret to allow Kubernetes to access the NGC registry.

    # Setup the docker-registry secret.
    kubectl create secret docker-registry ngc-container-pull \
       --namespace ovcc \
       --docker-server=nvcr.io \
       --docker-username='$oauthtoken' \
       --docker-password=<ngc-api-key>
    

    Important

    The secret name ngc-container-pull must match the one specified in your Helm values under image.pullSecrets.

  • (Optional) TLS Secret If you are enabling TLS for a production deployment, follow the TLS guide to create and configure TLS secrets.

4. Install Helm Chart#

Using the prepared values file, install the ovcontentcache Helm chart.

helm install ovcc omniverse/ovcontentcache \
    --version 4.0.4 \
    --namespace ovcc \
    -f values.yaml

5. Verify Deployment#

After installation, verify that OVCC pods are running and healthy:

# Check all OVCC resources
kubectl get all -n ovcc -l app.kubernetes.io/instance=ovcc

# Check pod status
kubectl get pods -n ovcc -l app.kubernetes.io/instance=ovcc

# View pod logs
kubectl logs -n ovcc -l app.kubernetes.io/instance=ovcc -f --all-containers=true

Verify Service Endpoints:

OVCC creates two services:

  • OVCC Service: Main cache service on port 14128

  • Nucleus Service: Large File Transfer (LFT) service on port 14129

# Check services
kubectl get svc -n ovcc -l app.kubernetes.io/instance=ovcc

# Verify service endpoints
kubectl get endpoints -n ovcc -l app.kubernetes.io/instance=ovcc

Test Cache Connectivity (from within cluster):

You can test connectivity to OVCC from a pod within the cluster:

# Test HTTP connection to S3 backend via cache
curl -v http://ovcc.ovcc.svc.cluster.local:14128/unittests/stat/empty.txt \
  -H 'Host: omniverse-storage-service-cicd-public.s3.us-west-2.amazonaws.com'

# If TLS is enabled, test HTTPS connection
curl -v https://ovcc.ovcc.svc.cluster.local:14128/unittests/stat/empty.txt \
  -H 'Host: omniverse-storage-service-cicd-public.s3.us-west-2.amazonaws.com'

Internal Access: With service.type: ClusterIP (default), OVCC is accessible within the Kubernetes cluster at:

  • OVCC Service: http://ovcc.ovcc.svc.cluster.local:14128

  • Nucleus Service: http://ovcc.ovcc.svc.cluster.local:14129

If TLS is enabled, use https:// instead of http://.

External Access: If required, configure external access via service.type: LoadBalancer in Helm values or by deploying a separate Ingress resource targeting the OVCC ClusterIP service.

Upgrading from USD Content Cache (UCC)#

Important

Prefer reinstalling OVCC

Existing UCC installations can set compat.useUccDefaults=true to keep UCC-era resource names, TLS secret defaults, metric prefix, and cache paths during an in-place helm upgrade. Use that flag only when preserving an existing release and its PVC names is required. For new deployments, uninstall the old release, remove unused PVCs, and install OVCC fresh.

What changes when you move from UCC to OVCC:

  • Helm chart name on NGC: ovcontentcache (was usd-content-cache).

  • Kubernetes and Helm release names: ovcc by default, unless you set compat.useUccDefaults for an in-place upgrade that keeps the UCC-era names.

  • Service URL pattern is unchanged in shape: http://<fullname>.<namespace>.svc.cluster.local:14128 (the default example uses ovcc.ovcc).

Uninstall Instructions#

  1. Uninstall Helm Chart

    helm uninstall ovcc -n ovcc
    
  2. Remove Unused Persistent Volumes

    Important

    Orphaned Data Will Remain Persistent volumes created by the installation are not cleaned up by helm or Kubernetes. New/re-installations will not use pre-existing volumes.

    It is recommended to remove unused PVCs after running the uninstall steps above.

    # Remove **all** persistent volumes that are not attached to pods from the
    # given namespace.
    kubectl delete pvc --all -n ovcc
    

Summary#

This guide covered the deployment steps for OVCC, including Helm repository setup, namespace creation, secret configuration, and chart installation. After deployment, verify that OVCC pods are running and healthy in your cluster.

For detailed information on configuring OVCC settings such as storage sizing, cache behavior, and monitoring, refer to the configuration guide.