>_ DevTrendsit

Lingua

Home

Linguaggi

Sezioni

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicurezza
Go

Kubernetes locale in un minuto senza VM pesanti

Testare manifest Kubernetes o operator su un cluster cloud remoto è un approccio costoso e lento. Aspettare build, push al registry e deployment in un ambiente dev diventa frustrante rapidamente. Prima si usavano comunemente Minikube o K3s per test locali. Ma quando hai bisogno di eseguire test di integrazione rapidi in CI o avviare tutto su un laptop in pochi secondi, le macchine virtuali e i livelli di astrazione extra sono d'intralcio.

Gli ingegneri dei SIG di Kubernetes hanno incontrato questo problema nel 2018, quando dovevano testare Kubernetes stesso. Per questo scopo hanno scritto kind (Kubernetes IN Docker).

kind logo

Il tool si è rivelato così efficace che gli sviluppatori normali hanno iniziato ad usarlo attivamente per il lavoro quotidiano e per eseguire pipeline CI/CD.

Come funziona kind

L'idea è semplice. Invece di eseguire macchine virtuali complete per ogni nodo del cluster, kind avvia container Docker normali. All'interno di questi container gira systemd, il runtime dei container e i componenti Kubernetes.

kubeadm gestisce il deployment dei componenti, quindi l'ambiente è il più vicino possibile a un cluster di produzione reale.

kind create cluster

Il progetto è scritto in Go e funziona ovunque giri il runtime dei container. Oltre a Docker, sono supportati anche Podman e nerdctl, e può essere eseguito su Linux, macOS e Windows.

Installazione e avvio del primo cluster

Se hai già Go e Docker sul sistema, creare un cluster base richiede letteralmente una sola riga:

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

Se non vuoi installare Go, i binari sono facili da scaricare tramite i gestori di pacchetti standard.

Su macOS:

brew install kind

Su 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

Dopo di che, il comando kind create cluster creerà un cluster single-node. L'utility configurerà automaticamente il tuo kubectl, commutando il contesto sul nuovo cluster.

Verifichiamo che funzioni:

kubectl get nodes

Quando non hai più bisogno del cluster, eliminalo con il comando kind delete cluster.

Cluster multi-nodo e configurazione avanzata

Un cluster single-node va bene per test semplici, ma i problemi reali in Kubernetes emergono spesso lavorando con nodi multipli, taint e affinity. kind può creare cluster di qualsiasi complessità usando una configurazione dichiarativa.

Creo un file 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

Avvio la creazione del cluster con il file di configurazione:

kind create cluster --config kind-config.yaml

Come risultato, ottieni un cluster ad alta disponibilità con tre nodi control-plane e due nodi worker sulla tua macchina. E tutto questo gira dentro container normali senza carico extra sulla CPU.

Caricamento rapido di immagini locali

Una delle funzionalità più convenienti per gli sviluppatori è passare immagini Docker locali direttamente nel cluster senza registry privati.

Di solito la catena funziona così: build dell'immagine, push su Docker Hub o un Nexus locale, pull nel cluster. kind accorcia questo passaggio. Build dell'immagine localmente e caricala subito nei nodi:

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

Dopo di che, puoi tranquillamente specificare image: my-app:v1 e imagePullPolicy: Never nel manifest della tua applicazione. Il cluster vedrà l'immagine immediatamente.

A cosa serve in pratica

Il progetto ha già raccolto oltre 15.000 stelle su GitHub ed è diventato lo standard de facto per testare l'infrastruttura Kubernetes. Ecco i principali scenari dove fa risparmiare tempo:

  1. Test di integrazione in CI. Avviare kind dentro GitHub Actions o un runner GitLab CI richiede secondi. Puoi facilmente avviare un cluster fresco, eseguire test per una chart Helm o un operatore, ed eliminarlo subito dopo il completamento della pipeline.
  2. Sviluppo locale di controller e operator. Quando scrivi il tuo CRD o operatore in Go/Python, hai bisogno di feedback rapido. kind si avvia istantaneamente e si ripristina a uno stato pulito facilmente.
  3. Apprendimento ed esperimenti. Vuoi testare il comportamento di un Ingress controller, un plugin CNI, o vedere come si comporta un'applicazione quando uno dei nodi va giù? Impostare un playground del genere su un laptop locale richiede un paio di minuti.

Cosa tenere a mente

Prima di lanciare, tieni a mente un paio di sfumature. kind è stato creato principalmente per il testing, quindi non cercare di usarlo in produzione.

Nota che lavorare con porte locali richiede port forwarding esplicito nella configurazione del cluster (extraPortMappings). Se hai bisogno di raggiungere un servizio dentro kind dalla macchina host, dovrai specificare le porte richieste nel file di configurazione in anticipo.

Altrimenti, kind è un'ottima alternativa a macchine virtuali ingombranti. È veloce, prevedibile e leggero sulle risorse.

Progetti correlati