Esecuzione di un cluster Kubernetes in Docker con K3d

0
136

K3d è un wrapper open source attorno alla distribuzione Kubernetes di Rancher/SUSE K3s che ti consente di eseguire il piano di controllo all'interno di Docker. L'intero stack viene eseguito in Docker, offrendoti un cluster completamente containerizzato, leggero e facile da configurare.

Mentre K3s è progettato per un'ampia gamma di flussi di lavoro, K3d si concentra più specificamente sulle situazioni di sviluppo dove stai già utilizzando Docker. Ti consente di creare un cluster Kubernetes sul tuo host Docker esistente senza eseguire una macchina virtuale o altri servizi di sistema.

Questo articolo ti mostrerà come iniziare a funzionare con un semplice cluster K3d. Prima di iniziare, avrai bisogno sia di Kubectl che di Docker v20.10.5 o versione successiva già installati sul tuo sistema. K3d funziona su Linux, Mac (incluso tramite Homebrew) e Windows (tramite Chocolatey). Questa guida si concentra sull'uso con Linux; Le istruzioni di installazione della CLI di k3d per altre piattaforme sono disponibili nella documentazione.

Installazione della CLI di K3d

La CLI di k3d fornisce i comandi di gestione per la creazione e gestire i tuoi cluster. Puoi trovare l'ultima CLI su GitHub o eseguire lo script di installazione per ottenere automaticamente il download corretto per il tuo sistema.

$ curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install .sh | bash

Lo script deposita il binario k3d nella tua directory /usr/local/bin. Prova a eseguire il comando k3d version per verificare che l'installazione sia riuscita:

$ k3d version k3d version v5.4.6 k3s version v1.24.4-k3s1 (default)

Creazione di un cluster

La CLI di K3d fornisce un comando di creazione del cluster per creare e avviare automaticamente un nuovo cluster:

$ k3d cluster create INFO[0000] Preparazione: Network INFO[0000] Creata rete 'k3d-k3s-default' INFO[0000] Creato volume immagine k3d-k3s-default-images INFO[0000] Avvio nuovo nodo strumenti… INFO [0001] Creazione del nodo 'k3d-k3s-default-server-0' INFO[0001] Estrazione dell'immagine 'ghcr.io/k3d-io/k3d-tools:5.4.6' INFO[0002] Estrazione dell'immagine 'docker.io/rancher/k3s:v1.24.4-k3s1' INFO[0002] Avvio del nodo 'k3d-k3s-default-tools' INFO[0008] Creazione di LoadBalancer 'k3d-k3s-default-serverlb' INFO[0009] Pulling immagine 'ghcr.io /k3d-io/k3d-proxy:5.4.6' INFO[0012] Utilizzo del nodo k3d-tools per raccogliere informazioni sull'ambiente INFO[0012] HostIP: utilizzo del gateway di rete 172.25.0.1 address INFO[0012] Avvio del cluster 'k3s-default ' INFO[0012] Avvio dei server… INFO[0012] Avvio del nodo 'k3d-k3s-default-server-0' INFO[0016] Tutti gli agenti sono già in esecuzione. INFO[0016] Avvio degli helper… INFO[0016] Avvio del nodo 'k3d-k3s-default-serverlb' INFO[0022] Inserimento di record per hostAliases (incl. host.k3d.internal) e per 2 membri di rete in CoreDNS configmap. .. INFO[0025] Cluster 'k3s-default' creato con successo! INFO[0025] Ora puoi usarlo in questo modo: kubectl cluster-info

Il cluster verrà denominato k3s-default quando esegui il comando senza argomenti. Imposta il tuo nome includendolo come primo argomento del comando:

$ k3d cluster create demo …

K3d modifica automaticamente il tuo file di configurazione Kubernetes (.kube/config) per includere una connessione a il tuo nuovo cluster Contrassegna la connessione come predefinita, quindi i comandi kubectl ora prenderanno di mira il tuo ambiente K3d.

$ kubectl cluster-info Il piano di controllo Kubernetes è in esecuzione su https://0.0.0.0:42879 CoreDNS è in esecuzione su https://0.0.0.0:42879/api/v1/namespaces/kube-system/services/kube-dns: dns/proxy Metrics-server è in esecuzione su https://0.0.0.0:42879/api/v1/namespaces/kube-system/services/https:metrics-server:https/proxy

Docker ps in esecuzione mostrerà due contenitori sono stati avviati, uno per K3 e un altro per il proxy K3d che inoltra il traffico nel tuo cluster:

$ docker ps CONTAINER ID IMMAGINE COMANDO CREATO STATO PORTE NOMI 9b6b610ad312 ghcr.io/k3d-io/k3d-proxy:5.4.6 “/bin/sh -c nginx-pr…” 3 minuti fa Fino a 3 minuti 80/tcp , 0.0.0.0:42879->6443/tcp k3d-k3s-default-serverlb 842cc90b78bf rancher/k3s:v1.24.4-k3s1 “/bin/k3s server –t…” 3 minuti fa Fino a 3 minuti k3d- k3s-default-server-0

Utilizzo del tuo cluster

Utilizza i comandi Kubectl familiari per interagire con il tuo cluster e distribuire i tuoi pod:

$ kubectl run nginx –image nginx:latest pod/nginx creato $ kubectl expo pod/nginx –port 80 –type servizio NodePort/nginx esposto

Per accedere al tuo server NGINX, trova prima l'indirizzo IP assegnato al tuo nodo Kubernetes:

$ kubectl get nodes -o wide NOME STATO RUOLI ETÀ VERSIONE IP INTERNO IP ESTERNO OS-IMAGE KERNEL-VERSIONE CONTAINER-RUNTIME k3d- k3s-default-server-0 Ready control-plane, master 102s v1.24.4+k3s1 172.27.0.2 <none> K3s dev 5.4.0-125-generic containerd://1.6.6-k3s1

L'IP corretto da utilizzare è 172.27.0.2.

Quindi trova la NodePort assegnata al tuo servizio nginx:

$ kubectl get services NOME TIPO CLUSTER-IP IP ESTERNO PORTE ETÀ kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 5m49s nginx NodePort 10.43.235.233 <none> 80:31214/TCP 1s

Il numero di porta esposto è 31214. Effettuando una richiesta a 172.17.0.2:31214 dovrebbe essere visualizzata la pagina di benvenuto predefinita di NGINX:

$ curl http://172.17.0.2:31214 < !DOCTYPE html> <html> <testa> <title>Benvenuto in nginx!</title> …

Puoi ottenere ulteriori indicazioni sull'esposizione dei servizi e sulla configurazione della rete Ingress nella documentazione di K3d.

Abilitazione dei flag K3s

Il comando cluster create esegue il wrapping del processo di creazione del cluster K3s standard. Puoi passare argomenti a K3 fornendo i flag –k3s-arg. Il valore del flag dovrebbe essere un argomento che verrà incluso quando K3d chiama il binario K3s.

$ k3s cluster create –k3s-arg “–disable=traefik”

Questo esempio indica a K3s di disabilitarne componente Traefik integrato.

Accesso ai servizi in esecuzione sul tuo host

Alcuni carichi di lavoro eseguiti in K3d potrebbero richiedere l'accesso a servizi già in esecuzione sul tuo host Docker. K3d fornisce un nome host chiamato host.k3d.internal all'interno della sua configurazione DNS predefinita. Questo si risolverà automaticamente sul tuo computer host. Puoi fare riferimento a questo nome host speciale all'interno dei tuoi Pod per accedere a database esistenti, condivisioni file e altre API in esecuzione al di fuori di Kubernetes.

Utilizzo di immagini Docker locali

Il tuo cluster K3d/K3s non può accedere alle tue immagini Docker locali. Il cluster e tutti i suoi componenti sono in esecuzione all'interno di Docker. Il tentativo di utilizzare un'immagine privata che esiste solo sull'host fallirà e segnalerà un errore.

Esistono due modi per risolvere questo problema: eseguire il push dell'immagine in un registro o utilizzare la funzione di importazione dell'immagine di K3d per copiare un'immagine locale nel cluster. Il primo metodo è generalmente preferito in quanto centralizza l'archiviazione delle immagini e consente di accedere alle immagini da qualsiasi ambiente. Tuttavia, durante il test rapido delle modifiche locali potresti voler importare direttamente un'immagine che hai appena creato:

$ k3d image import demo-image:latest

Questo comando renderà demo-image:latest disponibile all'interno il tuo cluster.

K3d può anche creare ed esporre un registro immagini per te. È meglio creare registri insieme al tuo cluster poiché K3d può quindi configurare automaticamente l'accesso del cluster:

$ k3d cluster create –registry-create demo-registry

Questo avvia un nuovo cluster con un registro chiamato demo-registry. Il registro verrà eseguito nel proprio contenitore Docker. Puoi scoprire il numero di porta su cui è esposto il registro eseguendo docker ps -f name=<cluster-name>-registry, dove <cluster-name> è il nome del tuo cluster. Il push delle immagini in questo registro le renderà accessibili ai Pod nel tuo cluster.

$ docker tag demo-image:latest k3d-demo-registry.localhost:12345/demo-image:latest $ docker push k3d-demo-registry .localhost:12345/demo-image:latest

Puoi anche creare registri su richiesta, ma dovrai riconfigurare manualmente il tuo cluster per fornire i dettagli della connessione.

Arresto del tuo cluster

Il tuo cluster K3d funzionerà continuamente finché non lo fermerai tu stesso. Il comando cluster stop interrompe l'esecuzione dei container Docker preservando i dati del tuo cluster:

$ k3d cluster stop k3s-default

Riavvia il tuo cluster in futuro utilizzando il comando cluster start:

$ k3d cluster start k3s-default

Eliminazione del cluster

Puoi eliminare un cluster in qualsiasi momento eseguendo il comando cluster delete e fornendo il suo nome. Ciò rimuoverà tutta la traccia del cluster, eliminando i contenitori Docker e i volumi che lo hanno fornito. L'eliminazione di tutti i tuoi cluster riporterà il tuo host a una situazione di stallo con solo la CLI K3d installata.

$ k3d cluster delete k3s-default INFO[0000] Eliminazione cluster 'k3s-default' INFO[0001] Eliminazione rete cluster 'k3d-k3s-default' INFO[0001] Eliminazione 2 volumi collegati… INFO[0001] Eliminazione dettagli cluster from default kubeconfig… INFO[0001] Rimozione del file kubeconfig standalone (se presente)… INFO[0001] Cluster k3s-default eliminato con successo!

Il processo di eliminazione rimuove automaticamente i riferimenti al cluster dal tuo Kubeconfig.

Riepilogo

K3d ti consente di eseguire un cluster Kubernetes containerizzato. Fornisce un ambiente K3 completo ovunque sia disponibile Docker. K3d supporta più nodi, ha il supporto integrato per i registri delle immagini e può essere utilizzato per creare cluster a disponibilità elevata con più piani di controllo.

Gli sviluppatori che già eseguono Docker possono utilizzare K3d per aggiungere rapidamente Kubernetes al proprio ambiente di lavoro. K3d è leggero, facile da gestire e non aggiunge altri servizi di sistema alla tua macchina. Ciò lo rende un'ottima scelta per l'uso locale, ma la sua dipendenza da Docker significa che potrebbe non essere adatto per host di produzione in cui non si desidera aggiungere un'altra dipendenza. Altre distribuzioni Kubernetes come Minikube, Microk8s e plain K3s sono tutte alternative praticabili.

LEGGI SUCCESSIVO

  • › 7 modi per aprire Windows Terminal su Windows 11
  • › Ora anche Walmart vuole vederti mezzo nudo
  • › Le app Android su Windows 11 stanno diventando più fluide
  • › Come aggiungere più fermate in Apple Maps
  • › Come utilizzare i sottotitoli in tempo reale su un iPhone
  • › Come disattivare i bordi nella fotocamera dell'iPhone