Kind et build Kubernetes

Photo by Pixabay from Pexels

TL;DR: Cet article montre comment utiliser Kind pour créer un build des binaires kubernetes et une image docker qui correspond à un noeud. Cette image est ensuite utilisée pour créer un cluster.

Kind ou Kubernetes in Docker, est un outil qui permet de créer un cluster Kubernetes sur Docker. Il utilise pour ça des images qui correspondent à des noeuds Kubernetes. Kind permet de créer ces images à partir du repository Github kubernetes/kubernetes.

Dans les sections qui suivent, vous verrez comment utiliser Kind pour créer un cluster puis des build/images Kubernetes. Pour utiliser Kind, vous devrez disposer de git, kubectl et docker. Pour construire les composants de Kubernetes, vous devrez, en outre, installer go. Vous voudrez utiliser la version 1.13 de Go.

Installer Kind

Il existe plusieurs manière d'installer Kind. Etant donné que go est installé, on supposera que GOPATH est alimenté et que $GOPATH/bin est dans le PATH du système. La façon la plus simple d'installer kind est alors sans doute de lancer la commande ci-dessous:

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

Démarrer un cluster avec Kind

Pour commencer, vous pouvez créer un cluster Kubernetes sur Docker. Pour cela, vous devez:

  • Choisir l'image que vous allez utiliser; Celles-ci sont disponible sur le Hub docker à kindest/node. Si vous ne précisez pas cette image, Kind utilisera l'image par défaut
  • Créer une configuration pour votre cluster comme par exemple avec le fichier kind-cluster.yaml ci-dessous. Si vous ne précisez pas de configuration, le cluster sera constitué d'un unique noeud.
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker

Pour plus de détails sur les possibilités de configurations, regardez la section Configuration du guide utilisateur de Kind.

Vous pourrez alors créer un cluster à l'aide de la commande ci-dessous:

kind create cluster --config kind-cluster.yaml \
     --image kindest/node:v1.17.0

le résultat de la commande ressemble à ce qui suit:

Creating cluster "kind" ...
 ✓ Ensuring node image (kindest/node:v1.17.0) 🖼
 ✓ Preparing nodes 📦 
 ✓ Writing configuration 📜 
 ✓ Starting control-plane 🕹️ 
 ✓ Installing CNI 🔌 
 ✓ Installing StorageClass 💾 
 ✓ Joining worker nodes 🚜 
Set kubectl context to "kind-kind"
You can now use your cluster with:

kubectl cluster-info --context kind-kind

Thanks for using kind! 😊

Vous pouvez vérifier que vous avez un cluster de trois noeuds: un pour le control-plane et deux workers. Vous pouvez également vérifier que chacun des noeuds est en fait un container docker comme ci-dessous:

kubectl get nodes
NAME                 STATUS   ROLES    AGE   VERSION
kind-control-plane   Ready    master   68s   v1.17.0
kind-worker          Ready    <none>   32s   v1.17.0
kind-worker2         Ready    <none>   32s   v1.17.0

docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Names}}"
CONTAINER ID        IMAGE                  NAMES
692d700bf3ad        kindest/node:v1.17.0   kind-worker
edf2cdb987a3        kindest/node:v1.17.0   kind-worker2
3d0820d925d5        kindest/node:v1.17.0   kind-control-plane

Supprimer un cluster avec Kind

Pour supprimer un cluster, lancez la commande ci-dessous:

kind delete cluster

Créer le build Kubernetes

Kind permet de créer un build des programmes Kubernetes et de les ajouter à une image docker qui sera utilisée ensuite pour créer un cluster. Pour cela, téléchargez le projet Kubernetes dans votre GOPATH:

go get -u github.com/kubernetes/kubernetes
cd $GOPATH/src/github.com/kubernetes/kubernetes

Vous pouvez ensuite lister les tags et faire un checkout du projet, comme par exemple ci-dessous en passant sur la version v1.17.1-beta.0:

git tag
git checkout -b 1.17.1-beta.0 v1.17.1-beta.0

Pour créer un build Kubernetes, vous pouvez lancer la commande ci-après:

kind build node-image --image kindest/node:v1.17.1-beta.0 \
     --kube-root $GOPATH/src/github.com/kubernetes/kubernetes

Au bout de quelques minutes, l'image principale ainsi que les images associées sont disponibles; vous pouvez créer un cluster avec celle-ci:

docker images kindest/node:v1.17.1-beta.0
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
kindest/node        v1.17.1-beta.0      94dafbc755aa        About a minute ago   1.3GB

kind create cluster --config kind-cluster.yaml \
   --image kindest/node:v1.17.1-beta.0

kubectl get nodes
NAME                 STATUS   ROLES    AGE     VERSION
kind-control-plane   Ready    master   3m5s    v1.17.1-beta.0-dirty
kind-worker          Ready    <none>   2m29s   v1.17.1-beta.0-dirty
kind-worker2         Ready    <none>   2m28s   v1.17.1-beta.0-dirty

Pour supprimer le cluster, une fois encore, lancez:

kind delete cluster

Pour aller plus loin

Pour aller plus loin, consultez la documentation. Vous decouvrirez nombre de paramétres pour, par exemple, exposer vos services à l'extérieur via le controlleur d'ingress nginx, utiliser IPv6 ou changer la configuration réseau. Vous pourrez également créer plusieurs clusters ou comprendre le design de la solution.

Easyteam DevOps

Easyteam DevOps