How is extraConfig passed to hub pod? (Zero to JupyterHub on Kubernetes + ArgoCD)

Hi folks,

I’m a bit lost trying to understand how extraConfig is passed to the JupyterHub configuration when deployed on Kubernetes.

Here’s my setup:
JupyterHub is deployed on an on-premises Kubernetes cluster using ArgoCD. I’m using the official Helm chart: jupyterhub 3.3.8 · jupyterhub/jupyterhub

I was experimenting with the hub.extraConfig section in my config.yaml, then decided to remove it completely. After that, I redeployed JupyterHub several times. However, I still see the following line in the JupyterHub pod logs:

Loading extra config: foo.py

Then the pod crashes because the module imported in that config can’t be found.

What I don’t fully understand is how extraConfig is actually passed from the Helm values file into the running hub configuration. I couldn’t find any ConfigMap or other resource where that script is stored. The main hub ConfigMap seems to contain a piece of code like this:

for key, config_py in sorted(get_config("hub.extraConfig", {}).items()):
    print(f"Loading extra config: {key}")
    exec(config_py)

But where exactly is it coming from?

Any help or pointers would be appreciated. Thanks!

It’s stored in a K8s secret instead of a configmap, since there may be sensitive tokens e.g. for external OAuth:

1 Like