Use this skill whenever a developer needs to deploy VSS to Kubernetes, helm install VSS, configure values.yaml for VSS, or run VSS on k8s with GPU/vLLM for the video-search-and-summarization sample app. This skill is especially useful when translating Docker Compose/setup.sh modes (--summary, --search, --summary-and-search/--unified, dual UI, ENABLE_VLLM, OVMS GPU/NPU) into the actual Helm chart override files and values keys. Prefer this skill for VSS Helm install/upgrade/troubleshooting even if the user only says “put VSS on k8s” or “make values.yaml for VSS”.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
A direct command skips the review prompt. Inspect the source before running it.
The command stays on one line. Scroll horizontally to inspect it before copying.
Prefer a local copy? Download the files currently available to SkillsMP.
File Explorer
14 files
Showing SKILL.md
SKILL.md
Source instructions · Read-only preview
name
vss-deploy-helm
description
Use this skill whenever a developer needs to deploy VSS to Kubernetes, helm install VSS, configure values.yaml for VSS, or run VSS on k8s with GPU/vLLM for the video-search-and-summarization sample app. This skill is especially useful when translating Docker Compose/setup.sh modes (--summary, --search, --summary-and-search/--unified, dual UI, ENABLE_VLLM, OVMS GPU/NPU) into the actual Helm chart override files and values keys. Prefer this skill for VSS Helm install/upgrade/troubleshooting even if the user only says “put VSS on k8s” or “make values.yaml for VSS”.
VSS Helm deploy
Use this workflow for the VSS sample app Helm chart at sample-applications/video-search-and-summarization/chart. The chart’s real dependencies are ovms, minioserver, audioanalyzer, postgresql, rabbitmq, videoingestion, videosearch, vdmsvectordb, multimodaldataprep, multimodalembeddingms, vectorretriever, vllm (alias of vllm-server), summaryui, and searchui (aliases of vssui).
If the user asks to map Compose or setup.sh settings to Helm values, read references/helm-values-map.md.
Environment setup (run first)
This skill drives the Video Search & Summarization app through its real source
files, so the VSS application must be present and you must run commands from its
app root. Do this before anything else, and it works whether or not the VSS
source is already in your workspace.
Run the bundled bootstrap. It first tries to find an existing VSS checkout -
walking up from the current directory and inspecting the enclosing git repo - and
reuses it . Only when no checkout is found does it do a
shallow, single-branch, sparse checkout of just
from . It prints the
resolved app root on stdout:
# SKILL_DIR is THIS skill's own directory (shown to you when the skill loads);# in-repo it is .github/skills/vss-deploy-helm. Works the same if the skill is installed standalone.
SKILL_DIR=".github/skills/vss-deploy-helm"
APP_ROOT="$(bash "$SKILL_DIR/scripts/vss-bootstrap.sh")"cd"$APP_ROOT"
Every command below assumes the working directory is this APP_ROOT. To pull
from a fork/branch or reuse a specific checkout dir, override VSS_REPO_URL,
VSS_REPO_BRANCH, or VSS_CLONE_DIR before running it.
Prerequisites
Confirm a reachable Kubernetes cluster, kubectl, and Helm 3:
kubectl cluster-info
kubectl get nodes
helm version
Confirm dynamic PV provisioning if using PVCs:
kubectl get storageclass
For GPU/NPU, discover resource keys before writing values:
Common Intel keys are gpu.intel.com/i915, gpu.intel.com/xe, and npu.intel.com/accel.
1. Start from the real chart values
Work from the chart directory:
cd sample-applications/video-search-and-summarization/chart
helm dependency update
helm dependency list
Create/edit user_values_override.yaml for user-specific values. Do not commit filled secrets.
Minimum required values for most modes:
global:usePvc:truekeepPvc:truehuggingfaceToken:"hf_..."# needed for gated/private Hugging Face modelsvlmName:"Qwen/Qwen3-VL-4B-Instruct"llmName:""# optional OVMS split-model summarization modelembeddingModelName:""# set per mode belowmodelDownload:image:repository:intel/model-downloadtag:"2026.2.0-ww30"pullPolicy:IfNotPresentovmsReleaseTag:"v2026.1"proxy:http_proxy:""https_proxy:""env:POSTGRES_USER:"vsadmin"POSTGRES_PASSWORD:"change-me"MINIO_ROOT_USER:"minioadmin"MINIO_ROOT_PASSWORD:"change-me-8chars"RABBITMQ_DEFAULT_USER:"guest"RABBITMQ_DEFAULT_PASS:"change-me"# Summary/OVMS model workspace:ovms:claimSize:"20Gi"# Search model caches (needed only when search is enabled):multimodaldataprep:modelPvc:enabled:truesize:"10Gi"multimodalembeddingms:modelPvc:enabled:truesize:"10Gi"
Why these matter:
global.usePvc enables the service-specific claims; OVMS, video-ingestion, Multimodal DataPrep, and the embedding service no longer share one PVC.
global.keepPvc: true avoids re-downloading/re-converting models after uninstall, but stale PVCs can also preserve incompatible old state. The vLLM
subchart's vllm-model-cache PVC does not currently honor global.keepPvc
and is deleted with the release.
ovms.claimSize sizes the summary-mode OVMS model workspace.
multimodaldataprep.modelPvc and multimodalembeddingms.modelPvc independently configure search model caches.
global.vlmName is required for summary/unified modes and is used by OVMS or by vLLM.
global.embeddingModelName is required when search components are enabled.
global.modelDownload controls the image used by the OVMS and video-ingestion
init containers. Each init container starts its local REST service, submits a
download job, waits for completion, and exits before the application
container starts.
Use global.devices.multimodalDataprep.embedding for in-process DataPrep
embedding, global.devices.multimodalEmbedding for the query-side embedding
service, and global.devices.multimodalDataprep.detection for DataPrep object
detection. These settings are independent; every GPU/NPU setting requires its
own resource key.
Prefer using xeon_vllm_values.yaml rather than hand-setting all of this; it also sets pipelinemanager.env.USE_VLLM=CONFIG_ON and resource requests for dependent services.
5. Upgrade safely
After editing values, keep the same override-file stack used at install:
Helm fails with missing credentials: fill global.env.POSTGRES_USER, global.env.POSTGRES_PASSWORD, global.env.MINIO_ROOT_USER, global.env.MINIO_ROOT_PASSWORD, global.env.RABBITMQ_DEFAULT_USER, global.env.RABBITMQ_DEFAULT_PASS.
Helm fails with GPU key errors: set global.devices.*.key for every non-CPU device.
Model download job/init container fails: inspect the specific model-download
log, verify global.modelDownload.image, proxy/token values, model id, device
support, and available model storage before debugging the main container.
Helm fails with a missing device key: set the matching key for any
global.devices.* entry set to GPU or NPU.
Search returns bad/no results: confirm global.embeddingModelName matches the mode and global.vdmsIndexName came from the right override file.
Reinstall still broken with global.keepPvc: true: stale PVC contents may be incompatible. Identify the affected mode and delete only its PVCs after the user accepts losing cached models/data.:
Need larger storage: set ovms.claimSize for converted VLM/LLM models,
videoingestion.claimSize for OD models,
multimodaldataprep.modelPvc.size/multimodalembeddingms.modelPvc.size for
search model caches, or the relevant data setting such as
minioserver.claimSize, postgresql.claimSize, vdmsvectordb.claimSize, or
vllm.pvc.size.