Generic Helm Chart

A generic, reusable Helm chart for deploying Java operators built with JOSDK is available at helm/generic-helm-chart.

It is intended as a template for operator developers — a starting point that covers common deployment patterns so you don’t have to write a chart from scratch. The chart is maintained on a best-effort basis. Contributions are more than welcome.

The chart is used in the metrics-processing sample operator E2E test to deploy the operator to a cluster via Helm.

What the Chart Provides

  • Deployment with security defaults (non-root user, read-only filesystem, no privilege escalation)
  • Dynamic RBAC (ClusterRole, ClusterRoleBinding, ServiceAccount) — permissions are generated automatically from the primary and secondary resources you declare in values.yaml
  • ConfigMap for operator configuration (config.yaml) and logging (log4j2.xml), mounted at /config
  • Leader election support (opt-in)
  • Extensibility via extra containers, init containers, volumes, and environment variables

Key Configuration

The most important values to set when adapting the chart for your operator:

image:
  repository: my-operator-image   # required
  tag: "latest"

# Custom resources your operator reconciles
primaryResources:
  - apiGroup: "sample.javaoperatorsdk"
    resources:
      - myresources

# Kubernetes resources your operator manages
secondaryResources:
  - apiGroup: ""
    resources:
      - configmaps
      - services

Primary resources get read/watch/patch permissions and status sub-resource access. Secondary resources get full CRUD permissions. Default verbs can be overridden per resource entry.

Operator Environment

The chart injects OPERATOR_NAMESPACE automatically. You can optionally set WATCH_NAMESPACE to restrict the operator to a single namespace, and add arbitrary environment variables:

operator:
  watchNamespace: ""       # empty = all namespaces
  env:
    - name: MY_CUSTOM_VAR
      value: "some-value"

Resource Defaults

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

See the full values.yaml for all available options.

Usage Example

A working example of how to use the chart can be found in the metrics-processing sample operator’s helm-values.yaml:

image:
  repository: metrics-processing-operator
  pullPolicy: Never
  tag: "latest"

nameOverride: "metrics-processing-operator"

resources: {}

primaryResources:
  - apiGroup: "sample.javaoperatorsdk"
    resources:
      - metricshandlingcustomresource1s
      - metricshandlingcustomresource2s

Install with:

helm install my-operator ./helm/generic-helm-chart -f my-values.yaml --namespace my-ns

Testing the Chart

The chart includes unit tests using the helm-unittest plugin. Run them with:

./helm/run-tests.sh

Last modified April 9, 2026: docs: operations section (#3282) (2901f081)