Aller au contenu

Un cluster Kubernetes local en quelques secondes avec Kind !

Kind, l'outil idéal pour gérer Kubernetes localement avec simplicité et rapidité. Découvrez comment l'installer et le configurer !

Kind - Kubernetes In Docker

En tant que Cloud Engineer, je cherchais un outil pour étudier Kubernetes localement. Il en existe déjà quelques uns, mais Kind (Kubernetes In Docker) s’est retrouvé être mon choix de prédilection. Vous avez juste besoin de Docker et vous pouvez gérer une configuration Kubernetes très facilement.

Installation de Kind

Installation avec Brew :

brew install kind
# ceci fonctionne avec Linux, Mac, Windows (avec Docker Desktop et WSL2)

Ensuite vous pouvez créer un cluster :

kind create cluster -n kind1 [--config conf.yml]
kind create cluster -n kind2

# Récupérer la liste des clusters
kind get clusters

# Sélectionner le cluster que vous désirez, en sélectionnant le bon contexte
k config get-contexts
k config use-context kind-kind1

# Afficher les informations disponibles pour le contexte courant
k cluster-info

# Exporter les logs concernant le cluster
kind export logs -n kind1

# Vous pouvez supprimer les clusters, quand vous voulez
kind delete cluster -n kind1
kind delete cluster -n kind2

Cela prend vraiment quelques secondes pour la création, compteur à l’appui :
Kind cluster creation

Quelques configurations pour Kind

Kind offre la possibilité de faire de la configuration sur les clusters que vous créez.

Il fonctionne en se basant sur KubeADM, vous pouvez donc faire de la configuration spécifique en rapport.

Nous allons explorer quelques cas d’usage plutôt simples.

Exposition de Nginx, avec un service NodePort

Créer le cluster :

cat <<EOF | kind create cluster -n kind1 --config -
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 30000
    hostPort: 30000
    protocol: TCP
EOF

Créer le deployment et le service :

k create deployment nginx --image=nginx --port=80
k create service nodeport nginx --tcp=80:80 --node-port=30000

Maintenant, vous pouvez accéder au service exposé :

curl localhost:30000

Un cluster avec un master et un worker

Créer le cluster :

cat <<EOF | kind create cluster -n kind1 --config -
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
EOF

Un cluster avec un Nginx controller

Créer le cluster :

cat <<EOF | kind create cluster -n kind1 --config -
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: kind
nodes:
- role: control-plane
  kubeadmConfigPatches:
  - |
    kind: InitConfiguration
    nodeRegistration:
      kubeletExtraArgs:
        node-labels: "ingress-ready=true"
  extraPortMappings:
  - containerPort: 80
    hostPort: 8080
    protocol: TCP
  - containerPort: 443
    hostPort: 44300
    protocol: TCP
EOF

Créer les ressources :

# install the Nginx ingress
k apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml

# Installer les ressources
cat <<EOF | k apply -f -
kind: Pod
apiVersion: v1
metadata:
  name: test-app
  labels:
    app: test-app
spec:
  containers:
  - name: test-app
    image: hashicorp/http-echo:latest
    args:
    - "-text=The test has been successful!"
---
kind: Service
apiVersion: v1
metadata:
  name: test-service
spec:
  selector:
    app: test-app
  ports:
  - port: 5678
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress
spec:
  rules:
  - http:
      paths:
      - pathType: Prefix
        path: "/app"
        backend:
          service:
            name: test-service
            port:
              number: 5678
EOF

# forwarder le port
k port-forward service/test-service 5678:5678

Maintenant vous pouvez accéder au service exposé :

curl localhost:5678

Toute cette configuration est disponible sur ce repository, j’espère que vous aurez autant de plaisir que moi en utilisant ce magnifique outil !

Dernier