Skip to content

OpenReel Video

OpenReel Video is a browser-based video editor. The HelmForge chart serves the static application with hardened runtime defaults and modern Kubernetes exposure options.

Key Features

  • HelmForge-maintained docker.io/helmforge/openreel-video:v0.4.0 image
  • Static hosting for the upstream browser-based editor
  • WebCodecs-ready deployment with writable temporary volume support
  • Ingress, Gateway API through the single gateway values block, dual-stack Service fields, HPA, PDB, NetworkPolicy, and Helm tests
  • Non-root runtime with dropped Linux capabilities

Installation

helm repo add helmforge https://repo.helmforge.dev
helm repo update
helm install openreel-video helmforge/openreel-video --namespace openreel-video --create-namespace
helm install openreel-video oci://ghcr.io/helmforgedev/helm/openreel-video --namespace openreel-video --create-namespace

Examples

Ingress:

ingress:
  enabled: true
  ingressClassName: nginx
  hosts:
    - host: video.example.com
      paths:
        - path: /
          pathType: Prefix

Gateway API:

gateway:
  enabled: true
  parentRefs:
    - name: public
  hostnames:
    - video.example.com

Operations

The chart is stateless by default. Scale horizontally with HPA when the ingress layer can distribute requests across replicas.

Architecture

OpenReel Video is deployed as a stateless web workload. The chart is designed for browser-based editing frontends and WebCodecs-ready static hosting, so the main operational concerns are routing, cache behavior, temporary writable storage, and safe horizontal scaling.

Runtime flow:

  1. Ingress or Gateway API receives public HTTPS traffic.
  2. The Service load-balances requests across OpenReel Video pods.
  3. The container serves static assets and browser application code.
  4. Temporary files are written only to the configured tmpVolume.
  5. Optional HPA and PDB keep the frontend available during rollouts.

Production Values

Use multiple replicas, explicit resources, NetworkPolicy, and either Ingress or Gateway API:

replicaCount: 2

service:
  ipFamilyPolicy: PreferDualStack
  ipFamilies:
    - IPv4
    - IPv6

ingress:
  enabled: true
  ingressClassName: traefik
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
  hosts:
    - host: openreel.example.com
      paths:
        - path: /
          pathType: Prefix
  tls:
    - secretName: openreel-video-tls
      hosts:
        - openreel.example.com

networkPolicy:
  enabled: true

resources:
  requests:
    cpu: 100m
    memory: 128Mi
  limits:
    cpu: 500m
    memory: 256Mi

ExternalName Compatibility

When the Kubernetes Service should point clients at an externally hosted OpenReel endpoint, use ExternalName and keep Ingress/Gateway disabled:

service:
  type: ExternalName
  externalName: openreel-static.example.com

ingress:
  enabled: false

gateway:
  enabled: false

This is useful during migration from external hosting into the cluster, or when consumers need a stable Kubernetes DNS name for a service that remains outside Kubernetes.

Gateway API

Gateway API is first-class and uses the shared HelmForge gateway shape:

gateway:
  enabled: true
  parentRefs:
    - name: public
      namespace: gateway-system
  hostnames:
    - openreel.example.com
  path: /
  pathType: PathPrefix

Scaling And Rollouts

The chart is stateless, so HPA is safe when the edge layer can distribute requests:

autoscaling:
  enabled: true
  minReplicas: 2
  maxReplicas: 6

pdb:
  enabled: true
  minAvailable: 1

Keep tmpVolume.enabled=true unless your custom image does not need writable temporary storage. The root filesystem can remain read-only while /tmp stays writable.

Validation

After deployment:

helm test openreel-video -n openreel-video
kubectl get pods -n openreel-video -l app.kubernetes.io/name=openreel-video
kubectl logs -n openreel-video deploy/openreel-video --since=10m
kubectl get events -n openreel-video --sort-by=.lastTimestamp

For public routes, validate that static assets load with the same host, scheme, and path used by the browser.

Common Issues

SymptomLikely CauseFix
Blank page after route exposureBase URL or static asset path does not match the routeCheck browser network errors and Gateway/Ingress path settings.
Pods fail with read-only filesystem errorsApplication writes outside tmpVolumeMount an explicit writable volume for the path or fix the image.
HPA scales but requests still hit one podEdge proxy affinity or cache behaviorReview ingress/gateway load-balancing settings.
ExternalName has no endpointsExpected Kubernetes behaviorValidate DNS resolution from a client pod instead of checking Endpoints.

Values

ParameterDefaultDescription
replicaCount1Number of pods when autoscaling is disabled.
image.repositorydocker.io/helmforge/openreel-videoHelmForge OpenReel Video image.
service.typeClusterIPKubernetes Service type.
service.ipFamilyPolicynullOptional Service dual-stack policy.
ingress.enabledfalseRender Ingress.
gateway.enabledfalseRender Gateway API HTTPRoute.
autoscaling.enabledfalseRender HPA.
pdb.enabledfalseRender PodDisruptionBudget.
networkPolicy.enabledfalseRender NetworkPolicy.
tmpVolume.enabledtrueMount writable temporary storage.