Introduction
Utiliser Kubernetes en local avec Kind sur Windows, une alternative à Minikube expliqué dans cet article. Découvrez comment démarrer avec Kind dans cet article pour monter un cluster Kubernetes en local dans votre WSL2.
L’article abordera les thématiques suivantes :
Si vous êtes nouveau avec Kubernetes et que vous ne savez pas par où commencer, vous pouvez consulter l’article suivant qui présente Kubernetes ainsi que les concepts essentiels pour démarrer.
Windows & le WSL2
Depuis avril 2020, le WSL2 est disponible et offre comme avantage notable à son petit frère (version 1 du WSL) la conteneurisation avec Docker.
Ne cherchez pas les commandes systemctl
, elles ne sont pas disponibles à l’heure actuelle. Il faut se contenter du bon vieux service
.
Avec le WSL2, vous pouvez installer Docker comme sur n’importe quelle machine Linux.
Si vous démarrez sur le WSL2, vous pouvez commencer par cet article qui vous guide pour bien démarrer sur le WSL2 sous Windows 10.
Le site officiel de kind propose d’installer Docker for Windows. Etant donné que nous utilisons le WSL2, je vous déconseille de suivre cette procédure.
Kind
Version 0.11.1
Documentation officielle : https://kind.sigs.k8s.io/
Les Concepts
Kind offre la possibilité d’exécuter un cluser Kubernetes dans un environnement minimaliste : Docker.
Le mode de fonctionnement peut dérouter au premier abord : inception des couches virtuelles. Ce procédé est de plus en plus exploité par les grandes firmes pour offrir une souplesse de provisioning et une réactivité inégalable. C’est ainsi VMware et Microsoft prennent le pas sur cette inception de conteneurs.
Docker utilise le système d’isolation, pas de virtualisation (type 1 ou 2). Par abus de langage, on parle de virtualisation applicative.
Le serveur Hôte exécute docker, c’est le point de démarrage de l’inception.
La création du cluster initie un conteneur qui exécute Docker. En réalité, ce conteneur a simplement accès au socle Docker de l’hôte en utilisant la socket. Ça veut tout de même dire qu’il le droit de vie et de mort sur l’ensemble des conteneurs Docker.
Tous les conteneurs de Kind se comportent de la même manière.
Quelques explications
La gestion des réseaux
On peut configurer la partie réseau au sein de Kind, et forcer l’utilisation de certaines configuration.
On peut notamment jouer sur :
- Le type d’adressage IP autorisé dans le cluster
- L’adresse du serveur API (point de contact du control-plane)
- Les sous-réseaux attribués aux Pods
- Les sous-réseaux attribués aux Services
- L’utilisation du CNI natif à Kind
- Le système de communication pour le proxy (kube-proxy)
Si vous rencontrez un conflit entre IPv4 et IPv6 en exécutant Kind, forcez l’utilisation de l’IPv4 dans la configuration :
kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 [...] networking: ipFamily: ipv4
Les éléments du cluster
Le moteur de Kind propose une fonctionnalité intéressante pour la simulation d’environnement à grande échelle, la création d’un cluster de plusieurs machines.
On peut ajouter autant de machines qu’on le souhaite parmi les catégories suivantes :
control-plane
: “serveur” de contrôle qui réceptionne les requêtes et concilie les ordres envoyés auxworkers
,worker
: “serveur” où sont exécutés les conteneurs.
Bien entendu, ce ne sont pas des serveurs mais bien des conteneurs qui sont exécutés.
Exemple de configuration (1 control-plane et 3 workers) :
kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 [...] nodes: - role: control-plane - role: worker - role: worker - role: worker
Procédure d’installation
Se prémunir des erreurs
Bien que le WSL2 soit maintenant disponible comme mise à jour régulière sous Windows 10, des bugs sont toujours ouverts à l’heure actuelle concernant l’interaction entre Docker et WSL2 :
- https://github.com/docker/for-linux/issues/219 (opened)
- https://github.com/kubernetes/minikube/issues/459 (closed)
- https://github.com/kubernetes/minikube/issues/5392 (closed)
Ces bugs introduisent quelques comportement non attendus.
Pour se prémunir de ces futures potentielles erreurs, réalisez les actions qui suivent.
Activer et monter le sysfs
sudo mkdir /sys/fs/cgroup/systemd sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd
Installer Docker
Installons Docker en suivant la documentation officielle : https://docs.docker.com/engine/install/ubuntu/
# Prérequis sudo apt-get update sudo apt-get remove -t docker docker-engine docker.io containerd runc sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common # Installation curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get install -y docker-ce docker-ce-cli containerd.io
Lançons docker à l’aide de son service :
sudo service docker start
Ajoutons les droits d’exécuter les commandes Docker à notre utilisateur :
sudo groupadd docker sudo usermod -aG docker $USER
Vous devez vous déconnecter/reconnecter pour prendre en compte la modification des groupes et droits utilisateur.
Installer Kind
L’installation de Kind peut se faire en suivant la documentation officielle.
Nous allons install Kind depuis la page de releases sur GitHub :
wget -O kind https://github.com/kubernetes-sigs/kind/releases/download/v0.11.1/kind-linux-amd64 chmod +x ./kind sudo mv ./kind /usr/local/bin/
Créons la configuration nécessaire à lancer le cluster, créons le fichier cluster-config.yaml
:
kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 networking: ipFamily: ipv4 nodes: - role: control-plane image: kindest/node:v1.20.0 extraPortMappings: - containerPort: 30000 hostPort: 30000 protocol: TCP
A présent, nous pouvons démarrer le cluster local Kubernetes grâce à Kind (nom du cluster kind
, configuration cluster-config.yaml
et activation du debug -v 1
)
Le fichier de configuration
cluster-config.yaml
doit être accessible en chemin relatif. Il est impossible d’utiliser le chemin absolu dans la commande de création.
kind create cluster --config=cluster-config.yaml --name=local -v 1
Creating cluster "local" ... ✓ Ensuring node image (kindest/node:v1.20.0) 🖼 ✓ Preparing nodes 📦 ✓ Writing configuration 📜 ✓ Starting control-plane 🕹️ ✓ Installing CNI 🔌 ✓ Installing StorageClass 💾 Set kubectl context to "kind-local" You can now use your cluster with: kubectl cluster-info --context kind-local Have a question, bug, or feature request? Let us know! https://kind.sigs.k8s.io/#community 🙂
La création du cluster kind renseigne automatiquement le fichier de contextes Kubernetes : ~/.kube/config
. Ce qui facilite la configuration du client pour accéder au cluster.
Kubectl
Kind se comporte comme un cluster autonome et il devient accessible avec le client kubectl
classique.
Vous pouvez télécharger la version du binaire sur la page officielle.
kubectl cluster-info --context kind-local
Kubernetes master is running at https://127.0.0.1:39731 KubeDNS is running at https://127.0.0.1:39731/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
Supprimer le cluster
Si vous souhaitez supprimer le cluster, pas de prise de tête, choisissez votre cible et shootez-le !
Nom du cluster kind : cluster
kind delete clusters local
Deleted clusters: ["local"]
Conclusion
La création d’un cluster Kind est chose facile, sauf parfois sous le WL2 (merci Microsoft !). Avec ces premiers pas, vous pouvez utiliser le cluster et manipuler les objets Kubernetes à souhait.
Kind est une alternative sérieuse à Minikube pour l’utilisation de Kubernetes en local. Il est plus stable que Minikube et offre la possibilité de simuler un cluster multi-noeuds avec Docker.
Bibliographie
- Kubernetes : https://kubernetes.io/
- Kind : https://kind.sigs.k8s.io/
- Windows WSL : https://docs.microsoft.com/fr-fr/windows/wsl/install-win10