Skip to content

dennismdejong/nwb

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚀 JupyterHub GitOps (NWB Bank)

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)

Inhoudsopgave

Repository Structuur

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 in apps/base/jupyterhub/overlays.
  • scripts: Bevat PowerShell-scripts voor eenmalige configuratietaken en beheer.

🛠 Voorwaarden

  • Windows Terminal met PowerShell 7+.
  • kubectl geconfigureerd voor de juiste NKP-context.
  • flux CLI geïnstalleerd.
  • Toegang tot Azure Portal (voor Entra ID) en Azure DevOps (voor Git repos).

⚙️ Installatie & Configuratie

Voer deze stappen uit om een nieuwe omgeving te configureren.

1. Authenticatie (Entra ID)

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-secrets aan met de authenticatiegegevens in de jupyterhub namespace.

2. SSL Certificaten

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.yaml triggeren cert-manager om een certificaat aan te vragen en op te slaan in het secret jupyter-tls-secret.

3. Database Secrets

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-secrets en db1-secrets aan in de jupyterhub namespace.

4. Teams Notificaties

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 de flux-system namespace.

5. Git Sync (Azure DevOps SSH)

Om Jupyter notebooks vanuit een Azure DevOps Git-repository te synchroniseren, is een SSH-sleutel nodig.

  1. Genereer een SSH keypair: ssh-keygen -t rsa -b 4096 -f id_rsa_jupyter -N ""
  2. Voeg de publieke sleutel (.pub) toe aan de "SSH public keys" in Azure DevOps.
  3. Maak het secret aan in de jupyterhub namespace 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)

Scripts Overzicht

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.

🏗 Deployment Workflow

Standaard workflow voor het uitrollen van wijzigingen:

  1. Maak wijzigingen: Pas de manifesten aan in de base/ of overlays/ mappen.
  2. Commit & Push: Push de wijzigingen naar de main branch van deze Git-repository.
  3. Automatische Sync: Flux detecteert de wijzigingen en past ze automatisch toe op het cluster.
  4. Handmatige Sync (optioneel): Gebruik Sync-Flux.ps1 of flux reconcile om een sync te forceren.
    # Voorbeeld met flux cli
    flux reconcile source git flux-system
    flux reconcile kustomization jupyterhub-deployment -n flux-system

🌐 DNS Namen

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors