>_ DevTrendses

Idioma

Inicio

Lenguajes

Secciones

Frontend Backend Móvil DevOps AI / ML GameDev Blockchain Embebidos Seguridad
Go

Kubernetes local en un minuto sin VMs pesadas

Probar manifests de Kubernetes u operadores en un cluster remoto en la nube es un enfoque costoso y lento. Esperar las compilaciones, los empujes al registro y el despliegue a un entorno de desarrollo se vuelve tedioso rápidamente. Antes, Minikube o K3s se usaban comúnmente para pruebas locales. Pero cuando necesitas ejecutar pruebas de integración rápidas en CI o iniciar en un portátil en segundos, las máquinas virtuales y las capas de abstracción extra simplemente estorban.

Ingenieros de los SIGs de Kubernetes se encontraron con este problema en 2018 cuando necesitaban probar Kubernetes en sí mismos. Para esto, escribieron kind (Kubernetes IN Docker).

kind logo

La herramienta resultó tan exitosa que los desarrolladores regulares comenzaron a usarla activamente para el trabajo diario y para ejecutar pipelines de CI/CD.

Cómo funciona kind

La idea es simple. En lugar de ejecutar máquinas virtuales completas para cada nodo del cluster, kind crea contenedores Docker regulares. Dentro de tal contenedor se ejecutan systemd, el runtime de contenedores y los componentes de Kubernetes.

kubeadm maneja el despliegue de componentes, por lo que el entorno es lo más cercano posible a un cluster de producción real.

kind create cluster

El proyecto está escrito en Go y funciona en todas partes donde se ejecuta el runtime de contenedores. Además de Docker, se admiten Podman y nerdctl, y puede ejecutarse en Linux, macOS y Windows.

Instalación y ejecución de tu primer cluster

Si ya tienes Go y Docker en tu sistema, crear un cluster básico lleva literalmente una línea:

go install sigs.k8s.io/[email protected] && kind create cluster

Si no quieres instalar Go, los binarios son fáciles de descargar a través de gestores de paquetes estándar.

En macOS:

brew install kind

En Linux:

curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.32.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind

Después de eso, el comando kind create cluster creará un cluster de un solo nodo. La utilidad configurará automáticamente tu kubectl, cambiando el contexto al nuevo cluster.

Verifiquemos que funciona:

kubectl get nodes

Cuando ya no necesites el cluster, elimínalo con el comando kind delete cluster.

Clusters de múltiples nodos y configuración avanzada

Un cluster de un solo nodo está bien para pruebas simples, pero los problemas reales en Kubernetes a menudo aparecen al trabajar con múltiples nodos, taints y afinidad. kind puede crear clusters de cualquier complejidad usando una configuración declarativa.

Crea un archivo kind-config.yaml:

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
role: control-plane
role: control-plane
role: control-plane
role: worker
role: worker

Ejecuta la creación del cluster con el archivo de configuración:

kind create cluster --config kind-config.yaml

Como resultado, obtendrás un cluster de alta disponibilidad con tres nodos de plano de control y dos nodos worker en tu máquina. Y todo esto se inicia dentro de contenedores regulares sin carga adicional en tus CPUs.

Carga rápida de imágenes locales

Una de las características más convenientes para los desarrolladores es pasar imágenes Docker locales directamente al cluster sin registros privados.

Por lo general, la cadena se ve así: compilar una imagen, empujar a Docker Hub o un Nexus local, extraer al cluster. kind acorta este paso. Compilas una imagen localmente y la cargas inmediatamente en los nodos:

docker build -t my-app:v1 .
kind load docker-image my-app:v1

Después de eso, puedes especificar de forma segura image: my-app:v1 y imagePullPolicy: Never en tu manifiesto de aplicación. El cluster verá la imagen de inmediato.

Para qué es útil en la práctica

El proyecto ya ha recopilado más de 15,000 estrellas en GitHub y se ha convertido en el estándar de facto para probar infraestructura de Kubernetes. Aquí están los principales escenarios donde ahorra tiempo:

  1. Pruebas de integración en CI. Crear kind dentro de GitHub Actions o un runner de GitLab CI toma segundos. Puedes crear fácilmente un cluster nuevo, ejecutar pruebas para un chart de Helm u operador, y eliminarlo justo después de que el pipeline termine.
  2. Desarrollo local de controladores y operadores. Cuando estás escribiendo tu propio CRD u operador en Go/Python, necesitas retroalimentación rápida. kind se inicia al instante y vuelve a un estado limpio fácilmente.
  3. Aprendizaje y experimentos. ¿Quieres probar el comportamiento del Ingress controller, un plugin CNI, o ver cómo se comporta una aplicación cuando uno de los nodos se cae? Configurar tal playground en un portátil local toma un par de minutos.

En qué fijarse

Antes de lanzar, ten en cuenta un par de matices. kind fue creado principalmente para pruebas, así que no intentes usarlo en producción.

Ten en cuenta que trabajar con puertos locales requiere reenvío de puertos explícito en la configuración del cluster (extraPortMappings). Si necesitas acceder a un servicio dentro de kind desde la máquina host, tendrás que especificar los puertos requeridos en el archivo de configuración de antemano.

De lo contrario, kind es un excelente reemplazo para las voluminosas máquinas virtuales. Es rápido, predecible y amigable con los recursos.

Proyectos relacionados