Skip to main content
Version 3.0

JupyterLab Configuration

ChartVersion3.0.1TypeapplicationAppVersion5.3.0
CompatibilityKubernetes1.32+OpenShift4.19+Rancher2.10.x+
Feature SupportLDAPsupportedS3supportedExternal DBsupportedIngresssupportedGateway APIsupported

What is JupyterLab?

JupyterLab is the interactive notebook interface for TDP Kubernetes. It is the environment where data analysts and engineers write and run code, organize files, and explore data directly in the browser.

In TDP Kubernetes, JupyterLab is served by JupyterHub, which handles authentication and the lifecycle of each user's environment in the cluster.

Learn more

See JupyterLab — Concepts for a complete overview of the tool, its architecture, and operation.

Helm values structure

The tdp-jupyter chart organizes its configuration into four main blocks:

BlockPurpose
tdp-jupyter:JupyterHub configuration: Hub, Proxy, single-user pods, authentication, storage, and security
tdpSparkIntegration:Spark integration: local or external cluster mode, ConfigMap, and optional subchart
TDP-Settings:TDP platform settings: external database and exposure control (Ingress/Gateway API)
openshift:Force OpenShift mode when auto-detection is not possible

Use helm show values oci://registry.tecnisys.com.br/tdp/charts/tdp-jupyter > values-default.yaml to inspect all available parameters.

Overview

PropertyValue
Charttdp-jupyter
JupyterHub version5.3.0
Chart version3.0.1
User interfaceJupyterLab served by JupyterHub
Execution modelOne single-user pod per authenticated user
Metadata databaseSQLite by default, with an external PostgreSQL option
HTTP exposureJupyterHub proxy through Service, Ingress, or Gateway API

Main components

ComponentDescription
HubCentral JupyterHub service — handles authentication and environment lifecycle
ProxyReverse proxy that routes each user to their environment
Single-user podsOne Kubernetes pod per authenticated user
PVCsPersistent storage for notebooks, when configured

Single-user model

Each time a user logs in, the Hub creates a dedicated pod for them in Kubernetes. When the user stops the server, the pod is terminated, but storage persists if it is backed by a PVC.

Cluster sizing must account for the expected peak of concurrent users.

Default kernel (Python 3.12)

On startup, the single-user pod runs a postStart hook that makes the py312 kernel (Python 3.12, with Spark/Delta/Iceberg libraries pre-installed) the default kernel shown as "Python 3" in the notebook — the original python3 kernel is replaced by a copy of py312. The KernelSpecManager.allowed_kernelspecs setting restricts the list of kernels available to the user to this kernel.

Prerequisites

  • Kubernetes 1.32+, Red Hat OpenShift 4.19+, or Rancher Manager 2.10.x+
  • Helm 3.2.0+
  • PV provisioner available in the cluster
  • Spark cluster via tdp-spark or compatible installation, when using Spark integration

Installation (OCI)

Kubernetes

Terminal input
helm upgrade --install <RELEASE_NAME> \
oci://registry.tecnisys.com.br/tdp/charts/tdp-jupyter \
-n <NAMESPACE> --create-namespace --timeout 10m

Without a -f file, the chart defaults are used. In production environments, version a values file with resources, storage, and service type aligned to the cluster's policies.

OpenShift

The chart automatically detects OpenShift via the Kubernetes discovery API. If auto-detection cannot reach the API (restricted networks, CI pipelines), force OpenShift mode explicitly:

Terminal input
helm upgrade --install <RELEASE_NAME> \
oci://registry.tecnisys.com.br/tdp/charts/tdp-jupyter \
-n <NAMESPACE> --create-namespace --timeout 10m \
--set openshift.enabled=true \
--set tdp-jupyter.scheduling.userScheduler.containerSecurityContext.runAsNonRoot=true

Or use a dedicated overlay file values-openshift.yaml:

openshift:
enabled: true

tdp-jupyter:
scheduling:
userScheduler:
containerSecurityContext:
runAsNonRoot: true
OpenShift — what changes

When OpenShift mode is active, the chart automatically applies:

  • Overlay volumes for /etc/passwd and /etc/group on single-user pods
  • openshift-passwd-bootstrap init container to map UID/GID
  • Post-install hook that nullifies runAsUser/runAsGroup on the Hub and forces runAsNonRoot: true