Microk8s et Quarkus Part 1 : Comment faire du kubernetes à moindre frais

Le but de cette série de billets est de montrer comment on peut simplement, facilement et gratuitement (à partir du moment ou vous avez un ordinateur suffisamment performant pour développer) faire du kubernetes et déployer des applications conteneurisées. Et concernant ces dernières, je montrerai en quoi Quarkus est le candidat idéal (A Kubernetes Native Java stack).

J’ai choisi pour cela de vous présenter dans cet article un outil qui est Microk8s, développé par les équipes de Canonical (Ubuntu). Il existe d’autres alternatives comme minikube, minishift, docker desktop mais je vais focus sur Microk8s qui me semble intéressant à découvrir et à utiliser.

MicroK8s is a CNCF (Cloud Native Computing Foundation) certified upstream Kubernetes deployment that runs entirely on your workstation or edge device

Nous avons bien là un « vrai » k8s et nous allons voir comment l’installer, le configurer et l’utiliser sans avoir spécialement de compétences Ops. C’est pour cela que cet outil est présenté comme Low-ops.

Cette article est tiré d’un apéro-code (webinar) que j’ai réalisé pour Sedona, et au cours duquel j’installe Microk8s en live en quelques minutes puis je déploie une application Quarkus « hello world! », également en quelques minutes. Vous pouvez trouver la vidéo sur la chaine youtube de Sedona, et le code source sur mon github. Le code source est plus élaboré que le « hello world » du webinar afin d’aller plus loin qu’un petit live coding et de montrer que Quarkus et Microk8s nous permettent de faire des choses avancées tout en restant simple et facile d’approche.

Single-node cluster

Installation de Microk8s

Commençons par installer Microk8s! Je travaille sur un macOS Big Sur 11.2.3. Mais vous pouvez aussi l’installer sur du Windows ou du Linux. Dans le cas d’une installation sur un macOS, Microk8S conseille d’avoir au minimum 4GB de RAM et 40GB de disque dur de disponible.

Tout d’abord téléchargeons l’installateur Microk8s à l’aide de homebrew, le gestionnaire de paquet pour macOS

Une fois installé, lançons à présent l’installation d’un Microk8s simplement à l’aide de la commande suivante (vous devez accepter d’installer Multipass, le gestionnaire de VMs ubuntu, nous reviendrons sur ce composant un peu plus tard dans l’article)

A présent, vérifions que Microk8s est bien installé comme suit

Comme vous pouvez le constater Microk8s est bien installé et démarré en mode single-node.

Add-ons

Vous pouvez voir aussi dans les logs de la console que Microk8s amène une notion de add-ons, ci-dessus vous pouvez voir ceux qui sont activés ou non. En somme je peux rajouter des composants (add-ons) qui me seront nécessaires très simplement (loggins, monitoring, rbac, knative…). Pour les besoins de mon projet de démonstration je vais avoir besoin de :

  • Ingress : Accéder à k8s depuis l’extérieur du cluster
  • Storage : Profiter de d’un volume persistant
  • Dashboard : Le dashboard standard de k8s
  • Dns : Résolution des adresses de services
  • Istio : Pouvoir profiter d’un service mesh (cela concernera un prochain article dédié à Istio)

Donc pour activer les add-ons nécessaires il suffit simplement de lancer la ligne de commande suivante :

Clean up

Pour désactiver les add-ons on lance simplement

Et si vous voulez désinstaller tout microk8s proprement, vous pouvez juste jouer

Dashboard k8s

Revenons à notre précédente installation de Microk8s et vérifions que nous avons bien accès à la console k8s et que tout est proprement déployé et fonctionnel, nous allons démarrer le dashboard k8s pour cela de la façon suivante

Ouvrons un Firefox (avec chrome impossible d’ouvrir le site considéré comme non sécurisé) et allons sur l’url https://192.168.64.2:10443 comme indiqué en sortie de console, nous arrivons donc sur la page de login du Dashboard

Vous avez deux possibilités pour vous connecter à la console k8s, par token ou grâce à un fichier de configuration de kubectl (le cli k8s) dit kubeconfig.

Si on se connecte par token, celui-ci est fournit après avoir lancé le Dashboard dans les logs de la console, copier-coller ce token dans la console et connectez-vous.

Sinon vous pouvez choisir de vous connecter à l’aide de kubeconfig, il faut pour cela que vous ayez précédemment joué la ligne de commande suivante qui a pour effet de configurer et de pouvoir se servir du cli k8s local (kubectl)

Ensuite il ne vous reste plus qu’à sélectionner le bon fichier de config qui se trouve dans le répertoire local $HOME/.kube/config

Après vous être connecté par la méthode que vous préférez, le Dashboard se lance et nous voyons ci-dessous

Notre kube est donc bien démarré et fonctionnel.

Namespace

Nous allons donc commencer par créer un namespace pour accueillir notre future application Quarkus (nous pourrions ne pas le faire et déployer dans le namespace par défaut de k8s mais ce n’est pas la bonne façon de faire, il est préférable de bien cloisonner ses projets même pour des tests)

OK! Notre kube est prêt pour accueillir notre solution basée sur Quarkus! Chose que nous verrons lors du prochain article.

Multipass

Petite précision sur les VMs utilisées pour déployer Microk8s, on s’appuie sur Multipass (qui s’appuie sur HyperKit sous macOS, il est installé lors de l’installation de Microk8s comme évoqué précédemment), ce sont des VMs Ubuntu (encore des outils Canonical :)).

Vous avez la possibilité d’accéder à vos VMs très simplement, voyons ce qui a été installé comme VM en affichant la liste des VMs instanciées

Nous avons donc une VM Ubuntu/Microk8s qui tourne, nous pouvons y accéder à l’aide de la commande suivante

Vous pouvez donc travailler directement très facilement dans la VM si le besoin s’en fait sentir.

Multi-node cluster

Pour aller plus loin avec Microk8s, l’outil nous offre la possibilité de mettre en place un cluster multi-node et ainsi faire de la haute disponibilité, activée par défaut mais réellement opérationnelle seulement lorsque au moins 3 noeuds sont activés. Pour ajouter un noeud au master c’est très simple

Installation des noeuds

Faisons l’exercice, pour cela je vais m’appuyer sur Multipass, évoqué précédemment dans le billet, je vais donc créer 3 VMs et installer Microk8s dessus et enfin je finirai par relier ces 3 noeuds.

J’ai donc créé 3 VMs, une master, et deux workers (worker1 et worker2). A présent il faut donc installer Microk8s sur chacune d’entre elle. Commençons par le master

Notre premier noeud master est bien installé, ajoutons deux add-ons et configurons la commande kubectl sur le noeud master

Notre premier noeud master est fin prêt, à présent ajoutons lui les deux noeuds précédemment créés. Il faut pour cela avoir installer Microk8s sur chacun d’entre eux et configurer les droits de l’utilisateur ubuntu sur chaque VM

Configuration Cluster

Une fois installé, retournons dans le noeud master et jouons les commandes

Comme indiqué dans les logs en sortie de console, il faut lancer la commande microk8s join 192.168.64.7:25000/8c29567553a20d20b6c10fd3b487b0f6 sur le noeud worker1.

Refaites la manipulation sur le deuxième worker, on lance microk8s add-node sur le master et on lance la commande join sur le worker2.

Vérifions que nos trois noeuds sont bien connectés

Vous pouvez noter que nous avons bien trois noeuds et que la HA est activée. Je peux donc aussi lancer une commande kubectl pour voir l’état de mes noeuds

Vous pouvez installer des add-ons supplémentaires selon votre choix vous pouvez aussi faire du « logging, monitoring and alerting » à l’aide de Elastic, prometheus et alert manager et d’autres encore.

Mount volume

Vous voilà en passe d’utiliser un cluster de k8s de trois noeuds. Cependant il nous manque une chose pour se faciliter la vie, vous pourriez avoir besoin de partager des fichiers entre votre hôte et vos machines virtuelles. Nous allons donc avec Multipass pouvoir monter un répertoire local (celui contenant les fichiers de déploiement k8s) sur notre VM de la manière suivante

Le répertoire ~/dev/git/sedona/apero-code/mk8s-quarkus-ac/microk8s/ est donc partagé en votre host et votre VM, vous pouvez voir les fichiers du host sur la VM dans le répertoire /microk8s. A présent vous pouvez lancer des commandes kubectl local avec des fichiers de déploiements locaux ou bien lancer des commandes kubectl sur la VM avec les fichiers dans le répertoire /microk8s.

Unmount volume

Pour supprimer le montage vous pouvez simplement jouer

Dashboard k8s

Autre point, vous avez remarqué que pour installer un cluster multi-node je suis passé directement par Multipass et non l’installateur Microk8s. Du coup je n’ai pas accès à la commande locale microk8s depuis mon macOS pour lancer le dashboard.

Voici la solution, premièrement activons le dashboard sur le noeud master

Vérifions que le dashboard est bien opérationnel et si oui nous allons vouloir y accéder depuis notre machine de travail, nous allons pour cela ouvrir un accès sur l’api server à l’aide de la commande kubectl proxy comme suit

Nous avons donc démarré un proxy sur notre Kube, à présent nous pouvons donc accéder au k8s api server depuis l’IP de la VM qui est comme nous le voyons ci-dessus 192.168.64.7 sur le port 8001. Vérifions que le dashboard est bien accessible à l’adresse http://192.168.64.7:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/ (voir ici pour plus de détails)

Nous voyons bien l’interface de connexion, nous allons à présent nous donner les moyens de se connecter au dashboard sans token de connexion, pour cela connectons nous sur la VM du master et ouvrons le fichier de déploiement de k8s comme suit

Dans le fichier qui est édité nous allons rajouter un paramètre pour passer l’étape du login, enable-skip-login

Rechargeons notre page de login et nous apercevons que « Passer », ou « Skip » en anglais, apparait à côté du bouton de connexion

Cliquons dessus… Nous arrivons bien sur le Dashboard

Nous voyons bien nos trois noeuds k8s précédemment créés

Configuration kubectl

A présent, il ne nous reste plus qu’à configurer notre kubectl local (que vous devez avoir installé au préalable, voir ici) pour pouvoir gérer notre cluster directement depuis notre macOS sans se connecter sur les VMs. Nous allons pour cela récupérer la config k8s de notre master et la copier dans notre fichier de configuration local de notre macOS à l’aide des commandes suivantes

Vérifions que notre configuration est fonctionnelle

Créons le namespace qui servira à accueillir notre future application Quarkus

Clean up

Si vous voulez supprimer proprement les VMs précédemment créer, c’est encore une fois simple, lancer la ligne de commande suivante

And voilà!

A présent vous êtes en capacité de travailler sur un k8s léger en mode single-node ou, si vous voulez aller plus loin, monter un cluster multi-node.

Note : ce que nous venons d’installer et configurer n’est pas destiné à de la production, ce qui est montré dans cet article est uniquement à but pédagogique afin de pouvoir travailler avec un « vrai » k8s pour monter en compétence, faire des POCs, de la CI/CD ou tout simplement travailler rapidement sur votre poste de travail.

Dans le prochain article nous verrons pourquoi Quarkus est en titre de cette série d’article, nous verrons donc comment déployer une solution Quarkus dans un k8s grâce aux extensions et de voir comment la simplicité se poursuit dans l’utilisation et le déploiement d’applications conteneurisées dans notre Microk8s. To be continued..

Références

You may also like...