nimservice: {
type: "component"
description: "NIMService is the Schema for the nimservices API."
labels: {
"componentdefinition.spectrocloud.com/type": "application"
"wl.spectrocloud.com/provider": "apps.nvidia.com"
"definition.spectrocloud.com/category": "NVIDIA-NIM"
}
}
template: {
output: {
apiVersion: "apps.nvidia.com/v1alpha1"
kind: "NIMService"
metadata: {
labels: {
if parameter.labels != _|_ {
parameter.labels
}
"wl.spectrocloud.com/name": context.workloadName
"wl.spectrocloud.com/component": context.name
}
if parameter.annotations != _|_ {
annotations: parameter.annotations
}
}
spec: {
if parameter.affinity != _|_ {
affinity: parameter.affinity
}
if parameter.annotations != _|_ {
annotations: parameter.annotations
}
if parameter.args != _|_ {
args: parameter.args
}
authSecret: parameter.authSecret
if parameter.command != _|_ {
command: parameter.command
}
if parameter.draResources != _|_ {
draResources: parameter.draResources
}
if parameter.env != _|_ {
env: parameter.env
}
if parameter.expose != _|_ {
expose: parameter.expose
}
if parameter.groupID != _|_ {
groupID: parameter.groupID
}
image: parameter.image
if parameter.inferencePlatform != _|_ {
inferencePlatform: parameter.inferencePlatform
}
if parameter.labels != _|_ {
labels: parameter.labels
}
if parameter.livenessProbe != _|_ {
livenessProbe: parameter.livenessProbe
}
if parameter.metrics != _|_ {
metrics: parameter.metrics
}
if parameter.multiNode != _|_ {
multiNode: parameter.multiNode
}
if parameter.nodeSelector != _|_ {
nodeSelector: parameter.nodeSelector
}
if parameter.podAffinity != _|_ {
podAffinity: parameter.podAffinity
}
if parameter.proxy != _|_ {
proxy: parameter.proxy
}
if parameter.readinessProbe != _|_ {
readinessProbe: parameter.readinessProbe
}
if parameter.replicas != _|_ {
replicas: parameter.replicas
}
if parameter.resources != _|_ {
resources: parameter.resources
}
if parameter.router != _|_ {
router: parameter.router
}
if parameter.runtimeClassName != _|_ {
runtimeClassName: parameter.runtimeClassName
}
if parameter.scale != _|_ {
scale: parameter.scale
}
if parameter.schedulerName != _|_ {
schedulerName: parameter.schedulerName
}
if parameter.startupProbe != _|_ {
startupProbe: parameter.startupProbe
}
if parameter.storage != _|_ {
storage: parameter.storage
}
if parameter.tolerations != _|_ {
tolerations: parameter.tolerations
}
if parameter.userID != _|_ {
userID: parameter.userID
}
}
}
parameter: {
annotations?: [string]: string
labels?: [string]: string
affinity?: {
nodeAffinity?: {
preferredDuringSchedulingIgnoredDuringExecution?: [...{
preference: {
matchExpressions?: [...{
key: string
operator: string
values?: [...string]
}]
matchFields?: [...{
key: string
operator: string
values?: [...string]
}]
}
weight: int
}]
requiredDuringSchedulingIgnoredDuringExecution?: {
nodeSelectorTerms: [...{
matchExpressions?: [...{
key: string
operator: string
values?: [...string]
}]
matchFields?: [...{
key: string
operator: string
values?: [...string]
}]
}]
}
}
podAffinity?: {
preferredDuringSchedulingIgnoredDuringExecution?: [...{
podAffinityTerm: {
labelSelector?: {
matchExpressions?: [...{
key: string
operator: string
values?: [...string]
}]
matchLabels?: [string]: string
}
matchLabelKeys?: [...string]
mismatchLabelKeys?: [...string]
namespaceSelector?: {
matchExpressions?: [...{
key: string
operator: string
values?: [...string]
}]
matchLabels?: [string]: string
}
namespaces?: [...string]
topologyKey: string
}
weight: int
}]
requiredDuringSchedulingIgnoredDuringExecution?: [...{
labelSelector?: {
matchExpressions?: [...{
key: string
operator: string
values?: [...string]
}]
matchLabels?: [string]: string
}
matchLabelKeys?: [...string]
mismatchLabelKeys?: [...string]
namespaceSelector?: {
matchExpressions?: [...{
key: string
operator: string
values?: [...string]
}]
matchLabels?: [string]: string
}
namespaces?: [...string]
topologyKey: string
}]
}
podAntiAffinity?: {
preferredDuringSchedulingIgnoredDuringExecution?: [...{
podAffinityTerm: {
labelSelector?: {
matchExpressions?: [...{
key: string
operator: string
values?: [...string]
}]
matchLabels?: [string]: string
}
matchLabelKeys?: [...string]
mismatchLabelKeys?: [...string]
namespaceSelector?: {
matchExpressions?: [...{
key: string
operator: string
values?: [...string]
}]
matchLabels?: [string]: string
}
namespaces?: [...string]
topologyKey: string
}
weight: int
}]
requiredDuringSchedulingIgnoredDuringExecution?: [...{
labelSelector?: {
matchExpressions?: [...{
key: string
operator: string
values?: [...string]
}]
matchLabels?: [string]: string
}
matchLabelKeys?: [...string]
mismatchLabelKeys?: [...string]
namespaceSelector?: {
matchExpressions?: [...{
key: string
operator: string
values?: [...string]
}]
matchLabels?: [string]: string
}
namespaces?: [...string]
topologyKey: string
}]
}
}
annotations?: [string]: string
args?: [...string]
authSecret: string
command?: [...string]
draResources?: [...{
claimCreationSpec?: {
devices: [...{
attributeSelectors?: [...{
key: string
op: *"Equal" | "NotEqual" | "GreaterThan" | "GreaterThanOrEqual" | "LessThan" | "LessThanOrEqual"
value?: {
boolValue?: bool
intValue?: int
stringValue?: string
versionValue?: string
}
}]
capacitySelectors?: [...{
key: string
op: *"Equal" | "NotEqual" | "GreaterThan" | "GreaterThanOrEqual" | "LessThan" | "LessThanOrEqual"
value: _
}]
celExpressions?: [...string]
count: int
deviceClassName: *"gpu.nvidia.com" | string
driverName?: *"gpu.nvidia.com" | string
name: string
}]
generateName?: string
}
requests?: [...string]
resourceClaimName?: string
resourceClaimTemplateName?: string
}]
env?: [...{
name: string
value?: string
valueFrom?: {
configMapKeyRef?: {
key: string
name?: *"" | string
optional?: bool
}
fieldRef?: {
apiVersion?: string
fieldPath: string
}
resourceFieldRef?: {
containerName?: string
divisor?: _
resource: string
}
secretKeyRef?: {
key: string
name?: *"" | string
optional?: bool
}
}
}]
expose?: {
ingress?: {
annotations?: [string]: string
enabled?: bool
spec?: {
defaultBackend?: {
resource?: {
apiGroup?: string
kind: string
name: string
}
service?: {
name: string
port?: {
name?: string
number?: int
}
}
}
ingressClassName?: string
rules?: [...{
host?: string
http?: {
paths: [...{
backend: {
resource?: {
apiGroup?: string
kind: string
name: string
}
service?: {
name: string
port?: {
name?: string
number?: int
}
}
}
path?: string
pathType: string
}]
}
}]
tls?: [...{
hosts?: [...string]
secretName?: string
}]
}
}
service?: {
annotations?: [string]: string
grpcPort?: int
metricsPort?: int
name?: string
port?: int
type?: string
}
}
groupID?: int
image: {
pullPolicy?: string
pullSecrets?: [...string]
repository: string
tag: string
}
inferencePlatform?: *"standalone" | "kserve"
labels?: [string]: string
livenessProbe?: {
enabled?: bool
probe?: {
exec?: {
command?: [...string]
}
failureThreshold?: int
grpc?: {
port: int
service?: *"" | string
}
httpGet?: {
host?: string
httpHeaders?: [...{
name: string
value: string
}]
path?: string
port: _
scheme?: string
}
initialDelaySeconds?: int
periodSeconds?: int
successThreshold?: int
tcpSocket?: {
host?: string
port: _
}
terminationGracePeriodSeconds?: int
timeoutSeconds?: int
}
}
metrics?: {
enabled?: bool
serviceMonitor?: {
additionalLabels?: [string]: string
annotations?: [string]: string
interval?: string
scrapeTimeout?: string
}
}
multiNode?: {
backendType?: *"lws" | string
mpi?: {
mpiStartTimeout: int
}
parallelism: {
pipeline?: int
tensor?: int
}
}
nodeSelector?: [string]: string
podAffinity?: {
preferredDuringSchedulingIgnoredDuringExecution?: [...{
podAffinityTerm: {
labelSelector?: {
matchExpressions?: [...{
key: string
operator: string
values?: [...string]
}]
matchLabels?: [string]: string
}
matchLabelKeys?: [...string]
mismatchLabelKeys?: [...string]
namespaceSelector?: {
matchExpressions?: [...{
key: string
operator: string
values?: [...string]
}]
matchLabels?: [string]: string
}
namespaces?: [...string]
topologyKey: string
}
weight: int
}]
requiredDuringSchedulingIgnoredDuringExecution?: [...{
labelSelector?: {
matchExpressions?: [...{
key: string
operator: string
values?: [...string]
}]
matchLabels?: [string]: string
}
matchLabelKeys?: [...string]
mismatchLabelKeys?: [...string]
namespaceSelector?: {
matchExpressions?: [...{
key: string
operator: string
values?: [...string]
}]
matchLabels?: [string]: string
}
namespaces?: [...string]
topologyKey: string
}]
}
proxy?: {
certConfigMap?: string
httpProxy?: string
httpsProxy?: string
noProxy?: string
}
readinessProbe?: {
enabled?: bool
probe?: {
exec?: {
command?: [...string]
}
failureThreshold?: int
grpc?: {
port: int
service?: *"" | string
}
httpGet?: {
host?: string
httpHeaders?: [...{
name: string
value: string
}]
path?: string
port: _
scheme?: string
}
initialDelaySeconds?: int
periodSeconds?: int
successThreshold?: int
tcpSocket?: {
host?: string
port: _
}
terminationGracePeriodSeconds?: int
timeoutSeconds?: int
}
}
replicas?: int
resources?: {
claims?: [...{
name: string
request?: string
}]
limits?: {...}
requests?: {...}
}
router?: {
annotations?: [string]: string
gateway?: {
httpRoutesEnabled?: bool
name: string
namespace: string
}
hostDomainName?: string
ingress?: {
ingressClass: string
tlsSecretName?: string
}
}
runtimeClassName?: string
scale?: {
annotations?: [string]: string
enabled?: bool
hpa?: {
behavior?: {
scaleDown?: {
policies?: [...{
periodSeconds: int
type: string
value: int
}]
selectPolicy?: string
stabilizationWindowSeconds?: int
tolerance?: _
}
scaleUp?: {
policies?: [...{
periodSeconds: int
type: string
value: int
}]
selectPolicy?: string
stabilizationWindowSeconds?: int
tolerance?: _
}
}
maxReplicas: int
metrics?: [...{
containerResource?: {
container: string
name: string
target: {
averageUtilization?: int
averageValue?: _
type: string
value?: _
}
}
external?: {
metric: {
name: string
selector?: {
matchExpressions?: [...{
key: string
operator: string
values?: [...string]
}]
matchLabels?: [string]: string
}
}
target: {
averageUtilization?: int
averageValue?: _
type: string
value?: _
}
}
object?: {
describedObject: {
apiVersion?: string
kind: string
name: string
}
metric: {
name: string
selector?: {
matchExpressions?: [...{
key: string
operator: string
values?: [...string]
}]
matchLabels?: [string]: string
}
}
target: {
averageUtilization?: int
averageValue?: _
type: string
value?: _
}
}
pods?: {
metric: {
name: string
selector?: {
matchExpressions?: [...{
key: string
operator: string
values?: [...string]
}]
matchLabels?: [string]: string
}
}
target: {
averageUtilization?: int
averageValue?: _
type: string
value?: _
}
}
resource?: {
name: string
target: {
averageUtilization?: int
averageValue?: _
type: string
value?: _
}
}
type: string
}]
minReplicas?: int
}
}
schedulerName?: string
startupProbe?: {
enabled?: bool
probe?: {
exec?: {
command?: [...string]
}
failureThreshold?: int
grpc?: {
port: int
service?: *"" | string
}
httpGet?: {
host?: string
httpHeaders?: [...{
name: string
value: string
}]
path?: string
port: _
scheme?: string
}
initialDelaySeconds?: int
periodSeconds?: int
successThreshold?: int
tcpSocket?: {
host?: string
port: _
}
terminationGracePeriodSeconds?: int
timeoutSeconds?: int
}
}
storage?: {
hostPath?: string
nimCache?: {
name?: string
profile?: string
}
pvc?: {
annotations?: [string]: string
create?: bool
name?: string
size?: string
storageClass?: string
subPath?: string
volumeAccessMode?: string
}
readOnly?: bool
sharedMemorySizeLimit?: _
}
tolerations?: [...{
effect?: string
key?: string
operator?: string
tolerationSeconds?: int
value?: string
}]
userID?: int
}
}