Publié le 25 novembre 2020, mis à jour le 21 décembre 2023.

Que vous soyez expert ou non dans l’IT, vous avez forcément déjà entendu parler de Machine Learning et du système open source Kubernetes. Et bien sachez que des développeurs travaillent, depuis quelques temps maintenant, afin de combiner le meilleur de ces deux mondes et ainsi créer Kubeflow. Ce dernier est un projet Open-source qui permet donc de déployer des workflows de Machine Learning sur Kubernetes, quel que soit l’endroit où est hébergé votre cluster k8s (on-premises, GCP, AWS, IBM ou encore Openshift).

Dans cet article, nous allons voir comment déployer Kubeflow sur GKE, le service managé de Kubernetes sur Google Cloud Platform (GCP).

Prérequis pour installer Kubeflow sur Google Cloud Platform

Avant de continuer, nous allons modifier certaines valeurs de variables qui seront exportées et utilisées dans les différents scripts/déploiements.

  • Créer un projet Google Cloud Platform avec le rôle “owner”
  • Initialiser les services gcloud via le script suivant :
  • Créer un client Oauth pour Kubeflow afin d’utiliser Cloud IAP (recommandé). IAP s’occupe de l’authentification et de l’autorisation des utilisateurs pour votre application web.
  • Outils à installer :

Voici un exemple de script pour les installer sur votre poste client (Ubuntu pour ma part). Si vous n’êtes pas sous cette distribution, veuillez regarder la documentation officielle des outils à installer pour votre OS :

Déployer un cluster dit de « management »

Afin de déployer Kubeflow, nous avons besoin d’un petit cluster GKE où sera installé Cloud Config Connector, qui rend plus simple la configuration de ressources Google via Kubernetes (dans notre cas via Yaml et Kustomize). Généralement, il est conseillé de le déployer dans un autre projet GCP où vous pourrez administrer vos différentes instances Kubeflow. Pour cet exemple, nous avons installé le cluster de management ainsi que Kubeflow dans le même projet.

Pour se faire, voici un script qui permet de préparer l’installation, ainsi que la configuration du nouveau cluster.

Ici nous utilisons kpt pour venir télécharger puis utiliser comme package un ensemble de fichiers de configuration depuis un répertoire github distant maintenu par Kubeflow. Puis nous modifions certaines valeurs afin de customiser notre déploiement. En effet, kpt est un outil Open source qui permet de créer, publier, modifier, mettre à jour et déployer des manifestes de configuration.

Un fichier Makefile est utilisé comme point d’entrée pour nos configurations ainsi que pour notre déploiement. C’est ici que nous mettons à jour les valeurs propres à notre projet avec la commande sed.

On modifie également l’appel de Kustomize dans le Makefile car nous utilisons une version précise de ce dernier (non présent dans le PATH). Pour finir, on crée le compte de service ${NAME}-cnrm-system@${PROJECT}.iam.gserviceaccount.com et on lui assigne des droits avec suffisamment de privilège car c’est via cette identité que les ressources GCP seront créées (ConfigConnector).

Installer Kubeflow

Kubeflow est une plateforme qui héberge différents outils, frameworks ou encore services sur un même et unique cluster Kubernetes. Ainsi, comme vous l’aurez compris, derrière cette solution se cache une architecture microservice distribuée complexe. Développer un workflow de Machine Learning nécessite l’intervention de composants et services bien différents, qui sont d’ailleurs développés indépendamment, et c’est grâce à ce type d’infrastructure proposé par Kubeflow qu’il est possible de répondre favorablement à ce genre de complexité. Il utilise donc un service Mesh qui n’est autre qu’Istio. Dans notre cas, Istio permet de sécuriser, connecter et surveiller les différents microservices comme :

  • mise en place de la sécurisation des communications service-to-service avec authentification et autorisation fortes
  • mise en place des métriques, logs et traces du trafic réseau (ingress/egress)
kubeflow web (1)

Schéma expliquant les étapes de traitement d’une requête utilisateur via Istio depuis l’UI.

Voici un script qui exécute les différentes étapes pour configurer et installer notre nouvelle instance Kubeflow. Comme pour le « management-cluster », nous utilisons l’outil kpt pour modifier les valeurs propres au déploiement.

Au cours de l’installation, vous serez sûrement confronté à quelques erreurs du type :

error: unable to recognize ".build/application/app.k8s.io_v1beta1_application_application-controller-kubeflow.yaml": no matches for kind "Application" in version "app.k8s.io/v1beta1”

Pas de panique, cela signifie simplement que le endpoint du Custom Resource en question n’a pas encore été enregistré dans l’API serveur de Kubernetes lorsque l’on a tenté de créer ce CRD. Il suffit juste de refaire un make apply dans le dossier KFCDIR de votre projet (personnellement j’ai dû en faire 3). En effet Kubernetes ne permet pas de mettre de dépendance lors de la création d’objets. Vous devrez sûrement exporter dans votre terminal le client_id et secret.

Pour vérifier votre déploiement, et assigner les droits à votre utilisateur pour accéder à l’interface Web, exécutez le script suivant.

Accéder à l’interface Web

Il faut parfois attendre jusqu’à 20 minutes pour que l’interface web soit accessible. Le lien est de la forme :

https://KF_CLUSTER_NAME.endpoints.PROJECT_ID.cloud.goog/.

À vous de jouer désormais !

kubeflow (1)

Désinstaller Kubeflow

Allez dans dans votre dossier KFCDIR et exécutez make delete-gcp. Puis supprimez le namespace associé à votre projet dans le cluster de management. J’ai également dû supprimer le context et le cluster définis dans mon kubeconfig pour éviter toute erreur.

Cet article vous montre comment installer rapidement Kubeflow sur un cluster Google Kubernetes Engine (GKE). A noter que la sortie de la version 1.2 vient d’être officiellement communiquée, incluant l’amélioration de nombreuses fonctionnalités du workflow Machine Learning.😉