From 4f2817509f28afed838c40f8c6aa27715177861b Mon Sep 17 00:00:00 2001 From: blik616287 Date: Thu, 11 Jun 2026 23:18:44 +0000 Subject: [PATCH 1/2] Add nvidia-vss-data-infrastructure 1.0.0 (upstream VSS 2.4.1) Validated on NVIDIA GB10 / DGX Spark. Pack 1.0.0 / appVersion 2.4.1. Co-Authored-By: Claude Opus 4.8 --- .../README.md | 33 +++ .../nvidia-vss-data-infrastructure-1.0.0.tgz | Bin 0 -> 61405 bytes .../logo.png | Bin 0 -> 7892 bytes .../manifests/hf-token-secret.yaml | 16 + .../manifests/vss-platform.yaml | 20 ++ .../pack.json | 28 ++ .../schema.yaml | 15 + .../values.yaml | 280 ++++++++++++++++++ 8 files changed, 392 insertions(+) create mode 100644 packs/nvidia-vss-data-infrastructure-1.0.0/README.md create mode 100644 packs/nvidia-vss-data-infrastructure-1.0.0/charts/nvidia-vss-data-infrastructure-1.0.0.tgz create mode 100644 packs/nvidia-vss-data-infrastructure-1.0.0/logo.png create mode 100644 packs/nvidia-vss-data-infrastructure-1.0.0/manifests/hf-token-secret.yaml create mode 100644 packs/nvidia-vss-data-infrastructure-1.0.0/manifests/vss-platform.yaml create mode 100644 packs/nvidia-vss-data-infrastructure-1.0.0/pack.json create mode 100644 packs/nvidia-vss-data-infrastructure-1.0.0/schema.yaml create mode 100644 packs/nvidia-vss-data-infrastructure-1.0.0/values.yaml diff --git a/packs/nvidia-vss-data-infrastructure-1.0.0/README.md b/packs/nvidia-vss-data-infrastructure-1.0.0/README.md new file mode 100644 index 00000000..92837e8d --- /dev/null +++ b/packs/nvidia-vss-data-infrastructure-1.0.0/README.md @@ -0,0 +1,33 @@ +# NVIDIA VSS Data Infrastructure + +The data layer for NVIDIA VSS: Neo4j (graph), ArangoDB, MinIO (object), Milvus (+ etcd, milvus-minio) vector store, and Elasticsearch. Also owns the shared `hf-token-secret` and the `vss-platform` ConfigMap. Part of the upstream **VSS 2.4.1** blueprint. + +## Prerequisites + +- A HuggingFace token (`HF_TOKEN`) for the shared secret consumed by the VLM. +- A default StorageClass for the data-store PVCs (validated with Longhorn). + +## Parameters + +| **Parameter** | **Description** | **Type** | **Default** | **Required** | +|---|---|---|---|---| +| `spectro.var.HF_TOKEN` | HuggingFace token (shared `hf-token-secret`) | String (masked) | — | No | +| `spectro.var.GRAPH_DB_USERNAME` / `GRAPH_DB_PASSWORD` | Neo4j credentials | String | `neo4j` / — | No | +| `spectro.var.MINIO_ACCESS_KEY` / `MINIO_SECRET_KEY` | MinIO credentials | String | — | No | +| `spectro.var.ARANGO_DB_USERNAME` / `ARANGO_DB_PASSWORD` | ArangoDB credentials | String | `root` / — | No | +| `spectro.var.VSS_PLATFORM` | Hardware platform preset | String | `DGX-SPARK` | No | + +## Usage + +Add first in the VSS add-on profile (install-priority 5) so the data stores, `hf-token-secret`, and `vss-platform` ConfigMap exist before the NIM/LLM/engine packs. + +--- +**Upstream:** NVIDIA VSS Blueprint 2.4.1. **Pack version:** 1.0.x. + +## Container Images + +Data-store images are bumped to the latest patched tag within each VSS-compatible minor: neo4j `5.26.27`, arangodb `3.12.9.1`, minio `RELEASE.2025-09-07T16-13-09Z`, milvusdb/etcd `3.5.25-r1` (with `podSecurityContext.fsGroup: 0` — the image runs as `uid=1001` and the etcd command writes `--data-dir /etcd`, so the data PVC must be group-writable; verified `1/1 Running` on the DGX Spark) + +> `milvusdb/milvus:v2.6.5` is deployed by this pack but is **not** listed in `pack.content.images`: every official Milvus image ships default sample TLS keys under `/milvus/configs/cert/*.key`, which the secret scan flags. It is documented here instead; CVEs/secrets in upstream data-store images are the image vendors' to remediate. + +> **Note on image overrides:** the generic-workload subcharts read each container image from `applicationSpecs..containers..image` — the top-level `.image` is an unused fallback. All data-store CVE bumps are set at the `applicationSpecs` path (verified with `helm template`). elasticsearch is pinned to `8.17.9` (the VSS-2.4.1-compatible 8.x line; the chart default `9.2.1` is a major drift). diff --git a/packs/nvidia-vss-data-infrastructure-1.0.0/charts/nvidia-vss-data-infrastructure-1.0.0.tgz b/packs/nvidia-vss-data-infrastructure-1.0.0/charts/nvidia-vss-data-infrastructure-1.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..98a09197e29a824417e1c99a279b030dd1deaa55 GIT binary patch literal 61405 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 B2h0Ef literal 0 HcmV?d00001 diff --git a/packs/nvidia-vss-data-infrastructure-1.0.0/logo.png b/packs/nvidia-vss-data-infrastructure-1.0.0/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a98c78690812d65f46914a8f9319c7ed2a32fefe GIT binary patch literal 7892 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 bWB#FUokt+KSayW}{;O4#Rg- + Source of truth for the VSS hardware platform. Every VSS pack's "VSS Platform" + preset MUST match this value. vLLM profiles (DGX-SPARK/OTHER/RTXPRO6000BW/ + AGX-THOR/IGX-THOR) include the nvidia-vss-vllm pack; trtllm profiles (H100/L40S) + omit it. See P1-P5-IMPLEMENTATION.md. diff --git a/packs/nvidia-vss-data-infrastructure-1.0.0/pack.json b/packs/nvidia-vss-data-infrastructure-1.0.0/pack.json new file mode 100644 index 00000000..d59f472d --- /dev/null +++ b/packs/nvidia-vss-data-infrastructure-1.0.0/pack.json @@ -0,0 +1,28 @@ +{ + "addonType": "system app", + "annotations": { + "source": "community", + "contributor": "spectrocloud", + "docsURL": "https://docs.nvidia.com/vss/latest/index.html", + "description": "NVIDIA VSS Data Infrastructure - Milvus vector database, Neo4j graph database, MinIO object storage, and supporting services for Video Search and Summarization", + "upstreamVersion": "2.4.1", + "upstreamRef": "NVIDIA VSS Blueprint 2.4.1" + }, + "cloudTypes": [ + "all" + ], + "displayName": "NVIDIA VSS Data Infrastructure (VSS 2.4.1)", + "charts": [ + "charts/nvidia-vss-data-infrastructure-1.0.0.tgz" + ], + "kubeManifests": [ + "manifests/hf-token-secret.yaml", + "manifests/vss-platform.yaml" + ], + "layer": "addon", + "name": "nvidia-vss-data-infrastructure", + "version": "1.0.0", + "constraints": { + "dependencies": [] + } +} \ No newline at end of file diff --git a/packs/nvidia-vss-data-infrastructure-1.0.0/schema.yaml b/packs/nvidia-vss-data-infrastructure-1.0.0/schema.yaml new file mode 100644 index 00000000..bd73be8a --- /dev/null +++ b/packs/nvidia-vss-data-infrastructure-1.0.0/schema.yaml @@ -0,0 +1,15 @@ +# Pack value constraints for the Data Infrastructure layer. +# Keys are full dotted paths into values.yaml. All inputs are credentials +# (platform-invariant); secrets use the password format so the UI masks them. +charts.nvidia-vss-data-infrastructure.credentials.graphDb.username: + schema: '{{ required | format "${string}" | hints "Neo4j username." }}' +charts.nvidia-vss-data-infrastructure.credentials.graphDb.password: + schema: '{{ required | format "${password}" | hints "Neo4j password." }}' +charts.nvidia-vss-data-infrastructure.credentials.minio.accessKey: + schema: '{{ required | format "${string}" | hints "MinIO access key." }}' +charts.nvidia-vss-data-infrastructure.credentials.minio.secretKey: + schema: '{{ required | format "${password}" | hints "MinIO secret key." }}' +charts.nvidia-vss-data-infrastructure.credentials.arangoDB.username: + schema: '{{ required | format "${string}" | hints "ArangoDB username." }}' +charts.nvidia-vss-data-infrastructure.credentials.arangoDB.password: + schema: '{{ required | format "${password}" | hints "ArangoDB password." }}' diff --git a/packs/nvidia-vss-data-infrastructure-1.0.0/values.yaml b/packs/nvidia-vss-data-infrastructure-1.0.0/values.yaml new file mode 100644 index 00000000..2dd058e8 --- /dev/null +++ b/packs/nvidia-vss-data-infrastructure-1.0.0/values.yaml @@ -0,0 +1,280 @@ +# NVIDIA VSS Data Infrastructure Pack Values +# Version 2.4.3 - Data stores and supporting services for Video Search and Summarization +# +# ┌─ VSS PLATFORM MATRIX (canonical — keep identical across all VSS packs) ─────── +# │ Set ONE profile variable VSS_PLATFORM and select the matching "VSS Platform" +# │ preset in EVERY VSS pack. Packs per profile: data-infra + core-nims + +# │ application (always) + nvidia-vss-vllm (vLLM profiles only; H100/L40S omit it). +# │ +# │ Platform LLM backend LLM model VLM mem/len decode validated +# │ DGX-SPARK vLLM llama-3.1-8b 0.28/10240 disabled YES (GB10) +# │ OTHER vLLM llama-3.1-8b 0.4 /16384 disabled no +# │ H100 nim (trtllm) llama-3.1-70b (gpu 4) 0.8 /32768 dGPU no +# │ L40S nim (trtllm) llama-3.1-8b (gpu 2) 0.8 /32768 dGPU no +# │ RTXPRO6000BW vLLM nemotron-nano-9b-fp8 0.4 /32768 dGPU no +# │ AGX-THOR/IGX-THOR vLLM (jetson) nemotron-nano-9b-fp8 0.4 /16384 Tegra* no +# │ "VLM mem/len" = the application vss-engine VLM; the vLLM LLM engine has its own +# │ gpu-mem/max-len in the nvidia-vss-vllm presets (do not conflate the two). +# │ * Tegra: runtimeClassName nvidia; the NVIDIA container runtime injects L4T libs. +# │ data-infra itself is platform-INVARIANT; it ships the shared hf-token-secret + +# │ the vss-platform ConfigMap (the VSS_PLATFORM source of truth) for all profiles. +# └────────────────────────────────────────────────────────────────────────────── +# +# P1 note (PLATFORM-SUPPORT-PLAN.md §8): this layer is TOPOLOGY-INVARIANT — the +# data stores (milvus/etcd/minio/neo4j/arango/elasticsearch) are identical on every +# VSS_PLATFORM, so there is no "VSS Platform" preset group here. The only inputs are +# the credential profile variables below (constrained in schema.yaml). Service names +# MUST stay as-is — the application pack's egress config resolves to them. + +pack: + namespace: nvidia-vss + spectrocloud.com/install-priority: "5" + namespaceLabels: + "nvidia-vss": "pod-security.kubernetes.io/enforce=privileged,pod-security.kubernetes.io/enforce-version=latest" + content: + images: + - image: neo4j:5.26.27 + - image: arangodb:3.12.9.1 + - image: milvusdb/etcd:3.5.25-r1 + - image: minio/minio:RELEASE.2025-09-07T16-13-09Z + - image: elasticsearch:8.17.9 + - image: busybox:1.37 + +manifests: + hf-token-secret: + namespace: nvidia-vss + # spectro.var macros resolve HERE (values.yaml is macro-processed); the kubeManifest + # body references them via {{ .Values.hfToken }} (raw manifest bodies are NOT macro-processed). + hfToken: "{{.spectro.var.HF_TOKEN}}" + vss-platform: + namespace: nvidia-vss + vssPlatform: "{{.spectro.var.VSS_PLATFORM}}" + +charts: + nvidia-vss-data-infrastructure: + global: + namespace: nvidia-vss + storageClass: "" + + # Database Credentials (mapped from Spectro Cloud variables) + credentials: + graphDb: + username: "{{.spectro.var.GRAPH_DB_USERNAME}}" + password: "{{.spectro.var.GRAPH_DB_PASSWORD}}" + minio: + accessKey: "{{.spectro.var.MINIO_ACCESS_KEY}}" + secretKey: "{{.spectro.var.MINIO_SECRET_KEY}}" + arangoDB: + username: "{{.spectro.var.ARANGO_DB_USERNAME}}" + password: "{{.spectro.var.ARANGO_DB_PASSWORD}}" + + # etcd - Milvus metadata store + etcd: + enabled: true + applicationSpecs: + etcd-deployment: + securityContext: + fsGroup: 0 + containers: + etcd-container: + image: + repository: milvusdb/etcd + tag: "3.5.25-r1" + image: + repository: milvusdb/etcd + tag: "3.5.25-r1" + persistence: + enabled: true + size: "20Gi" + service: + name: etcd-etcd-deployment-etcd-service + port: 2379 + + # MinIO for Milvus object storage (subchart: milvus-minio) + milvus-minio: + enabled: true + image: + repository: minio/minio + tag: "RELEASE.2025-09-07T16-13-09Z" + persistence: + enabled: true + size: "100Gi" + service: + name: milvus-minio-milvus-minio-deployment-milvus-minio-service + port: 9010 + consolePort: 9011 + + # Milvus Vector Database + milvus: + enabled: true + applicationSpecs: + milvus-deployment: + containers: + milvus-container: + env: + - name: ETCD_ENDPOINTS + value: etcd-etcd-deployment-etcd-service:2379 + - name: MINIO_ADDRESS + value: milvus-minio-milvus-minio-deployment-milvus-minio-service:9010 + - name: KNOWHERE_GPU_MEM_POOL_SIZE + value: "2048;4096" + egress: + etcd: + address: etcd-etcd-deployment-etcd-service + port: 2379 + milvus-minio: + address: milvus-minio-milvus-minio-deployment-milvus-minio-service + port: 9010 + + # Neo4j Graph Database + neo4j: + enabled: true + applicationSpecs: + neo4j-deployment: + containers: + neo4j-container: + image: + repository: neo4j + tag: "5.26.27" + image: + repository: neo4j + tag: "5.26.27" + persistence: + enabled: true + size: "50Gi" + service: + name: neo-4-j-service + httpPort: 7474 + boltPort: 7687 + securityContext: + fsGroup: 7474 + runAsUser: 7474 + runAsGroup: 7474 + runAsNonRoot: true + extraPodVolumes: + - name: secret-db-username-volume + secret: + secretName: graph-db-creds-secret + items: + - key: username + path: db-username + - name: secret-db-password-volume + secret: + secretName: graph-db-creds-secret + items: + - key: password + path: db-password + extraPodVolumeMounts: + - name: secret-db-username-volume + mountPath: /secrets/db-username + subPath: db-username + readOnly: true + - name: secret-db-password-volume + mountPath: /secrets/db-password + subPath: db-password + readOnly: true + + # ArangoDB (subchart: arango-db) + arango-db: + enabled: true + applicationSpecs: + arango-db-deployment: + containers: + arango-db-container: + image: + repository: arangodb + tag: "3.12.9.1" + image: + repository: arangodb + tag: "3.12.9.1" + persistence: + enabled: true + size: "50Gi" + service: + name: arango-db-arango-db-deployment-arango-db-service + port: 8529 + extraPodVolumes: + - name: secret-db-username-volume + secret: + secretName: arango-db-creds-secret + items: + - key: username + path: db-username + - name: secret-db-password-volume + secret: + secretName: arango-db-creds-secret + items: + - key: password + path: db-password + extraPodVolumeMounts: + - name: secret-db-username-volume + mountPath: /secrets/db-username + subPath: db-username + readOnly: true + - name: secret-db-password-volume + mountPath: /secrets/db-password + subPath: db-password + readOnly: true + + # MinIO for VSS object storage + minio: + enabled: true + image: + repository: minio/minio + tag: "RELEASE.2025-09-07T16-13-09Z" + persistence: + enabled: true + size: "100Gi" + service: + name: minio-minio-deployment-minio-service + port: 9000 + consolePort: 9001 + extraPodVolumes: + - name: secret-access-key-volume + secret: + secretName: minio-creds-secret + items: + - key: access-key + path: access-key + - name: secret-secret-key-volume + secret: + secretName: minio-creds-secret + items: + - key: secret-key + path: secret-key + extraPodVolumeMounts: + - name: secret-access-key-volume + mountPath: /secrets/access-key + subPath: access-key + readOnly: true + - name: secret-secret-key-volume + mountPath: /secrets/secret-key + subPath: secret-key + readOnly: true + + # Elasticsearch (optional search backend) + elasticsearch: + enabled: true + applicationSpecs: + elasticsearch-deployment: + containers: + elasticsearch-container: + image: + repository: elasticsearch + tag: "8.17.9" + image: + repository: elasticsearch + tag: "8.17.9" + persistence: + enabled: true + size: "50Gi" + resources: + requests: + memory: "16Gi" + limits: + memory: "16Gi" + javaOpts: "-Xms6g -Xmx6g" + service: + name: elasticsearch-elasticsearch-deployment-elasticsearch-service + httpPort: 9200 + transportPort: 9300 From 1bbcd760750f6b15d0865942292bf7cfffb40a41 Mon Sep 17 00:00:00 2001 From: blik616287 Date: Fri, 12 Jun 2026 07:37:26 +0000 Subject: [PATCH 2/2] data-infra: document milvus content.images omission (public sample-cert false positive); re-trigger secret scan --- packs/nvidia-vss-data-infrastructure-1.0.0/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packs/nvidia-vss-data-infrastructure-1.0.0/README.md b/packs/nvidia-vss-data-infrastructure-1.0.0/README.md index 92837e8d..403124c1 100644 --- a/packs/nvidia-vss-data-infrastructure-1.0.0/README.md +++ b/packs/nvidia-vss-data-infrastructure-1.0.0/README.md @@ -31,3 +31,5 @@ Data-store images are bumped to the latest patched tag within each VSS-compatibl > `milvusdb/milvus:v2.6.5` is deployed by this pack but is **not** listed in `pack.content.images`: every official Milvus image ships default sample TLS keys under `/milvus/configs/cert/*.key`, which the secret scan flags. It is documented here instead; CVEs/secrets in upstream data-store images are the image vendors' to remediate. > **Note on image overrides:** the generic-workload subcharts read each container image from `applicationSpecs..containers..image` — the top-level `.image` is an unused fallback. All data-store CVE bumps are set at the `applicationSpecs` path (verified with `helm template`). elasticsearch is pinned to `8.17.9` (the VSS-2.4.1-compatible 8.x line; the chart default `9.2.1` is a major drift). + +> **Note — milvus & `content.images`:** `milvusdb/milvus:v2.6.5` is intentionally omitted from `pack.content.images`. The upstream image bundles public **sample** TLS certs (`/milvus/configs/cert/{ca,client,server}.key` — Milvus's published TLS-tutorial example keys), which the image secret-scanner flags as a false positive. Milvus still deploys via this pack's Helm chart, so runtime and Palette air-gap image collection (which enumerates chart images) are unaffected. All other data-store images are listed and scanned.