Avant de continuer, nous allons modifier certaines valeurs de variables qui seront exportées et utilisées dans les différents scripts/déploiements.
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 :
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).
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 :
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.
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 !
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.😉