Files
OpenViking/examples/k8s-helm
Qin Haojie 7abd6ab249 refactor(client): remove Python embedded mode (#3712)
* refactor(client): remove Python embedded mode

Consolidate Python consumers on the HTTP SDK while keeping shared server and storage capabilities unchanged.

* refactor(client): remove obsolete embedded leftovers
2026-08-10 18:00:00 +08:00
..

OpenViking Helm Chart

This Helm chart deploys OpenViking on Kubernetes, providing a scalable and production-ready RAG (Retrieval-Augmented Generation) and semantic search service.

Overview

OpenViking is an open-source RAG and semantic search engine that serves as a Context Database MCP (Model Context Protocol) server. This Helm chart enables easy deployment on Kubernetes clusters with support for major cloud providers.

Prerequisites

  • Kubernetes 1.24+
  • Helm 3.8+
  • A valid Volcengine API key for embedding and VLM services

Installation

Add the Helm repository (when published)

helm repo add openviking https://volcengine.github.io/openviking
helm repo update

Install from local chart

# Clone the repository
git clone https://github.com/volcengine/OpenViking.git
cd OpenViking/deploy/helm

# Install with default values
helm install openviking ./openviking

# Install with custom values
helm install openviking ./openviking -f my-values.yaml

Quick Start

# GCP deployment
helm install openviking ./openviking \
  --set cloudProvider=gcp \
  --set openviking.config.embedding.dense.api_key=YOUR_API_KEY

# AWS deployment
helm install openviking ./openviking \
  --set cloudProvider=aws \
  --set openviking.config.embedding.dense.api_key=YOUR_API_KEY

Configuration

Cloud Provider Support

The chart supports automatic LoadBalancer annotation configuration for major cloud providers:

Provider Configuration Value
Google Cloud Platform cloudProvider: gcp
Amazon Web Services cloudProvider: aws
Other/Generic cloudProvider: "" (default)

Key Configuration Options

Parameter Description Default
cloudProvider Cloud provider for LoadBalancer annotations ""
replicaCount Number of replicas 1
image.repository Container image repository ghcr.io/astral-sh/uv
image.tag Container image tag python3.12-bookworm
service.type Kubernetes service type LoadBalancer
service.port Service port 1933
openviking.config.server.api_key API key for authentication null
openviking.config.embedding.dense.api_key Volcengine API key null

OpenViking Configuration

All OpenViking configuration options from ov.conf are available under openviking.config. See values.yaml for the complete default configuration.

Embedding Configuration

The embedding service requires a Volcengine API key:

openviking:
  config:
    embedding:
      dense:
        api_key: "your-api-key-here"
        api_base: "https://ark.cn-beijing.volces.com/api/v3"
        model: "doubao-embedding-vision-251215"

VLM Configuration

For vision-language model support:

openviking:
  config:
    vlm:
      api_key: "your-api-key-here"
      api_base: "https://ark.cn-beijing.volces.com/api/v3"
      model: "doubao-seed-2-0-lite-260428"

Storage

Default (emptyDir)

By default, the chart uses emptyDir volumes for data storage. This is suitable for development and testing but data will be lost when pods are restarted.

Persistent Storage (Optional)

To enable persistent storage with PVC:

openviking:
  dataVolume:
    enabled: true
    usePVC: true
    size: 50Gi
    storageClassName: standard
    accessModes:
      - ReadWriteOnce

Security

API Key Authentication

Enable API key authentication to secure your OpenViking server:

openviking:
  config:
    server:
      api_key: "your-secure-api-key"
      cors_origins:
        - "https://your-domain.com"

Secrets Management

For production deployments, use Kubernetes secrets or external secret management:

# Create secret from literal
kubectl create secret generic openviking-config \
  --from-literal=ov.conf='{"server":{"api_key":"secret"}}'

# Or mount existing secret
helm install openviking ./openviking \
  --set existingSecret=openviking-config

Autoscaling

Enable Horizontal Pod Autoscaler for production workloads:

autoscaling:
  enabled: true
  minReplicas: 2
  maxReplicas: 10
  targetCPUUtilizationPercentage: 80
  targetMemoryUtilizationPercentage: 80

Resource Limits

Default resource configuration:

resources:
  limits:
    cpu: 2000m
    memory: 4Gi
  requests:
    cpu: 500m
    memory: 1Gi

Adjust based on your workload requirements.

Usage Examples

Connect with CLI

# Get the LoadBalancer IP
export OPENVIKING_IP=$(kubectl get svc openviking -o jsonpath='{.status.loadBalancer.ingress[0].ip}')

# Create CLI configuration
cat > ~/.openviking/ovcli.conf <<EOF
{
  "url": "http://$OPENVIKING_IP:1933",
  "api_key": null,
  "output": "table"
}
EOF

# Test connection
openviking health

Python Client

from openviking_sdk import SyncHTTPClient

# Get service endpoint
# kubectl get svc openviking

client = SyncHTTPClient(url="http://<load-balancer-ip>:1933", api_key="your-key")
client.initialize()

# Add a resource
client.add_resource(path="./document.pdf")
client.wait_processed()

# Search
results = client.find("your search query")
print(results)

client.close()

Troubleshooting

Pod fails to start

Check the pod logs:

kubectl logs -l app.kubernetes.io/name=openviking

Health check fails

Verify the configuration:

kubectl get secret openviking-config -o jsonpath='{.data.ov\.conf}' | base64 -d

LoadBalancer not getting IP

Wait for the cloud provider to provision the load balancer:

kubectl get svc openviking -w

Check cloud provider-specific annotations in values.yaml.

Uninstallation

helm uninstall openviking

To remove persistent data (if PVC was enabled):

kubectl delete pvc openviking-data

Contributing

Contributions are welcome! Please see the OpenViking repository for contribution guidelines.

License

This Helm chart is licensed under the Apache License 2.0, matching the OpenViking project license.