# K8S local con Kind

## Qué es Kind?

Como siempre nos vamos a la [fuente](https://kind.sigs.k8s.io/)

"kind is a tool for running local Kubernetes clusters using Docker container “nodes”.
kind was primarily designed for testing Kubernetes itself, but may be used for local development or CI."

Entonces lo que vamos a hacer es instalar un cluster de kubernetes que usa docker containers como nodos. Lo vamos a usar para poder hacer pruebas y cositas locales!

## Instalación

> Antes que nada supongo que ya tenemos instalado docker en nuestra PC

Ahora si, para instalarlo, en linux por supuesto, vamos a ejecutar los siguientes comandos deacuerdo a la guía de la web de Kind

```
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.14.0/kind-linux-amd64
chmod +x ./kind
mv ./kind ~/.local/bin/kind
``` 
En realidad, podemos moverlo a cualquier otro directorio de nuestro PATH


Esto es todo ya podemos comenzar a utilizarlo.

## Nuestro primer cluster

Ahora simplemente ejecutamos lo siguiente para crear nuestro cluster local


```
kind create cluster
``` 

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1654204351988/2O30XujMT.png align="left")

Podemos validar que efectivamente está utilizando docker


![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1654204424428/8nZSkTLMQ.png align="left")


### Eliminamos nuestro cluster

Todo tiene un final, todo termina... Cuando terminamos nuestras pruebas, simplemente ejecutamos lo siguiente para eliminar nuestro cluster local de pruebas.


```
kind delete cluster
``` 

## El postre! MetalLB

Quizas aún no lo sepamos pero en el momento que deseamos interactuar con los servicios que despleguemos en el cluster, una de las maneras es desplegar el servicio con un tipo llamado LoadBalancer. 
Cuando hacemos esto en un proveedor cloud, el cloud controller manager que vimos en artículos anteriores va y crea un load balancer del proveedor y se terminó, pero en nuestro cluster local podemos usar [MetalLB](https://metallb.universe.tf/)

MetalLB es un load balancer para kubernetes instalados en los "fierros" como se dice en la jerga, y nos viene de 10 para implementarlo en nuestro cluster de KIND

### Instalando MetalLB

Vamos a instalarlo aplicando algunos manifiestos de kubernetes usando kubectl. Y qué es kubectl? Te dejo un post donde lo contamos y lo instalamos [kubectl](https://blog.deceroait.com/kubectl)


1- Creamos el namespace para metallb
```
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/namespace.yaml
```

2- Instalamos
```
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/metallb.yaml
```

3- Revisamos hasta que todo quede corriendo correctamente
```
kubectl get pods -n metallb-system --watch
```

4- Paso importante validar en nuestra PC la red de docker
```
docker network inspect -f '{{.IPAM.Config}}' kind
```
En mi caso la salida es:
[{172.18.0.0/16  172.18.0.1 map[]} {fc00:f853:ccd:e793::/64  fc00:f853:ccd:e793::1 map[]}]


5- Creamos el siguiente ConfigMap para metallb, con un rango de IP de la red anterior
```
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 172.18.255.200-172.18.255.250
``` 

6- Aplicamos el ConfigMap

```
kubectl apply -f archivo_anterior.yaml
```

A partir de ahora cada vez que creemos un servicio tipo load balancer, utilizará una IP del rango asignado y la vamos a poder acceder desde nuestra PC ya que es la red que usa docker 



Esto es todo! ya podemos jugar con K8S en nuestra PC!






