Admin Manual — JupyterHub Components and Workflows#
This page describes advanced implementation details and workflows. For day-to-day configuration (auth, images, quotas, storage), use the Configuration Reference and Single-Node Deployment. Single-node deployments can use sudo ./auplc-installer rt upgrade from the repo root; multi-node or custom Helm deployments use bash scripts/helm_upgrade.bash from the repo root.
Multi-login Authenticator#
The multi-login system uses MultiAuthenticator to combine multiple authentication methods on a single login page:
c.MultiAuthenticator.authenticators = [
{
"authenticator_class": CustomGitHubOAuthenticator,
"url_prefix": "/github",
},
{
"authenticator_class": CustomFirstUseAuthenticator,
"url_prefix": "/local",
},
]
CustomGitHubOAuthenticatorhandles GitHub OAuth loginCustomFirstUseAuthenticatorhandles local account login (each user has their own password)The
url_prefixdistinguishes login methods, and the callback URL is/hub/<method>/oauth_login
To enable multi-login, set custom.authMode: "multi" in runtime/values.yaml. The Hub image includes jupyterhub-multiauthenticator and jupyterhub-firstuseauthenticator as dependencies.
RemoteLabSpawner#
The spawner allocates resources based on user permissions (e.g., GitHub team membership). It generates a resource selection page where users choose their environment. The spawn page is a React application located at runtime/hub/frontend/apps/spawn/.
Workflows#
Workflow 1: Apply config changes#
Edit
runtime/values.yamlFrom the repo root, run one of:
# Single-node (with auplc-installer) sudo ./auplc-installer rt upgrade # Multi-node / custom Helm bash scripts/helm_upgrade.bash
Check status with
k9sorkubectl get pods -n jupyterhub
Workflow 2: Add a new resource image#
Create a new folder under
dockerfiles/, e.g.,dockerfiles/Courses/NewImage/Create a
Dockerfileandbuild.sh. The base image is typicallyubuntu:24.04with a tarball ROCm install (seedockerfiles/Base/for reference).Build and test the image locally before pushing:
docker build -f dockerfiles/Courses/NewImage/Dockerfile -t ghcr.io/amdresearch/auplc-newimage:latest .
Push to the container registry (requires push permissions to
ghcr.io/amdresearch).Add the new image to
runtime/values.yaml:custom: resources: images: NewImage: "ghcr.io/amdresearch/auplc-newimage:latest" requirements: NewImage: cpu: "4" memory: "16Gi" amd.com/gpu: "1" teams: mapping: gpu: - NewImage # Add to appropriate team(s)
Add the image as a prepuller in
runtime/values.yaml:prePuller: extraImages: auplc-newimage: name: ghcr.io/amdresearch/auplc-newimage tag: latest
Deploy:
sudo ./auplc-installer rt upgrade # or: bash scripts/helm_upgrade.bash (from repo root)
For new images, prepulling may take time depending on network speed. Monitor with
k9s. If a node halts, delete and restart prepuller pods. If problems persist, SSH into the node and restart K3s.If timeout causes
pending-upgradedfailure, check past versions withhelm history jupyterhub -n jupyterhub, rollback withhelm rollback jupyterhub <version> -n jupyterhub, then redeploy.
Workflow 3: Update an existing image#
Update the image tag in
build.shandruntime/values.yaml(undercustom.resources.imagesandprePuller.extraImages).Build and push to the registry.
Deploy:
sudo ./auplc-installer rt upgrade
If there are problems, refer to steps 8-9 in Workflow 2.
Workflow 4: Edit resource limits or team permissions#
Edit
runtime/values.yaml:custom.resources.requirements— CPU, memory, GPU limits per resourcecustom.teams.mapping— which teams can access which resources
Deploy:
sudo ./auplc-installer rt upgrade
Workflow 5: Change login settings#
Set
custom.authModeinruntime/values.yaml:"auto-login"— no credentials required (single-node dev)"dummy"— any username/password accepted (testing)"github"— GitHub OAuth only"multi"— GitHub OAuth + local accounts
For GitHub OAuth, configure
hub.config.GitHubOAuthenticatorinruntime/values.yaml. See GitHub App Setup.For local accounts, each user has their own password (set on first login or via batch scripts). See Authentication Guide.
Deploy:
sudo ./auplc-installer rt upgrade
Workflow 6: Change announcement on login page#
Edit the announcement HTML in
runtime/values.yamlunderhub.extraFiles.announcement.txt.stringData.Deploy:
sudo ./auplc-installer rt upgrade