Minikube, Un cluster Kubernetes léger en local

Minikube permet d'installer un cluster Kubernetes composé d'un unique nœud, facilement et rapidement. Cette documentation présente quelques astuces et comment faire.

Minikube, Un cluster Kubernetes léger en local
A small docker ship with few containers on a lake at a port, flat 3d, white background. Généré avec l'IA DALL-E 3.

Minikube permet d'installer un cluster Kubernetes composé d'un unique nœud. Ainsi, pas besoin d'avoir plusieurs machines pour se lancer dans l'écosystème k8s.

Ce n'est pas un article "prod-ready", il s'agit là d'avoir une machine sous Linux, Windows ou macOS à disposition avec un cluster Kubernetes très léger pour étudier la solution et y effectuer des essais simples.

Version Date Commentaires
1 02/2021 Création du document
1.1 07/2022 Reformatage du document, ajout d'informations complémentaires (Windows)
1.2 08/2022 Ajout de la partie macOS M1, ajout d'un déploiement test en fin de documentation

De plus, je ne vais pas non plus traiter l'environnement et le contexte de Kubernetes, il ne s'agit pas d'un article présentation de k8s.

Il existe plusieurs possibilités pour déployer Kubernetes dans de petits labos, notamment grâce à des outils comme "k3s" ou encore "kind". L'intérêt de Minikube, c'est sa simplicité : une commande permet de générer un environnement prêt à l'emploi !

⚠️
L'article abstrait beaucoup de notions à propos de Kubernetes. L'objectif de l'article est de découvrir Minikube, non pas Kubernetes.

Introduction et prérequis pour Minikube sous Linux

Pour ce faire, je suis parti d'une VM Debian 11 (amd64) avec quelques outils indispensables pour le bon fonctionnement du système.

Outils exploités : Curl, Git, Docker, VirtualBox, linux-headers, Minikube, Kubectl.

$ sudo apt install curl git linux-headers-amd64 docker.io docker-compose --no-install-recommends

Minikube va générer un conteneur dans docker avec le nécessaire pour lancer k8s. Pour rappel, ce genre de service n'est pas à exploiter en production !

Installation de Minikube sous Linux

Les paquets nécessaires proviennent directement de Google. À ce jour, lors de la saisie de l'article, il n'existe pas encore de dépôt particulier à installer dans vos distributions. Tout est à récupérer manuellement.

Avant de lancer le cluster Kubernetes, nous devons installer l'outil kubectl, puis viendra la récupération des sources de Minikube :

$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube
$ sudo cp minikube /usr/local/bin/minikube

Source officielle

Installation de Minikube sous macOS Monterey (M1)

Pour les utilisateurs de macOS, plusieurs choix s'offrent à vous. Il est possible d'utiliser Hyperkit, Docker ou encore VirtualBox. J'ai préféré l'installation de Docker, pour rester cohérent dans cette documentation.

Deux commandes sont à saisir :

$ brew install --cask docker
$ brew install minikube

L'essentiel est prêt, ne reste plus qu'à lancer Minikube.

Installer Minikube sur Windows 11

Il est possible de récupérer la dernière version exploitable de Minikube pour Windows via ce lien officiel (https://storage.googleapis.com/minikube/releases/latest/minikube-installer.exe). Si vous préférez la ligne de commande, il est possible d'effectuer ceci grâce à une fenêtre PowerShell :

$ New-Item -Path 'c:\' -Name 'minikube' -ItemType Directory -Force
$ Invoke-WebRequest -OutFile 'c:\minikube\minikube.exe' -Uri 'https://github.com/kubernetes/minikube/releases/latest/download/minikube-windows-amd64.exe' -UseBasicParsing

Enfin, pour ajouter l'exécutable minikube dans votre profil de ligne de commande, ouvrez PowerShell en tant qu'administrateur et saisissez la commande suivante :

$oldPath = [Environment]::GetEnvironmentVariable('Path', [EnvironmentVariableTarget]::Machine)
if ($oldPath.Split(';') -inotcontains 'C:\minikube'){ `
  [Environment]::SetEnvironmentVariable('Path', $('{0};C:\minikube' -f $oldPath), [EnvironmentVariableTarget]::Machine) `
}

Sous Windows, Minikube sélectionnera l'hyperviseur par défaut pour initier ses machines virtuelles. En fonction de votre installation, ce sera en premier Hyper-V, puis soit Oracle VirtualBox ou VMware Workstation/player. Pour cet article, une machine virtuelle Hyper-V sera initiée automatiquement.

Exploiter Minikube

La partie installation est finalisée après le téléchargement et le déplacement du binaire. Maintenant, créons notre premier cluster.

Avant d'effectuer quelques clusters personnalisés, je créerai un cluster simple sans configuration personnalisée. Ensuite, j'attribuerai 6 Go de RAM et 4 vCPU pour créer les machines virtuelles nécessaires. De plus, l'extension metrics-server sera ajoutée pour avoir des statistiques dans le tableau de bord.

  • Créer le cluster avec une configuration par défaut (2 vCPU, 4 Go de RAM, disque dur virtuelle de 20 Go) :
$ minikube start
minikube start windows
Démarrage de minikube sous Windows

Supprimer les précédentes versions/essais :

$ minikube delete

# Pour effacer complètement les données et les traces résiduelles sous Linux, saisissez :
$ rm -rf ~/.{minikube,kube}
  • Créer le cluster avec des ressources spécifiques (vCPU et mémoire virtuelle) et l'extension "metrics server"
$ minikube start --memory 6144 --cpus 4
$ minikube addons enable metrics-server

À cet instant, votre cluster k8s est à présent opérationnel ! Il est en attente de ses fichiers de déploiements de vos services. Pour aller plus loin, nous pouvons ouvrir le tableau de bord de Minikube via cette commande :

$ minikube dashboard

Votre navigateur web ouvrira une page "Kubernetes dashboard", qui est le même tableau de bord disponible dans un vrai cluster Kubernetes. Dans cette page, vous pouvez lister les déploiements, les pods, les replicaSet, voir les ingress, les stockages… Tout ce qui est interne ou en relation au cluster k8s.

Une fois les tests terminés, pour stopper le cluster, une seule commande suffit :

$ minikube stop

Si vous souhaitez effacer complètement le cluster après l'avoir stoppé, utilisez cette autre commande :

$ minikube delete

Présentement, il ne vous reste plus que votre imagination pour déployer plein de conteneurs… ! Je ne suis pas allé aux limites de l'outil, il n'y a pas eu de benchmark ni de comparaison à proprement parlé entre les diverses solutions, ni même d'exemple à propos du déploiement de conteneurs.

La documentation officielle présente comment lancer un conteneur test de type "hello-world", ici, je déploierai le conteneur Nginx dont voici les lignes de commande :

$ minikube kubectl -- create deployment nginx --image=k8s.gcr.io/nginx
$ minikube kubectl -- expose deployment nginx --type=NodePort --port=80
$ minikube service nginx

La première ligne crée un déploiement intitulé "nginx". La seconde ligne de commande expose le service déployé sur le port "80". Enfin, pour accéder au service, la dernière ligne permet d'ouvrir votre navigateur, pointant directement vers le service concerné et la redirection automatique de port associée.

nginx deploiement k8ss minikube

Le tableau de bord affichera quelques informations à propos du déploiement…

Les tests peuvent à présent démarrer ! Pour tout détruire, effectuer la commande minikube delete ; ne vous restera plus qu'à tout refaire.