Aller au contenu

Créer un cluster Kubernetes local avec Kind (Kubernetes IN Docker)

Bannière d'article

Kind (Kubernetes IN Docker) est un outil permettant de faire fonctionner des clusters Kubernetes sur votre machine locale en utilisant des conteneurs Docker. Il a été conçu pour faciliter la mise en place et l'exécution d'un cluster Kubernetes local pour des fins de développement et de test.

Dans cet article, nous vous montrerons comment installer et utiliser Kind sur une machine locale sous Windows via le WSL2 Ubuntu.

Prérequis

Avant de commencer, vous aurez besoin de :

Installation de kubectl

Sur un système type Ubuntu, exécutez les commandes suivantes pour installer kubectl :

su - # Les droits root sont nécessaires, l'utilisation de sudo est possible
apt-get update -y && apt-get install -y apt-transport-https ca-certificates curl gnupg
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | tee /etc/apt/sources.list.d/kubernetes.list
chmod 644 /etc/apt/sources.list.d/kubernetes.list
apt-get update -y && apt-get install -y kubectl
exit # Quitter la session root

Installation de helm

Exécutez les lignes suivantes pour installer la ligne de commande helm :

su - # Les droits root sont nécessaires, l'utilisation de sudo est possible
apt-get update -y && apt-get install -y curl gpg
curl https://baltocdn.com/helm/signing.asc \
| gpg --dearmor | tee /usr/share/keyrings/helm.gpg > /dev/null
apt-get install apt-transport-https --yes
echo "deb [arch=$(dpkg --print-architecture) \
signed-by=/usr/share/keyrings/helm.gpg] \
https://baltocdn.com/helm/stable/debian/ all main" \
| tee /etc/apt/sources.list.d/helm-stable-debian.list
apt-get update -y && apt-get install -y helm
exit # Quitter la session root

Étape 1 : Installer Kind

Il existe plusieurs manières d'installer Kind. La manière la plus simple consiste à utiliser les versions binaires précompilées disponibles sur la page de téléchargement de Kind.

Pour télécharger et installer la dernière version de Kind, ouvrez une fenêtre de terminal et entrez les commandes suivantes :

curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.22.0/kind-linux-amd64
chmod +x ./kind
su - # Les droits root sont nécessaires, l'utilisation de sudo est possible
mv ./kind /usr/local/bin/kind
exit # Quitter la session root

Remplacez v0.22.0 par le numéro de version souhaité.

A ce stade un simple appel à la commande kind version devrait afficher la version de kind.

kind v0.22.0 go1.20.13 linux/amd64

Étape 2 : Créer un cluster Kind

Nous allons maintenant définir un fichier kind-config.yaml permettant de configurer le contenu du cluster (control plane, worker, etc.).

Voici un exemple de configuration qui nous permettra d'obtenir un control plane avec 2 noeuds et 5 workers.

cat <<EOT >> kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
  disableDefaultCNI: true
  kubeProxyMode: none
  podSubnet: "10.10.0.0/16"
  serviceSubnet: "10.11.0.0/16"
nodes:
- role: control-plane
  image: kindest/node:v1.29.2@sha256:51a1434a5397193442f0be2a297b488b6c919ce8a3931be0ce822606ea5ca245
- role: control-plane
  image: kindest/node:v1.29.2@sha256:51a1434a5397193442f0be2a297b488b6c919ce8a3931be0ce822606ea5ca245
- role: worker
  image: kindest/node:v1.29.2@sha256:51a1434a5397193442f0be2a297b488b6c919ce8a3931be0ce822606ea5ca245
- role: worker
  image: kindest/node:v1.29.2@sha256:51a1434a5397193442f0be2a297b488b6c919ce8a3931be0ce822606ea5ca245
- role: worker
  image: kindest/node:v1.29.2@sha256:51a1434a5397193442f0be2a297b488b6c919ce8a3931be0ce822606ea5ca245
- role: worker
  image: kindest/node:v1.29.2@sha256:51a1434a5397193442f0be2a297b488b6c919ce8a3931be0ce822606ea5ca245
- role: worker
  image: kindest/node:v1.29.2@sha256:51a1434a5397193442f0be2a297b488b6c919ce8a3931be0ce822606ea5ca245
EOT

Puis en exécutant les commandes suivantes, vous allez instancier le cluster défini au dessus.

# Création du cluster kind utilisant le fichier de configuration précédent
kind create cluster --name lab --config kind-config.yaml

Étape 3 : Accéder au cluster

Pour accéder au cluster, vous devrez utiliser l'outil de ligne de commande kubectl. Si vous n'avez pas kubectl installé sur votre machine, vous pouvez suivre les instructions de la documentation Kubernetes pour l'installer.

Une fois kubectl installé, vous pouvez l'utiliser pour vous connecter au cluster Kind. Pour ce faire, vous devrez définir la variable d'environnement KUBECONFIG pour qu'elle pointe sur le fichier de configuration du cluster.

Pour définir la variable d'environnement KUBECONFIG, entrez la commande suivante :

export KUBECONFIG="$(kind get kubeconfig --name lab)

Remplacez lab par le nom de votre cluster si vous en avez plusieurs.

Avec la variable d'environnement KUBECONFIG définie, vous pouvez maintenant utiliser kubectl pour accéder au cluster.

Par exemple, pour afficher les nœuds du cluster, entrez la commande suivante :

kubectl get nodes

Pour afficher les pods du cluster, entrez la commande suivante :

kubectl get pods

Étape 4 : Installation de Cilium

Pour installer Cilium, nous allons passer par le chart Helm officiel dont voici la configuration requise.

cat <<EOT >> cilium-values.yaml
kubeProxyReplacement: strict
k8sServiceHost: lab-control-plane
k8sServicePort: 6443
hostServices:
  enabled: false
externalIPs:
  enabled: true
nodePort:
  enabled: true
hostPort:
  enabled: true
image:
  pullPolicy: IfNotPresent
ipam:
  mode: kubernetes
hubble:
  enabled: true
  relay:
    enabled: true
EOT

Ensuite, nous pouvons installer le chart avec ces commandes.

# Installation de Cilium
helm repo add cilium https://helm.cilium.io/
docker pull quay.io/cilium/cilium:v1.15.4
kind load --name lab docker-image quay.io/cilium/cilium:v1.15.4
helm upgrade --install --namespace kube-system cilium cilium/cilium --version 1.15.4 --values cilium-values.yaml

Après un peu d'attente, vous devriez obtenir un résultat similaire en exécutant un kubectl get nodes :

kubectl get nodes
NAME                         STATUS   ROLES           AGE   VERSION
lab-control-plane   Ready    control-plane   9d    v1.25.3
lab-worker          Ready    <none>          9d    v1.25.3
lab-worker2         Ready    <none>          9d    v1.25.3
lab-worker3         Ready    <none>          9d    v1.25.3
lab-worker4         Ready    <none>          9d    v1.25.3
lab-worker5         Ready    <none>          9d    v1.25.3

Étape 5 : Stopper et supprimer le cluster

Pour arrêter le cluster, utilisez la commande kind delete cluster. Par exemple :

kind delete cluster --name lab

Cela arrêtera tous les conteneurs et supprimera le cluster de votre machine.

Étape 6 : Activer l'autocomplétion

L'autocomplétion peut être activée de façon permanente en exécutant la commande suivante.

echo "source <(kind completion bash)" >> ~/.bashrc

Cette commande ajoute au .bashrc de l'utilisateur courant le script d'autocomplétion à sourcer.

Conclusion

Dans cet article, nous vous avons montré comment installer et utiliser Kind pour exécuter des clusters Kubernetes locaux sur votre machine. Avec Kind, vous pouvez facilement mettre en place et tester des environnements Kubernetes sans avoir besoin de matériel dédié ou de ressources cloud.