📚 Créer un cluster kube local avec kind

Kind : Kubernetes In Docker (mettre kubernetes dans un conteneur Docker)

Kind est un outil qui permet de créer des clusters Kubernetes dans des conteneurs Docker.

C'est un outil conçu à la base pour tester kubernetes lui-même, mais aujourd'hui, il est utilisé pour créer des clusters locaux pour développer et tester des applications, mais aussi dans des pipelines CI/CD. Kind est un outil open source, il est donc disponible gratuitement.

Prérequis :

Vous aurez besoin d'un environnement Docker ou Docker compatible pour utiliser Kind :

  • kubectl
  • Docker ou
  • Podman ou
  • ou tout autre outil qui permet, de lancer un conteneur runtime compatible avec Docker comme Orbstack disponible sur Mar ARM64.

Personnellement, Orbstack reste mon outil préféré pour les développements locaux.

Installation

En fonction de votre système d'exploitation, suivre la procédure d'installation.

Exemple :

# Pour ARM Macs
[ $(uname -m) = arm64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.26.0/kind-darwin-arm64
chmod +x ./kind
sudo mv kind /usr/local/bin/
# Pour windows  
curl.exe -Lo kind-windows-amd64.exe https://kind.sigs.k8s.io/dl/v0.26.0/kind-windows-amd64
#Déplacer le fichier dans le dossier C:\votre-dossier\ 
#Ajouter le chemin du dossier dans le PATH

modifier-le-path-de-windows-ajouter-un-dossier-au-path

Verifier l'installation en exécutant la commande suivante :

kind

Vous devriez voir une sortie similaire à celle-ci :

kind

! Kind est installé et prêt à être utilisé 🎉.

Créer un cluster kubernetes avec kind :

Rien de plus simple, il suffit d'exécuter la commande suivante :

kind create cluster

kind

Kind va créer un cluster Kubernetes avec un seul nœud (machine linux ou conteneur docker dans notre cas), et le nommer par défaut kind.

Pour vérifier que le cluster est bien créé, il suffit d'exécuter la commande suivante :

kind get clusters

Pour créer un cluster avec un nom différent :

kind create cluster --name mon-cluster-x

Le boulot de kind est fait, vous pouvez maintenant utiliser votre cluster comme vous le feriez avec un vrai cluster Kubernetes entre guillemets.

Afficher vos contextes kubernetes:

kubectl config get-contexts

Vous devriez voir un résultat similaire à ceci : kind

Maintenant que vous avez un cluster kubernetes de prêt, vous pouvez par exemple déployer une application avec kubectl :

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --target-port=80 --type=ClusterIP

Ceci va créer un déploiement nginx avec un service exposé sur le port 80. Pour afficher les pods, les services et les déploiements :

kubectl get pods,svc,deploy

L'IP du service affiché n'est pas accessible depuis l'extérieur, vous devez donc utiliser le port-forwarding pour accéder à l'application :

kubectl port-forward service/nginx 8080:80

kind

Vous pouvez maintenant accéder à l'application en allant sur l'url suivante : localhost:8080 kind

Supprimer un cluster kind :

Après avoir fini de travailler avec votre cluster, vous pouvez le supprimer en exécutant la commande suivante :

kind delete cluster
# ou spécifiez le nom du cluster à supprimer si vous l'avez nommé différemment :
kind delete cluster --name mon-cluster-x

Les alternatives à kind :

Il existe une multitude d'outils pour créer des clusters Kubernetes locaux, voici quelques-uns :

Similair à kind :

  • minikube Le tout prémier outil pour créer des clusters Kubernetes locaux.
  • k3d Très similaire à kind, mais utilise k3s en arrière-plan.
  • k0s

Version desktop :

  • Docker Desktop (gros consommateur de RAM)
  • Rancher Desktop
  • Podman Desktop
  • Orbstack super outils en plus d'émuler k8s, il est capable de gérer des machines virtuelles, pour le moment disponible que sur (Mac ARM64 seulement). Consomme très peu en resources.

Conclusion

Kind est un outil très pratique pour créer des clusters Kubernetes locaux pour développer et tester des applications. Je l'ulitilse beaucoup pour tester de nouveaux concepts et outils dans kubernetes, sans avoir à monter tout une infra complète.

Tips et astuces

Vous pour créer un cluster avec plusieurs noeuds (conteneurs) :

kind create cluster --name mon-cluster-x --config=kind-config.yaml

Ci-dessous un exemple de fichier de configuration pour un cluster kubernetes HA (Haute disponibilité) avec 3 controleurs et 3 workers :

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

Références