Deze repository bevat de Kustomize-manifesten en beheer-scripts voor het uitrollen en beheren van JupyterHub op het Nutanix Kubernetes Platform (NKP) via GitOps.
De uitrol is opgezet voor vier omgevingen:
- Ontwikkel (
o) - Acceptatie (
a) - Test (
t) - Productie (
p)
- Repository Structuur
- Voorwaarden
- Installatie & Configuratie
- Scripts Overzicht
- Deployment Workflow
- DNS Namen
De repository is als volgt opgebouwd:
/
├─── apps/ # Kustomize applicaties
│ ├─── base/ # Basisconfiguraties
│ │ ├─── jupyterhub/ # JupyterHub basis Helm chart & resources
│ │ │ └─── clusters/ # Omgevings-specifieke activatie (a, o, p, t)
│ │ ├─── python-libs/ # Gedeelde Python libraries (PVC)
│ │ └─── sql-stack/ # Database-gerelateerde resources
└─── scripts/ # PowerShell beheer-scripts
apps/base: Bevat de basis-manifesten die voor elke omgeving gelden.apps/base/jupyterhub/clusters: Activeert de Kustomize-resources voor een specifieke omgeving (o,a,t,p). De overlays met omgevingsspecifieke variabelen staan inapps/base/jupyterhub/overlays.scripts: Bevat PowerShell-scripts voor eenmalige configuratietaken en beheer.
- Windows Terminal met PowerShell 7+.
kubectlgeconfigureerd voor de juiste NKP-context.fluxCLI geïnstalleerd.- Toegang tot Azure Portal (voor Entra ID) en Azure DevOps (voor Git repos).
Voer deze stappen uit om een nieuwe omgeving te configureren.
Gebruik het script Set-JupyterSecret.ps1 om de OIDC-koppeling met Entra ID (Azure AD) te configureren.
.\scripts\Set-JupyterSecret.ps1 -Environment "p" -ClientId "..." -ClientSecret "..." -TenantId "..."Wat het doet: Maakt een Kubernetes secret
jupyterhub-secretsaan met de authenticatiegegevens in dejupyterhubnamespace.
De SSL-certificaten worden automatisch beheerd door cert-manager met behulp van de nwb-workspace-ca-issuer. Er is geen handmatige actie nodig voor het importeren van PFX-bestanden.
Wat het doet: De ingress-annotaties in
helmrelease.yamltriggerencert-managerom een certificaat aan te vragen en op te slaan in het secretjupyter-tls-secret.
Configureer de wachtwoorden voor de lokale MSSQL database en externe database verbindingen met Set-DbSecrets.ps1.
.\scripts\Set-DbSecrets.ps1 -Environment "p" -SaPassword (Read-Host "SA Wachtwoord" -AsSecureString) -Db1Password (Read-Host "DB1 Wachtwoord" -AsSecureString)Wat het doet: Maakt
mssql-local-secretsendb1-secretsaan in dejupyterhubnamespace.
Stel de webhook in om Flux-meldingen in Microsoft Teams te ontvangen met Set-TeamsNotification.ps1.
.\scripts\Set-TeamsNotification.ps1 -Environment "p" -WebhookUrl (Read-Host "Teams Webhook URL" -AsSecureString)Wat het doet: Slaat de webhook URL op in een secret (
teams-webhook-url) in deflux-systemnamespace.
Om Jupyter notebooks vanuit een Azure DevOps Git-repository te synchroniseren, is een SSH-sleutel nodig.
- Genereer een SSH keypair:
ssh-keygen -t rsa -b 4096 -f id_rsa_jupyter -N "" - Voeg de publieke sleutel (
.pub) toe aan de "SSH public keys" in Azure DevOps. - Maak het secret aan in de
jupyterhubnamespace van het cluster:kubectl create secret generic adov-deploy-key \ --namespace jupyterhub \ --from-file=ssh-privatekey=./id_rsa_jupyter \ --from-file=known_hosts=<(ssh-keyscan ssh.dev.azure.com)
Overzicht van alle scripts in de ./scripts map:
| Script | Beschrijving |
|---|---|
Import-PfxToK8s.ps1 |
(Gedeprecieerd) Importeert handmatig een PFX-certificaat. |
Restart-UserServer.ps1 |
Herstart de Jupyter-server van een specifieke gebruiker. |
Set-JupyterSecret.ps1 |
Configureert de Entra ID (OIDC) client secrets voor JupyterHub. |
Set-DbSecrets.ps1 |
Configureert de database wachtwoorden (MSSQL SA & Externe DB). |
Set-TeamsNotification.ps1 |
Slaat de Microsoft Teams webhook URL op voor Flux-notificaties. |
Sync-Flux.ps1 |
Forceert Flux om de Git-repository en kustomizations te synchroniseren. |
Test-JupyterEnvironment.ps1 |
Voert tests uit op een omgeving om de configuratie te valideren. |
Standaard workflow voor het uitrollen van wijzigingen:
- Maak wijzigingen: Pas de manifesten aan in de
base/ofoverlays/mappen. - Commit & Push: Push de wijzigingen naar de
mainbranch van deze Git-repository. - Automatische Sync: Flux detecteert de wijzigingen en past ze automatisch toe op het cluster.
- Handmatige Sync (optioneel): Gebruik
Sync-Flux.ps1offlux reconcileom een sync te forceren.# Voorbeeld met flux cli flux reconcile source git flux-system flux reconcile kustomization jupyterhub-deployment -n flux-system
De JupyterHub-omgevingen zijn bereikbaar via de volgende URL's:
| Omgeving | DNS-naam |
|---|---|
| Ontwikkel | https://dsl-o.nwb.local |
| Acceptatie | https://dsl-a.nwb.local |
| Test | https://dsl-t.nwb.local |
| Productie | https://dsl.nwb.local |