Skip to main content
helm chart · jupyterhub

JupyterHub

Helm chart for Deploying JupyterHub

Latest version
v0.0.4
Chart type
Application
Requires
Helm 3+

Install

Add the zop.dev chart repository, then install jupyterhub into your cluster.

helm repo add zopdev https://helm.zop.dev
helm repo update
helm install my-jupyterhub zopdev/jupyterhub --version v0.0.4

Deploy to Zopday

This Helm chart deploys JupyterHub on Kubernetes, providing a multi-user server for Jupyter notebooks. JupyterHub allows multiple users to access their own Jupyter notebook servers in a shared environment, making it ideal for educational institutions, research labs, and data science teams.


Prerequisites

  • Kubernetes 1.19+
  • Helm 3.0+
  • kubectl configured to communicate with your cluster
  • Storage class for persistent volumes (if using dynamic storage)

Add Helm Repository

Add the Helm repository by running:

Terminal window
helm repo add zopdev https://helm.zop.dev
helm repo update

For more details, see the Helm Repository Documentation.


Install Helm Chart

To deploy the JupyterHub Helm chart, use the following command:

Terminal window
helm install [RELEASE_NAME] zopdev/jupyterhub

Replace [RELEASE_NAME] with your desired release name. Example:

Terminal window
helm install my-jupyterhub zopdev/jupyterhub

You can override default values during installation by providing a values.yaml file.

Refer to the Helm Install Documentation for further details.


Uninstall Helm Chart

To remove the JupyterHub Helm chart and associated resources, run:

Terminal window
helm uninstall [RELEASE_NAME]

Example:

Terminal window
helm uninstall my-jupyterhub

Check the Helm Uninstall Documentation for more information.


Configuration

The JupyterHub Helm chart includes several configuration options to tailor the deployment to your needs. Below is a summary of the key configurations:

Hub Configuration

InputTypeDescriptionDefault
hub.config.JupyterHub.admin_accessbooleanWhether to allow admin access.true
hub.config.JupyterHub.authenticator_classstringAuthentication class to use."dummy"
hub.baseUrlstringBase URL for the JupyterHub instance."/"

Proxy Configuration

InputTypeDescriptionDefault
proxy.https.enabledbooleanWhether to enable HTTPS.false
proxy.https.typestringType of HTTPS configuration (letsencrypt)."letsencrypt"
proxy.https.letsencrypt.contactEmailstringContact email for Let’s Encrypt.""
proxy.https.letsencrypt.acmeServerstringACME server URL for Let’s Encrypt."https://acme-v02.api.letsencrypt.org/directory"

Single User Configuration

InputTypeDescriptionDefault
singleuser.image.namestringDocker image for single-user servers."quay.io/jupyterhub/k8s-singleuser-sample"
singleuser.image.tagstringTag for the single-user server image."4.1.1-0.dev.git.6957.h0e735928"
singleuser.storage.typestringType of storage to use (dynamic/static)."dynamic"
singleuser.storage.capacitystringStorage capacity for user volumes."10Gi"
singleuser.storage.homeMountPathstringPath to mount user home directory."/home/jovyan"

Scheduling Configuration

InputTypeDescriptionDefault
scheduling.userScheduler.enabledbooleanWhether to enable user scheduler.true
scheduling.userScheduler.replicasintegerNumber of scheduler replicas.2
scheduling.userScheduler.logLevelintegerLog level for the scheduler.4

Culling Configuration

InputTypeDescriptionDefault
cull.enabledbooleanWhether to enable culling of inactive servers.true
cull.timeoutintegerTime in seconds before culling inactive servers.3600
cull.everyintegerHow often to check for culling in seconds.600

Example values.yaml

Terminal window
hub:
config:
JupyterHub:
admin_access: true
authenticator_class: dummy
baseUrl: /
proxy:
https:
enabled: false
type: letsencrypt
letsencrypt:
contactEmail: admin@example.com
acmeServer: https://acme-v02.api.letsencrypt.org/directory
singleuser:
image:
name: quay.io/jupyterhub/k8s-singleuser-sample
tag: "4.1.1-0.dev.git.6957.h0e735928"
storage:
type: dynamic
capacity: 10Gi
homeMountPath: /home/jovyan
scheduling:
userScheduler:
enabled: true
replicas: 2
logLevel: 4
cull:
enabled: true
timeout: 3600
every: 600

Features

  • Multi-user Jupyter notebook server deployment
  • Configurable authentication system
  • HTTPS support with Let’s Encrypt integration
  • Persistent storage for user data
  • Automatic culling of inactive servers
  • Network policies for security
  • Customizable resource limits
  • User scheduling capabilities
  • Pre-pulling of container images
  • Cloud metadata blocking for security

Architecture

The JupyterHub deployment includes:

  • Hub pod for user authentication and management
  • Proxy pod for routing requests
  • Single-user server pods for each user
  • Persistent volume claims for user data
  • Network policies for security
  • User scheduler for pod placement
  • Image pre-puller for faster startup
  • Culling service for resource management

Security Features

  • Network policies to control pod communication
  • Cloud metadata blocking
  • Configurable authentication system
  • HTTPS support
  • Privilege escalation prevention
  • User isolation through separate pods
  • Configurable security contexts

Contributing

We welcome contributions to improve this Helm chart. Please refer to the CONTRIBUTING.md file for contribution guidelines.


Code of Conduct

To maintain a healthy and collaborative community, please adhere to our Code of Conduct.


License

This project is licensed under the LICENSE. Please review it for terms of use.

See it fire on your bill.

Connect an account read-only. The first findings land in minutes.

472 rule families across 353 resource types on 22 platforms. Every threshold, metric, and IAM action is documented on these pages before you grant anything.

472 rule families documented
353 resource types covered
read-only default access level
Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console· Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console·