K8S local con Kind

K8S local con Kind

Vamos a aprender a instalar un cluster local de kubernetes para poder "jugar" en nuestra PC

Qué es Kind?

Como siempre nos vamos a la fuente

"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

Podemos validar que efectivamente está utilizando docker

image.png

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

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

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!