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
Podemos validar que efectivamente está utilizando docker
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!