Kind est un outil permettant d'exécuter des clusters Kubernetes locaux à l'aide de «nœuds» de conteneur Docker. Kind est principalement conçu pour tester Kubernetes 1.11+, en commençant par les tests de conformité.

Kind se compose de:  

  • de packages Go implémentant la création de cluster, la construction d’images, etc.
  • Une interface de ligne de commande (kind) construite sur ces packages.
  • Image (s) Docker écrite pour exécuter systemd, Kubernetes, etc.
  • L'intégration de kubetest repose également sur ces packages (WIP)

Kind se rapproche donc d'autres outils existants comme :

  • Minikube
  • Kubeadm
  • MicroK8S
  • K3OS
  • ...

Installation sur MacOS

Pré-requis :

  • Docker
  • Go (go 1.12.6 or greater.)

On commence par ouvrir le terminal et lancer :

GO111MODULE="on" go get sigs.k8s.io/kind@v0.4.0

Docker vous savez l'installer, depuis le temps qu'on en parle sur ce blog ou ailleurs.

Création du cluster

Créer un cluster Kubernetes est aussi simple  de créer un cluster.  Cela amorce un cluster Kubernetes en utilisant une image de noeud prédéfinie - vous pouvez le trouver sur le noeud kindest/node de docker hub. Si vous souhaitez créer vous-même l'image du nœud, consultez la section relative à l'image du bâtiment. Pour spécifier une autre image, utilisez l’indicateur --image.

Par défaut, le cluster recevra le type de nom. Utilisez l'indicateur --name pour attribuer au cluster un nom de contexte différent.  Si vous souhaitez que la commande create cluster bloque jusqu'à ce que le plan de contrôle atteigne le statut Prêt, vous pouvez utiliser l'indicateur --wait et spécifier un délai d'expiration. Pour utiliser --wait, vous devez spécifier les unités du temps d'attente. Par exemple, pour attendre 30 secondes, attendez 30 secondes, attendez 5 minutes, attendez 5m, etc.

MBP-de-admin:~ admin$ kind create cluster
Creating cluster "kind" ...
 ✓ Ensuring node image (kindest/node:alpha-v1.14.1) 🖼
 ✓ Preparing nodes 📦
 ✓ Creating kubeadm config 📜
 ✓ Starting control-plane 🕹️
 ✓ Installing CNI 🔌
 ✓ Installing StorageClass 💾
Cluster creation complete. You can now use the cluster with:

export KUBECONFIG="$(kind get kubeconfig-path --name="kind")"
kubectl cluster-info

Après avoir créé un cluster, vous pouvez utiliser kubectl pour interagir avec ce dernier en utilisant le fichier de configuration généré par kind:

export KUBECONFIG="$(kind get kubeconfig-path)"
kubectl cluster-info

Réponse :

MBP-de-admin:~ admin$ kubectl cluster-info
Kubernetes master is running at https://localhost:54164
KubeDNS is running at https://localhost:54164/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

Il est possible de nommer le cluster crée ainsi que d'en générer plusieurs :

kind create cluster --name kind-2

Et :

MBP-de-admin:~ admin$ kind get clusters
kind
1

Déploiement d'une application - OpenFaas

Nous allons nous entrainer à déployer une application sur notre cluster Kind installé localement sur notre Mac.

  • Cloner le repo GitHub pour OpenFaaS :
git clone https://github.com/openfaas/faas-netes
cd faas-netes

kubectl apply -f namespaces.yml

# generate a random password
PASSWORD=$(head -c 12 /dev/urandom | shasum| cut -d' ' -f1)

kubectl -n openfaas create secret generic basic-auth \
--from-literal=basic-auth-user=admin \
--from-literal=basic-auth-password="$PASSWORD"

kubectl apply -f ./yaml
  • Enregistrez votre mot de passe
echo $PASSWORD

Attendez que OpenFaaS arrive :

$ kubectl get deploy -n openfaas -w

# Hit control-c when you see 1/1 or 2/2 on everything.

Accéder à la passerelle OpenFaaS le moyen le plus simple d'accéder à la passerelle ou à tout autre service consiste à utiliser kubectl port-forward sur une machine dotée du Kubernetes YAML. Si cette machine est distante, vous pouvez effectuer un tunneling SSH ou similaire.

^CMBP-de-admin:faas-netes admin$ kubectl port-forward -n openfaas svc/gateway 8088:8080 &
[1] 81634
MBP-de-admin:faas-netes admin$ Forwarding from [::1]:8088 -> 8080
Handling connection for 8088
Après login

Essayons maintenant une fonction permettant de vérifier l’expiration d’un certificat SSL:

faas-cli store deploy certinfo -g http://127.0.0.1:8088
Deployed. 202 Accepted.
URL: http://127.0.0.1:8088/function/certinfo

Résultat avec mon site web :

Conclusion

Kind est une bonne alternative à minikube car il utilise un seul conteneur de Docker. En combinant Kustomze intégré à Kubernetes 1.14, il est assez simple de l’essayer sur votre ordinateur local.