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+/- 1par rapport au cluster pour éviter les problèmes. Le mettre dans lePATH. - Téléchargement du
kubeconfigdepuis l'interface du provider (ou récupération en fonction de la distribution), le placer dans~/.kube/config - Confirmer avec
kubectl get nodesla 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 podspour suivre la création du podkubectl logs podnameune foisRunningpour 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:8888pour ouvrir un tunnel entrelocalhost:8888et 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-basiquepour nettoyer le service précédent- Recherche d'un
chartHelm 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 lechartréel (cfmanifests/jupyter-helm) - Bonne pratique : Utiliser
helm templateAVANT 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 buildpour télécharger les dépendances (helm dependencies updatepour les mettre à jour)kubectl create namespace ingress-nginxhelm template ingress-nginx . -f values.yaml -n ingress-nginxpour prévisualisationhelm install ingress-nginx . -f values.yaml -n ingress-nginxpour l'installationkubectl get pods -n ingress-nginxpour suivre l'avancée des pods,kubectl get service -n ingress-nginxpour 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)
HTTPbrut en 2023 🤮- 2 approches :
cert-manageretwildcard
- 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, ongletloginactivation deUser registration - Création d'un client
onyxiaavecRoot 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 changememc admin info devoxxmc 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)


