Deploy with Helm#

This section shows how to deploy the Live Video Alert Agent using the Helm chart.

Prerequisites#

Before you begin, ensure that you have the following:

  • Kubernetes* cluster set up and running.

  • The cluster must support dynamic provisioning of Persistent Volumes (PV). Refer to the Kubernetes Dynamic Provisioning Guide for more details.

  • Install kubectl on your system. See the Installation Guide. Ensure access to the Kubernetes cluster.

  • Helm installed on your system. See the Installation Guide.

  • Storage Requirement: The chart creates a 10 Gi PVC for the VLM model on first run.

Helm Chart Installation#

1. Acquire the Helm chart#

Option 1: Get the chart from Docker Hub#

helm pull oci://registry-1.docker.io/intel/live-video-alert-agent-chart --version <version-no>
tar -xvf live-video-alert-agent-chart-<version-no>.tgz
cd live-video-alert-agent-chart

Refer to the Release Notes for the latest version.

Option 2: Install from Source#

git clone https://github.com/open-edge-platform/edge-ai-suites.git edge-ai-suites -b main
cd edge-ai-suites/metro-ai-suite/live-video-analysis/live-video-alert-agent/chart

2. Configure Required Values#

Edit user_values_override.yaml with values for your environment:

Key

Description

Example

global.externalIP

(Required) IP of a cluster node reachable by your browser

<clusternodeip>

global.keepPvc

Retain model PVC on uninstall (avoids ~10 min re-download)

true

global.huggingfaceToken

Required only for gated models on first download

hf_xxx

global.proxy.httpProxy

HTTP proxy for outbound connections

http://proxy.example.com:<port>

global.proxy.httpsProxy

HTTPS proxy for outbound connections

http://proxy.example.com:<port>

global.proxy.noProxy

Addresses that bypass the proxy

localhost,127.0.0.1,...,.svc.cluster.local

global.gpu.enabled

Enable Intel GPU for VLM inference

true / false

global.gpu.key

GPU resource key from the device plugin

gpu.intel.com/i915

global.gpu.device

Target device for inference

GPU

global.gpu.supplementalGroups

Linux group IDs for GPU device access. Run getent group render video | cut -d: -f3 on the GPU node to find values

[109, 44]

global.npu.enabled

Enable Intel NPU for inference

true / false

global.npu.key

NPU resource key from the device plugin

npu.intel.com/accel

global.npu.device

Target device for NPU inference

NPU

global.npu.devicePath

Host device path for the NPU accelerator

/dev/accel/accel0

app.rtspUrl

RTSP stream URL to load at startup (optional)

rtsp://host:port/stream

app.mcpEnabled

Enable MCP (Model Context Protocol) tool integration

true / false

app.mcpServersConfig

MCP server configuration JSON (see resources/mcp_servers.json for format)

See values.yaml

app.nodeSelector

Schedule app pod on a specific node

kubernetes.io/hostname: worker1

Note:

  • user_values_override.yaml may contain credentials. Do not commit it to version control.

  • .svc.cluster.local must be included in global.proxy.noProxy to allow cluster-internal communication.

  • GPU and NPU can be enabled independently. For example, use GPU for the VLM and NPU for the LLM by enabling both and setting the appropriate device value in each ovms / ovms-llm section.

Model Selection: Use pre-converted OpenVINO IR models from the OpenVINO organization on Hugging Face for best compatibility. These models are optimized for OVMS and require no additional conversion. Set the model repository name in ovms.sourceModel (VLM) or ovms-llm.sourceModel (LLM).

3. Build Helm Dependencies#

helm dependency build

4. Set and Create a Namespace#

my_release=lva
my_namespace=lva
kubectl create namespace $my_namespace || true

Note: All subsequent steps assume my_release and my_namespace are set in your shell session. The || true makes the namespace creation safe to re-run.

5. Deploy the Helm Chart#

helm install $my_release . -f user_values_override.yaml -n $my_namespace

6. Verify the Deployment#

kubectl get pods -n $my_namespace
kubectl get svc -n $my_namespace

Before proceeding, ensure all pods show Running status and 1/1 in the READY column.

Note: The OVMS pod may take up to 10 minutes on first start while the VLM model is downloaded. Set global.keepPvc: true to retain the model across reinstalls.

7. Access the Application#

node_ip=$(kubectl get pods -l app.kubernetes.io/component=app -n $my_namespace -o jsonpath='{.items[0].status.hostIP}')
app_port=$(kubectl get svc -l app.kubernetes.io/component=app -n $my_namespace -o jsonpath='{.items[0].spec.ports[0].nodePort}')
echo "http://${node_ip}:${app_port}"

Open the printed URL in your browser to access the Live Video Alert Agent dashboard.

8. Uninstall Helm Chart#

helm uninstall $my_release -n $my_namespace

PVC retention on uninstall is controlled by global.keepPvc. To delete the PVC manually:

kubectl delete pvc ${my_release}-ovms-models -n $my_namespace

Upgrading#

After modifying subchart sources or pulling a new chart version, rebuild dependencies before redeploying:

helm dependency build
helm upgrade $my_release . -f user_values_override.yaml -n $my_namespace

Troubleshooting#

  • Pods stuck in Pending: Check storage availability and node capacity.

    kubectl describe pod <pod-name> -n $my_namespace
    kubectl get events -n $my_namespace --sort-by='.metadata.creationTimestamp'
    
  • OVMS pod slow to start: Expected on first deploy — model is downloading (~2 GB). Monitor with:

    kubectl logs -n $my_namespace deployment/${my_release}-ovms --follow
    
  • ImagePullBackOff: Check image name and tag overrides in user_values_override.yaml. Ensure registry is reachable.

  • GPU not working: Verify device plugin resource key with kubectl describe node <gpu-node> | grep gpu.intel.com.

  • NPU not detected: Verify the NPU device plugin is installed and the resource is visible: kubectl describe node <npu-node> | grep npu.intel.com. Ensure global.npu.devicePath matches the host device (default: /dev/accel/accel0).

  • Check logs:

    kubectl logs <pod-name> -n $my_namespace