Microservice Manifest#
The full manifest of the UCS microservice is below:
type: msapplication
specVersion: 2.0.0
name: ucf.svc.ia-animation-graph-microservice
displayName: "Animation Graph Microservice"
chartName: ia-animation-graph-microservice
description: "Animation Graph Microservice"
version: 1.0.1
tags: []
keywords: []
eula: ""
nSpectId: NSPECT-RDWK-7253
publish: false
egress-endpoints: []
ingress-endpoints:
- name: anim-server
description: "Animation data gRPC server"
protocol: TCP
scheme: grpc
mandatory: True
data-flow: in-out
- name: http-api
description: "HTTP API"
protocol: TCP
scheme: http
mandatory: True
data-flow: in
params:
debug:
#> description: Debug 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
logEachSentAnimationDataMessage: false
#> description: Log each animation data message that is sent on the grpc stream.
#> type: boolean
logFrameInterval: 30
#> description: Enable debug output of each x-th frame.
#> type: integer
httpServer:
#> description: HTTP API server configuration
#> type: object
port: 8020
#> description: The port where the http API server is served.
#> type: integer
animationServer:
#> description: GRPC server for pulling and pushing animation data
#> type: object
port: 51000
#> description: The port where the animation data server is served.
#> type: integer
maxStreamCapacity: 3
#> description: The max number of parallel streams, that are supported for each instance of the microservice.
#> type: integer
animationSource:
#> description: GRPC animation source
#> type: object
bufferSize: 0.1
#> type: number
#> description: The buffer size of animation data input stream in seconds.
animationOutput:
#> description: GRPC animation output
#> type: object
frameRate: 30.0
#> description: The frames per second rate at which the data is sampled and streamed.
#> type: number
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
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
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: "4Gi"
#> 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: 8
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: []
testerPods: # At least one tester pod is required
- name: animation-graph-deployment # Name of the test pod
startSignature: "SETTINGS" # Signature to look for in the logs indicating start of tests. Regex is accepted
endSignature: "Animation graph microservice readiness probe: OK" # Signature to look for in the logs indicating end of tests. Regex is accepted
errorSignatures: # Signatures that indicate test failures. Regex is accepted
- "UCF_MS_VALIDATION_RESULT: Fail"
---
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: IAAGMS_HTTP_SERVER_PORT
value: "(($params.httpServer.port))"
- name: IAAGMS_KIT_PRINT_SETTINGS
value: "(($params.kit.printSettings))"
- name: IAAGMS_ANIMATION_SERVER_PORT
value: "(($params.animationServer.port))"
- name: IAAGMS_ANIMATION_SERVER_MAX_STREAM_CAPACITY
value: "(($params.animationServer.maxStreamCapacity))"
- name: IAAGMS_ANIMATION_SOURCE_BUFFER_SIZE
value: "(($params.animationSource.bufferSize))"
- name: IAAGMS_ANIMATION_OUTPUT_FRAME_RATE
value: "(($params.animationOutput.frameRate))"
- name: IAAGMS_DEBUG_LOG_ENABLED
value: "(($params.debug.logEnabled))"
- name: IAAGMS_DEBUG_LOG_EACH_RECEIVED_ANIMATION_DATA_MESSAGE
value: "(($params.debug.logEachReceivedAnimationDataMessage))"
- name: IAAGMS_DEBUG_LOG_EACH_SENT_ANIMATION_DATA_MESSAGE
value: "(($params.debug.logEachSentAnimationDataMessage))"
- name: IAAGMS_DEBUG_LOG_FRAME_INTERVAL
value: "(($params.debug.logFrameInterval))"
- name: IAAGMS_SCENE_DIRECTORY
value: "/home/ace/asset"
- name: IAAGMS_SCENE_FILENAME
value: "(($params.scene.filename))"
# 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-animation-graph-microservice
tag: 1.0.1
pullPolicy: IfNotPresent
command: [
"bash",
"/opt/scripts/startup.sh",
"--/app/printConfig=$(IAAGMS_KIT_PRINT_SETTINGS)",
"--/exts/omni.services.transport.server.http/port=$(IAAGMS_HTTP_SERVER_PORT)",
"$params.kit.settings",
]
livenessProbe:
httpGet:
path: /liveness
port: $params.httpServer.port
initialDelaySeconds: 20
periodSeconds: 5
timeoutSeconds: 300
readinessProbe:
httpGet:
path: /readiness
port: $params.httpServer.port
initialDelaySeconds: 20
periodSeconds: 5
timeoutSeconds: 300
ports:
- containerPort: $params.animationServer.port
name: anim-server
protocol: TCP
- containerPort: $params.httpServer.port
name: http-api
protocol: TCP
resources:
requests:
memory: $params.deployment.memoryRequest
limits:
memory: $params.deployment.memoryLimit
- name: restartPolicy
type: ucf.k8s.restartPolicy
parameters:
policy: Always # Always / OnFailure / Never
- name: podSecurityContext
type: ucf.k8s.podSecurityContext
parameters:
runAsGroup: 1000
runAsUser: 1000
- name: service
type: ucf.k8s.service
parameters:
ports:
- name: anim-server
port: $params.animationServer.port
protocol: TCP
- name: http-api
port: $params.httpServer.port
protocol: TCP
- name: asset-volume
type: ucf.k8s.volume
parameters:
persistentVolumeClaim:
claimName: ia-animation-graph-microservice-assets
- 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: assets-volume-mount
type: ucf.appspec.defaultVolumeMount
parameters:
name: asset-volume
mountPath: /home/ace/asset
#externalTrafficPolicy: # Cluster / Local. Allowed when service type is NodePort or LoadBalancer