Application & Profile service

Before a containerized Kit Application can be streamed, it must be registered with the Application & Profile service (APS).

Omniverse applications, application versions, and application profiles are managed using Kubernetes Custom Resource Definitions (CRDs) deployed to the cluster and used by the APS.

Kubernetes CRDs allow you to extend Kubernetes with your own custom resources. They are a way to define new resource types in addition to standard Kubernetes resources and this is a common method for managing complex applications or infrastructure that do not fit neatly into the existing Kubernetes object model.

The CRDs used by the APS describe what an application, application version and application profile look like. The benefit is that the state is completely managed by Kubernetes, so no additional configmaps, restarts, or external databases are required, and can be managed as any other resource in Kubernetes. An additional benefit is that this allows for the management of applications via CI/CD or by users with specific permissions to create them using standard RBAC, or similar permissions without necessarily having to make the API available.

Inspecting the CRDs

Three CRDs are created as part of the deployment of the AP service.

  • applications.omniverse.nvidia.com

  • applicationversions.omniverse.nvidia.com

  • applicationprofiles.omniverse.nvidia.com

Each can be inspected using:

kubectl describe crd applications.omniverse.nvidia.com

The output resembles the following:

Name:           applications.omniverse.nvidia.com
Namespace:
Labels:         <none>
Annotations:    <none>
API Version:    apiextensions.k8s.io/v1
Kind:           CustomResourceDefinition
Metadata:
    Creation Timestamp:    2024-04-10T11:10:06Z
    Generation:            1
    Resource Version:      1013264
    UID:                   73569789-fdf6-4eed-b69b-1638a802f97b
Spec:
    Conversion:
        Strategy:    None
    Group:    omniverse.nvidia.com
    Names:
        Kind:         Application
        List Kind:    ApplicationList
        Plural:       applications
        Singular:     application
    Scope:                Namespaced
    Versions:
        Name:    v1
        Schema:
        openAPIV3Schema:
        Properties:
        Spec:
            Properties:
            Description:
            Type:           string
            Name:
            Type:           string
            Type:           object
        Type:               object
        Served:     true
        Storage:    true
Status:
    Accepted Names:
        Kind:                    Application
        List Kind:               ApplicationList
        Plural:                  applications
        Singular:                application
    Conditions:
        Last Transition Time:    2024-04-10T11:10:06Z
        Message:                 no conflicts found
        Reason:                  NoConflicts
        Status:                  True
        Type:                    NamesAccepted
        Last Transition Time:    2024-04-10T11:10:06Z
        Message:                 the initial names have been accepted
        Reason:                  InitialNamesAccepted
        Status:                  True
        Type:                    Established
    Stored Versions:
        v1
Events:    <none>

The spec section defines what is needed for an Application to be registered. The ApplicationVersion and ApplicationProfile CRDs have equivalent sections.

The following section explains creating these applications, versions, and profiles.