> ## Content Index
> Fetch the complete content index at: https://www.sfeir.dev/llms.txt
> Use this file to discover other available public pages before exploring further.

# Un cluster Kubernetes local en quelques secondes avec Kind !
- URL: https://www.sfeir.dev/cloud/un-cluster-kubernetes-local-en-quelques-secondes-avec-kind/
- Published: 2024-01-26T09:05:29.000Z
- Updated: 2024-01-30T08:00:59.000Z
- Description: Kind, l'outil idéal pour gérer Kubernetes localement avec simplicité et rapidité. Découvrez comment l'installer et le configurer !
- Author: Jérôme Devoucoux
- Tags: Cloud, Containers, Kubernetes, CKAD

En tant que Cloud Engineer, je cherchais un outil pour étudier Kubernetes localement. Il en existe déjà quelques uns, mais [Kind](https://kind.sigs.k8s.io/?ref=sfeir.dev) (**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 :

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

```

Ensuite vous pouvez créer un cluster :

```bash
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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j670qp358eqxe68qbuua.png)

### Quelques configurations pour Kind

Kind offre la possibilité de faire de la [configuration](https://kind.sigs.k8s.io/docs/user/configuration/?ref=sfeir.dev) sur les clusters que vous créez.

Il fonctionne en se basant sur [KubeADM](https://github.com/kubernetes/kubeadm?ref=sfeir.dev), vous pouvez donc faire de la [configuration spécifique](https://kind.sigs.k8s.io/docs/user/configuration/?ref=sfeir.dev#kubeadm-config-patches) en rapport.

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

#### Exposition de Nginx, avec un service NodePort

Créer le cluster :

```bash
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 :

```bash
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é :

```bash
curl localhost:30000

```

#### Un cluster avec un master et un worker

Créer le cluster :

```bash
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 :

```bash
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 :

```bash
# 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é :

```bash
curl localhost:5678

```

Toute cette configuration est disponible sur [ce repository](https://github.com/jdxlabs/k8s-local-kind/?ref=sfeir.dev), j’espère que vous aurez autant de plaisir que moi en utilisant ce magnifique outil !