Pour poser des questions pendant la conférence : https://hebdo.framapad.org/p/devoxx-2023-conf-datalab-a0cu?lang=fr
https://minio.lab.sspcloud.fr/projet-onyxia/diffusion/Presentation/devoxx-intro.pdf
Plan de jeu :
- Provisionner un cluster Kubernetes
- Prise en main "admin" du cluster
- Datascience 101: déploiement d'un service
- Packaging, reproductibilité et configuration: Helm
- Exposition des services vers l'extérieur
- Bilan d'étape
- Onyxia, notre sauveur
- Installation d'Onyxia
- Multi utilisateurs: authentification
- Stockage S3
- Catalogue de services
- Gestion des secrets
- Customisation
- Bonus
- Un prérequis : un cluster Kubernetes
- "Agnostique de la distribution / cloud provider"
- Aujourd'hui : cluster managé chez OVH
- Création d'un cluster Kubernetes sur OVH
- Interaction avec l'API Server
- Installation de
kubectl
(https://kubernetes.io/docs/tasks/tools/), attention au Version skew policy : respecter+/- 1
par rapport au cluster pour éviter les problèmes. Le mettre dans lePATH
. - Téléchargement du
kubeconfig
depuis l'interface du provider (ou récupération en fonction de la distribution), le placer dans~/.kube/config
- Confirmer avec
kubectl get nodes
la présence des noeuds
- On a un cluster, on déploie et c'est fini, non ?
- Déploiement d'un jupyter notebook basique.
kubectl apply -f manifests/jupyter-basique
kubectl get pods
pour suivre la création du podkubectl logs podname
une foisRunning
pour consulter les logs et récupérer le token d'accès (on ne l'a pas précisé donc il est généré dynamiquement à chaque lancement)kubectl port-forward podname 8888:8888
pour ouvrir un tunnel entrelocalhost:8888
et le port 8888 du Jupyter- Accès et utilisation du Jupyter via
localhost:8888
Superbe infra datascience 👍
Intérêt du packaging, principes de Helm
Désinstallation et réinstallation du service précédent
kubectl delete -f manifests/jupyter-basique
pour nettoyer le service précédent- Recherche d'un
chart
Helm pour jupyterlab ... - https://github.com/inseefrlab/helm-charts-interactive-services
helm repo add helm-charts-interactive-services https://inseefrlab.github.io/helm-charts-interactive-services
helm repo update
helm install jupyter helm-charts-interactive-services/jupyter-python
- Pratique : faire un
chart
"coquille" avec une dépendance vers lechart
réel (cfmanifests/jupyter-helm
) - Bonne pratique : Utiliser
helm template
AVANT d'installer pour contrôler ce qui va être installé. (à défaut,helm get manifest <releasename>
pour voir les manifests après installation) - Bonne pratique : Externaliser les values dans un
values.yaml
(helm install -f values.yaml
) - Bonne pratique :
helm uninstall jupyter
cd manifests/ingress-nginx
,helm dependencies build
pour télécharger les dépendances (helm dependencies update
pour les mettre à jour)kubectl create namespace ingress-nginx
helm template ingress-nginx . -f values.yaml -n ingress-nginx
pour prévisualisationhelm install ingress-nginx . -f values.yaml -n ingress-nginx
pour l'installationkubectl get pods -n ingress-nginx
pour suivre l'avancée des pods,kubectl get service -n ingress-nginx
pour suivre l'affectation de l'IP loadbalancer- Récupérer l'IP externe (après affectation par le cloud provider)
Une adresse IP c'est bien, un nom de domaine c'est mieux
- Configuration d'un champ DNS
A
*.devoxx.insee.io
=>ipexterne
- Modifier le jupyter pour utiliser le reverse proxy (
helm upgrade jupyter helm-charts-interactive-services/jupyter-python --set ingress.enabled=true --set ingress.hostname=devoxx.insee.io
)
HTTP
brut en 2023 🤮- 2 approches :
cert-manager
etwildcard
- Wildcard (via let's encrypt) :
certbot certonly --manual --preferred-challenges dns
kubectl create secret tls wildcard --key privkey.pem --cert fullchain.pem -n ingress-nginx
- Ou cert-manager : https://cert-manager.io/docs/installation/helm/
On a un cluster, accessible aux admins avec possibilité de déployer des services de façon technique.
Nécessité d'industrialisation et de proposer une UX
onyxia.sh
Vidéo + présentation de l'appli + démo sspcloud (J)
- https://www.onyxia.sh/
- Pattern "namespace as a service"
cd manifests/onyxia-brut
,helm dependencies build
,helm install onyxia . -f values.yaml -n onyxia --create-namespace
- ...
https://datalab.devoxx.insee.io
Installation d'un Keycloak
cd manifests/keycloak
,helm dependencies build
,helm install keycloak . -f values.yaml -n keycloak --create-namespace
- Interface d'admin : https://auth.devoxx.insee.io/auth
- Création d'un realm
datalab
, ongletlogin
activation deUser registration
- Création d'un client
onyxia
avecRoot URL
:https://datalab.devoxx.insee.io
,Valid redirect URIs
:https://datalab.devoxx.insee.io/*
etWeb origins
:+
Configuration d'onyxia :
cd manifests/onyxia-oidc
,helm dependencies build
,helm upgrade onyxia . -f values.yaml -n onyxia
Intérêt du stockage S3 (F)
Installation d'un minIO
cd manifests/minio
,helm dependencies build
,helm install minio . -f values.yaml -n minio --create-namespace
- Utilisation de mc
mc alias set devoxx https://minio.devoxx.insee.io admin changeme
mc admin info devoxx
mc ls devoxx
Authentification OpenIDConnect :
- Création d'un client
minio
,Root URL
:https://minio.devoxx.insee.io
,Valid redirect URIs
:https://minio.devoxx.insee.io/*
ethttps://minio-console.devoxx.insee.io/*
,Web origins
:+
- Ajout d'un mapper pour ce client :
clients
=>minio
=>client scopes
=>minio-dedicated
=>configure a new mapper
=>hardcoded claim
:
_ Name:stsonly
_ Token claim name:policy
* Claim value :stsonly
Console disponible sur https://minio-console.devoxx.insee.io
Intégration avec Onyxia :
- Création d'un client
onyxia-minio
,Root URL
:https://datalab.devoxx.insee.io
,Valid redirect URIs
:https://datalab.devoxx.insee.io/*
,Web origins
:+
- Ajout d'un mapper pour ce client :
clients
=>onyxia-minio
=>client scopes
=>minio-dedicated
=>configure a new mapper
=>hardcoded claim
:- Name:
stsonly
- Token claim name:
policy
- Claim value :
stsonly
- Name:
- Ajout d'une audience spécifique pour ce client :
clients
=>onyxia-minio
=>client scopes
=>onyxia-minio-dedicated
=>add mapper by configuration
=>audience
:- Name:
audience-minio
- Included Custom Audience :
minio
- Add to ID token:
true
- Name:
cd manifests/onyxia-s3-minio
,helm dependencies build
,helm upgrade onyxia . -f values.yaml -n onyxia
Minio intégré dans Onyxia :)
Fonctionnement du catalogue (J)
La gestion des secrets avec Vault (F)
https://github.com/InseeFrLab/onyxia/tree/main/step-by-step#configuring-keycloak-for-vault
Design, cohérence de l'expérience utilisateur ... (J)