>_ DevTrendsfr

Langue

Accueil

Langages

Sections

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarqué Sécurité
Go

Kubernetes local en une minute sans VMs lourdes

Tester des manifests Kubernetes ou des opérateurs sur un cluster cloud distant est une approche coûteuse et lente. Attendre les builds, les pushes vers le registre et le déploiement dans un environnement de dev devient vite fatigant. Auparavant, Minikube ou K3s étaient couramment utilisés pour les tests locaux. Mais quand vous avez besoin d'exécuter des tests d'intégration rapides en CI ou de démarrer sur un ordinateur portable en quelques secondes, les machines virtuelles et les couches d'abstraction supplémentaires sont simplement un obstacle.

Des ingénieurs des SIGs Kubernetes ont rencontré ce problème en 2018 lorsqu'ils avaient besoin de tester Kubernetes lui-même. Pour cela, ils ont créé kind (Kubernetes IN Docker).

kind logo

L'outil s'est révélé tellement réussi que les développeurs ordinaires ont commencé à l'utiliser activement pour le travail quotidien et l'exécution des pipelines CI/CD.

Comment fonctionne kind

L'idée est simple. Au lieu d'exécuter des machines virtuelles complètes pour chaque nœud du cluster, kind crée des conteneurs Docker ordinaires. À l'intérieur d'un tel conteneur s'exécutent systemd, le runtime de conteneur et les composants Kubernetes.

kubeadm gère le déploiement des composants, donc l'environnement est aussi proche que possible d'un vrai cluster de production.

kind create cluster

Le projet est écrit en Go et fonctionne partout où le runtime de conteneur s'exécute. En plus de Docker, Podman et nerdctl sont supportés, et il peut tourner sur Linux, macOS et Windows.

Installation et exécution de votre premier cluster

Si vous avez déjà Go et Docker sur votre système, créer un cluster basique prend littéralement une seule ligne :

go install sigs.k8s.io/[email protected] && kind create cluster

Si vous ne souhaitez pas installer Go, les binaires sont faciles à télécharger via les gestionnaires de paquets standards.

Sur macOS :

brew install kind

Sur Linux :

curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.32.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind

Après cela, la commande kind create cluster créera un cluster à nœud unique. L'utilitaire configurera automatiquement votre kubectl, en basculant le contexte vers le nouveau cluster.

Vérifions que cela fonctionne :

kubectl get nodes

Quand vous n'avez plus besoin du cluster, supprimez-le avec la commande kind delete cluster.

Clusters multi-nœuds et configuration avancée

Un cluster à nœud unique est suffisant pour des tests simples, mais les vrais problèmes dans Kubernetes apparaissent souvent lors du travail avec plusieurs nœuds, des taints et de l'affinité. kind peut créer des clusters de n'importe quelle complexité en utilisant une configuration déclarative.

Créez un fichier kind-config.yaml :

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
role: control-plane
role: control-plane
role: control-plane
role: worker
role: worker

Exécutez la création du cluster avec le fichier de configuration :

kind create cluster --config kind-config.yaml

En résultat, vous obtiendrez un cluster haute disponibilité avec trois nœuds control-plane et deux nœuds worker sur votre machine. Et tout cela se crée à l'intérieur de conteneurs ordinaires sans charge supplémentaire sur vos CPUs.

Chargement rapide des images locales

L'une des fonctionnalités les plus pratiques pour les développeurs est de passer des images Docker locales directement dans le cluster sans registres privés.

Habituellement la chaîne ressemble à ceci : construire une image, la pousser vers Docker Hub ou un Nexus local, la tirer dans le cluster. kind raccourcit cette étape. Vous construisez une image localement et la chargez immédiatement dans les nœuds :

docker build -t my-app:v1 .
kind load docker-image my-app:v1

Après cela, vous pouvez sans risque spécifier image: my-app:v1 et imagePullPolicy: Never dans votre manifest d'application. Le cluster verra l'image immédiatement.

À quoi cela sert-il en pratique

Le projet a déjà collecté plus de 15 000 étoiles sur GitHub et est devenu la norme de facto pour tester l'infrastructure Kubernetes. Voici les principaux scénarios où il fait gagner du temps :

  1. Tests d'intégration en CI. Démarrer kind dans GitHub Actions ou un runner GitLab CI prend quelques secondes. Vous pouvez facilement démarrer un nouveau cluster, exécuter des tests pour un chart Helm ou un opérateur, et le supprimer juste après que le pipeline se termine.
  2. Développement local de contrôleurs et d'opérateurs. Quand vous écrivez votre propre CRD ou opérateur en Go/Python, vous avez besoin d'un retour rapide. kind démarre instantanément et se réinitialise facilement vers un état propre.
  3. Apprentissage et expérimentations. Vous voulez tester le comportement d'un contrôleur Ingress, un plugin CNI, ou voir comment une application se comporte quand un des nœuds tombe ? Configurer un tel bac à sable sur un ordinateur portable local prend quelques minutes.

Ce qu'il faut garder à l'esprit

Avant de lancer, gardez quelques nuances à l'esprit. kind a été créé principalement pour les tests, donc n'essayez pas de l'utiliser en production.

Notez que le travail avec les ports locaux nécessite un transfert de port explicite dans la configuration du cluster (extraPortMappings). Si vous avez besoin d'atteindre un service à l'intérieur de kind depuis la machine hôte, vous devrez spécifier les ports requis dans le fichier de configuration à l'avance.

Sinon, kind est un excellent remplacement pour les machines virtuelles volumineuses. C'est rapide, prévisible et économe en ressources.

Projets similaires