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
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 !
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
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
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.
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.