Kubernetes process launch configuration

This document applies to Deephaven deployments on Kubernetes. For traditional bare-metal or VM-based installations, see Java process launch configuration.

Deephaven on Kubernetes uses containerized deployments where processes run as pods managed by Kubernetes. Configuration is primarily handled through Helm values, ConfigMaps, and environment variables rather than direct file system access.

This document discusses:

Processes

In a Kubernetes deployment, Deephaven processes run as containerized pods. The following deployments are created:

Core services

  • Deephaven infrastructure services: Multiple deployments run core services:

  • etcd StatefulSet: Runs the etcd cluster (typically 3 or 5 replicas for high availability).

  • query-server deployment: Runs Remote Query Dispatchers that create worker pods for queries and Code Studios.

  • merge-server deployment: Runs dispatchers for privileged workers that can write to historical data.

  • dis deployment: Data Import Server handles data ingestion from external sources.

Worker pods

Command line utilities

Command line tools like dhconfig and dhctl are accessed by executing commands inside the management shell pod:

Configuration methods

Kubernetes deployments use different configuration approaches than traditional installations.

Helm values

The primary method for configuring Deephaven on Kubernetes is through Helm values files. Create a values override file to customize your deployment:

Apply the configuration:

Environment variables

Environment variables are set through Helm values in the userEnv section. These are injected into pod containers at startup:

Worker volumes and secrets

For complex configurations requiring additional volumes, use workerExtraVolumes to mount pre-existing PersistentVolumeClaims to worker pods:

For secrets, use workerExtraSecrets:

Deephaven properties

Deephaven properties files are still used in Kubernetes deployments but are managed through the configuration service. Modify properties using dhconfig within the management shell:

See How do I run commands on the command line for more details.

Modifying launch parameters

Memory configuration

Configure memory limits and requests for each deployment type:

See Kubernetes configuration settings for detailed memory configuration guidance.

JVM arguments

Add JVM arguments for specific services using the process.<service>.jvmArgsUser Helm value:

For worker-specific JVM arguments, configure them in the Persistent Query or Code Studio UI when creating the session.

Service-specific configuration

Configure individual deployments:

Classpath and custom libraries

In Kubernetes deployments, the default classpath includes /customer/deployed/java_lib/ and /customer/deployed/plugin/. Custom libraries are typically added through custom container images.

For details on adding custom libraries, see Kubernetes installation. For general classpath information, see Java process launch configuration.

Differences from traditional installations

AspectTraditional InstallationKubernetes Installation
Process managementdh_monit, systemdKubernetes deployments, StatefulSets
Configuration filesDirect file system access in /etc/sysconfigHelm values, ConfigMaps, exec into pods
Worker creationLocal process spawningPod creation via Kubernetes API
Custom librariesFile system directories (CUSTOMER_JAR_DIR)Custom container images
Log accessDirect file access in /var/log/deephavenkubectl logs, log aggregator services
Service restartdh_monit restart <service>kubectl rollout restart deployment/<name>
ScalingAdd physical/virtual machinesScale deployments: kubectl scale or Helm
UpdatesInstaller scriptsHelm upgrade with new image versions

Accessing logs

View logs for pods:

Restarting services

Restart deployments to pick up configuration changes:

Scaling services

Scale deployments horizontally:

Troubleshooting

For Kubernetes-specific troubleshooting, see Troubleshooting Kubernetes.

Common debugging steps: