Microservice Manifest#
The full manifest of the UCS microservice is below:
type: msapplication
specVersion: 2.0.0
name: ucf.svc.ia-omniverse-renderer-microservice
displayName: Omniverse Renderer Microservice
chartName: ia-omniverse-renderer-microservice
description: Omniverse Renderer Microservice
version: 1.0.1
tags: []
keywords: []
eula: ""
nSpectId: NSPECT-RDWK-7253
publish: false
egress-endpoints:
- name: stream-output
description: "Sending video and audio as RTP over UDP stream"
protocol: UDP
scheme: none
mandatory: False
data-flow: out
- name: rtp-negot
description: "RTP over UDP port negotiation for Livestream"
protocol: TCP
scheme: grpc
mandatory: False
data-flow: in-out
- name: anim-source
description: "Animation data input gRPC stream"
protocol: TCP
scheme: grpc
mandatory: False
data-flow: in
ingress-endpoints:
- name: http-api
description: "HTTP API"
protocol: TCP
scheme: http
mandatory: True
data-flow: in
params:
debug:
#> description: General configuration
#> type: object
logEnabled: true
#> description: Enable debug logs.
#> type: boolean
logEachReceivedAnimationDataMessage: false
#> description: Log each animation data message that is received on the grpc stream.
#> type: boolean
logFrameInterval: 30
#> description: Enable debug output of each x-th frame.
#> type: integer
showWheel: false
#> description: Show debug wheel in rendered video stream.
#> type: boolean
httpServer:
#> description: HTTP API server configuration
#> type: object
port: 8021
#> description: The port where the http API server is served.
#> type: integer
scene:
#> description: USD scene asset configuration.
#> type: object
filename: "Avatar_Scene.usda"
#> description: The name of the USD asset (e.g. `Avatar_Scene.usda`). This can be a .usda or a .usd file.
#> type: string
sceneValidationMode: "DEFAULT_SCENE_VALIDATION"
#> description: The scene validation to be performed. Possible values are NO_SCENE_VALIDATION, GENERIC_SCENE_VALIDATION, DEFAULT_SCENE_VALIDATION
#> type: string
#> enum_values: NO_SCENE_VALIDATION, GENERIC_SCENE_VALIDATION, DEFAULT_SCENE_VALIDATION
resourceDownload:
#> description: Parameters for the resource download init container to specify how and where the USD resources are downloaded.
#> type: object
remoteResourcePath: ""
#> description: The remote resource path with the USD scene assets. Will be provided as "REMOTE_RESOURCE_PATH" env variable to the resource download init container. E.g. for NGC resources looks like "<NGC_ORG>/<NGC_TEAM>/<NGC_RESOURCE_NAME>:<NGC_RESOURCE_VERSION>".
#> type: string
secretName: ""
#> description: Name of the secret, that will be mounted into the resource download init container to provide credentials. E.g. for NGC the "NGC_CLI_API_KEY".
#> type: string
image: ""
#> description: Name of the image for the resource download init container. E.g. "nvcr.io/eevaigoeixww/staging/ngc-resource-downloader:0.0.2"
#> type: string
persistentVolumeSize: "5000Mi"
#> description: The size of the volume required to store the USD scene and all its dependencies.
#> type: string
animationSource:
#> description: GRPC animation source.
#> type: object
bufferSize: 0.1
#> description: The buffer size in seconds to delay rendering.
#> type: number
livestream:
#> description: Kit Livestream related parameters.
#> type: object
rtpNegotiationHostMockingEnabled: false
#> description: Start a mock server to stream to the configured host and ports without RTP negotiation.
#> type: boolean
host: "localhost"
#> description: The host or ip where to directly send the Livestream to.
#> type: string
videoPort: 9020
#> description: The video port where to directly send the Livestream to.
#> type: integer
videoBitRate: 32777216
#> description: The video bit rate in bits per second used for the Livestream RTP video stream.
#> type: integer
videoIframeInterval: 30
#> description: The video iframe interval used for the Livestream RTP video stream.
#> type: integer
videoFrameRate: 30
#> description: The video frame rate in frames per second used for the Livestream RTP video stream.
#> type: integer
audioPort: 9021
#> description: The audio port where to directly send the Livestream to.
#> type: integer
audioDelay: 0.0
#> description: Shifts the audio RTP stream relative to the video RTP stream. Only positive value in seconds are supported. Audio is delayed relative to the video.
#> type: number
window:
#> description: Rendering window parameters.
#> type: object
width: 1280
#> description: The rendered video width.
#> type: integer
height: 720
#> description: The rendered video height.
#> type: integer
kit:
#> description: Omniverse Kit related parameters.
#> type: object
settings: ""
#> description: Additional Kit settings passed at startup (e.g. '--/app/my/setting=42 --/app/my/other/setting=true').
#> type: string
printSettings: false
#> description: Print Kit settings on startup.
#> type: boolean
deployment:
#> description: Kubernetes deployment related parameters.
#> type: object
memoryRequest: "1Gi"
#> description: Resource memory request for container.
#> type: string
memoryLimit: "32Gi"
#> description: Resource memory limit for container.
#> type: string
gpuDisableAlloc: false
#> description: When set to true, the GPU allocation is switched from hardcoded to dynamic.
#> type: boolean
tests:
- name: dummy
app: tests/dev/dummy_test.yaml
params: tests/dev/params1.yaml
ciTrigger: true
timeout: 20
duration: 6
installPreReqs: true # Whether to install foundational services
namespace: default # Kubernetes namespace
gpuNodeLabels: ""
watchAllPods: true # OR set to false and set list of pods to watch below
watchPods:
- renderer-deployment
testerPods: # At least one tester pod is required
- name: renderer-deployment # Name of the test pod
startSignature: "SETTINGS" # Signature to look for in the logs indicating start of tests. Regex is accepted
endSignature: "SCENE LOADED" # Signature to look for in the logs indicating end of tests. Regex is accepted
errorSignatures: # Signatures that indicate test failures. Regex is accepted
- "cmkacuoqqqopsvjsdnwertsunfwevosekj3823nfwe8sfduhj3289gr87hn3298bhs87y32ni9uubv8y432bngre8u"
---
spec:
- name: deployment
type: ucf.k8s.app.deployment
parameters:
apptype: statefull
statefulSetServiceName: service
extraSpecs:
podManagementPolicy: Parallel
- name: init
type: ucf.k8s.initcontainer
parameters:
image: "(($params.resourceDownload.image))"
imagePullPolicy: IfNotPresent
env:
- name: REMOTE_RESOURCE_PATH
value: "(($params.resourceDownload.remoteResourcePath))"
- name: DESTINATION_RESOURCE_PATH
value: "/home/ace/asset"
envFrom:
- secretRef:
name: "(($params.resourceDownload.secretName))"
command: ["/bin/bash", "download_resource.sh"]
- name: ms
type: ucf.k8s.container
parameters:
env:
- name: IAORMS_DEBUG_LOG_ENABLED
value: "(($params.debug.logEnabled))"
- name: IAORMS_DEBUG_LOG_EACH_RECEIVED_ANIMATION_DATA_MESSAGE
value: "(($params.debug.logEachReceivedAnimationDataMessage))"
- name: IAORMS_DEBUG_LOG_FRAME_INTERVAL
value: "(($params.debug.logFrameInterval))"
- name: IAORMS_DEBUG_SHOW_WHEEL
value: "(($params.debug.showWheel))"
- name: IAORMS_HTTP_SERVER_PORT
value: "(($params.httpServer.port))"
- name: IAORMS_SCENE_FILENAME
value: "(($params.scene.filename))"
- name: IAORMS_SCENE_DIRECTORY
value: "/home/ace/asset"
- name: IAORMS_SCENE_VALIDATION_MODE
value: "(($params.scene.sceneValidationMode))"
- name: IAORMS_ANIMATION_SOURCE_BUFFER_SIZE
value: "(($params.animationSource.bufferSize))"
- name: IAORMS_RTP_NEGOTIATION_HOST_MOCKING_ENABLED
value: "(($params.livestream.rtpNegotiationHostMockingEnabled))"
- name: IAORMS_LIVESTREAM_HOST
value: "(($params.livestream.host))"
- name: IAORMS_LIVESTREAM_VIDEO_PORT
value: "(($params.livestream.videoPort))"
- name: IAORMS_LIVESTREAM_VIDEO_BIT_RATE
value: "(($params.livestream.videoBitRate))"
- name: IAORMS_LIVESTREAM_VIDEO_IFRAME_INTERVAL
value: "(($params.livestream.videoIframeInterval))"
- name: IAORMS_LIVESTREAM_VIDEO_FRAME_RATE
value: "(($params.livestream.videoFrameRate))"
- name: IAORMS_LIVESTREAM_AUDIO_PORT
value: "(($params.livestream.audioPort))"
- name: IAORMS_LIVESTREAM_AUDIO_DELAY
value: "(($params.livestream.audioDelay))"
- name: IAORMS_WINDOW_WIDTH
value: "(($params.window.width))"
- name: IAORMS_WINDOW_HEIGHT
value: "(($params.window.height))"
- name: IAORMS_KIT_PRINT_SETTINGS
value: "(($params.kit.printSettings))"
- name: IAORMS_ANIMATION_SOURCE_HOST
value: "$egress.anim-source.address"
- name: IAORMS_ANIMATION_SOURCE_PORT
value: "$egress.anim-source.port"
- name: IAORMS_RTP_NEGOTIATION_HOST
value: "$egress.rtp-negot.address"
- name: IAORMS_RTP_NEGOTIATION_PORT
value: "$egress.rtp-negot.port"
# https://jirasw.nvidia.com/browse/TOK-2549
- name: CUDA_DISABLE_CONTROL
value: "1"
- name: GPU_DISABLE_ALLOC
value: "(($params.deployment.gpuDisableAlloc))"
image:
repository: nvcr.io/eevaigoeixww/staging/ia-omniverse-renderer-microservice
tag: 1.0.1
pullPolicy: IfNotPresent
command: [
"bash",
"/opt/scripts/startup.sh",
"--/exts/omni.services.transport.server.http/port=$(IAORMS_HTTP_SERVER_PORT)",
"--/app/printConfig=$(IAORMS_KIT_PRINT_SETTINGS)",
"--/app/window/width=$(IAORMS_WINDOW_WIDTH)",
"--/app/window/height=$(IAORMS_WINDOW_HEIGHT)",
"$params.kit.settings",
]
livenessProbe:
httpGet:
path: /liveness
port: $params.httpServer.port
initialDelaySeconds: 60
periodSeconds: 20
timeoutSeconds: 300
readinessProbe:
httpGet:
path: /readiness
port: $params.httpServer.port
initialDelaySeconds: 20
periodSeconds: 5
timeoutSeconds: 300
ports:
- containerPort: $params.httpServer.port
protocol: TCP
name: http-api
volumeMounts:
- name: cache-volume
mountPath: /home/ace/.cache/ov
resources:
requests:
memory: $params.deployment.memoryRequest
limits:
memory: $params.deployment.memoryLimit
- name: restartPolicy
type: ucf.k8s.restartPolicy
parameters:
policy: Always
- name: podSecurityContext
type: ucf.k8s.podSecurityContext
parameters:
runAsGroup: 1000
runAsUser: 1000
- name: service
type: ucf.k8s.service
parameters:
ports:
- port: $params.httpServer.port
protocol: TCP
name: http-api
- name: assets
type: ucf.k8s.pvc
parameters:
annotations:
helm.sh/resource-policy: "keep"
spec:
storageClassName: mdx-local-path
accessModes: [ReadWriteOnce]
resources:
requests:
storage: $params.resourceDownload.persistentVolumeSize
- name: asset-volume
type: ucf.k8s.volume
parameters:
persistentVolumeClaim:
claimName: ia-omniverse-renderer-microservice-assets
- name: default-assets-volume
type: ucf.appspec.defaultVolumeMount
parameters:
name: asset-volume
mountPath: /home/ace/asset
#externalTrafficPolicy: # Cluster / Local. Allowed when service type is NodePort or LoadBalancer
- name: cache
type: ucf.k8s.pvc
parameters:
annotations:
helm.sh/resource-policy: "keep"
spec:
storageClassName: mdx-local-path
accessModes: [ReadWriteOnce]
resources:
requests:
storage: 2Gi
- name: cache-volume
type: ucf.k8s.volume
parameters:
persistentVolumeClaim:
claimName: ia-omniverse-renderer-microservice-cache