Köra ett Kubernetes-kluster i Docker med K3d

0
112

K3d är ett omslag med öppen källkod runt Rancher/SUSE K3s Kubernetes-distribution som låter dig köra kontrollplanet inuti Docker. Hela stacken körs i Docker, vilket ger dig ett helt containerbaserat kluster som är lätt och lätt att installera.

Medan K3s är designad för ett brett utbud av arbetsflöden, fokuserar K3d mer specifikt på utvecklingssituationer där du redan använder Docker. Den låter dig snurra upp ett Kubernetes-kluster på din befintliga Docker-värd utan att köra en virtuell maskin eller andra systemtjänster.

Den här artikeln kommer att visa dig hur du kommer igång med ett enkelt K3d-kluster. Du behöver både Kubectl och Docker v20.10.5 eller nyare redan installerade på ditt system innan du börjar. K3d fungerar på Linux, Mac (inklusive via Homebrew) och Windows (via Chocolatey). Den här guiden fokuserar på användning med Linux; Installationsinstruktioner för k3d CLI för andra plattformar finns i dokumentationen.

Installera K3d CLI

k3d CLI tillhandahåller hanteringskommandon för att skapa och hantera dina kluster. Du kan hitta den senaste CLI på GitHub eller köra installationsskriptet för att automatiskt få rätt nedladdning för ditt system.

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

Skriptet sätter in k3d-binären i din /usr/local/bin-katalog. Prova att köra kommandot k3d version för att kontrollera att installationen lyckades:

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

Skapa ett kluster

K3d CLI tillhandahåller ett kommando för att skapa ett kluster för att automatiskt skapa och starta ett nytt kluster:

$ k3d-kluster skapa INFO[0000] Prep: Network INFO[0000] Skapat nätverk 'k3d-k3s-default' INFO[0000] Skapat bildvolym k3d-k3s-default-images INFO[0000] Startar nya verktygsnod… INFO [0001] Skapar nod 'k3d-k3s-default-server-0' INFO[0001] Dra bild 'ghcr.io/k3d-io/k3d-tools:5.4.6' INFO[0002] Dra bild 'docker.io/rancher/k3s:v1.24.4-k3s1' INFO[0002] Startnod 'k3d-k3s-default-tools' INFO[0008] Skapar LoadBalancer 'k3d-k3s-default-serverlb' INFO[0009] Dra.io bild 'ghcr] /k3d-io/k3d-proxy:5.4.6' INFO[0012] Använda k3d-tools-noden för att samla in miljöinformation INFO[0012] HostIP: använder nätverksgateway 172.25.0.1 adress INFO[0012] Startar kluster 'k3s-default ' INFO[0012] Startar servrar… INFO[0012] Startar nod 'k3d-k3s-default-server-0' INFO[0016] Alla agenter körs redan. INFO[0016] Startar hjälpare… INFO[0016] Startnod 'k3d-k3s-default-serverlb' INFO[0022] Injicerar poster för hostAliases (inkl. host.k3d.internal) och för 2 nätverksmedlemmar i CoreDNS configmap. .. INFO[0025] Klustret 'k3s-default' skapades framgångsrikt! INFO[0025] Du kan nu använda det så här: kubectl cluster-info

Klustret kommer att heta k3s-default när du kör kommandot utan några argument. Ställ in ditt eget namn genom att inkludera det som kommandots första argument:

$ k3d-kluster skapa demo …

K3d ändrar automatiskt din Kubernetes-konfigurationsfil (.kube/config) för att inkludera en anslutning till ditt nya kluster. Den markerar anslutningen som standard så kubectl-kommandon kommer nu att rikta in sig på din K3d-miljö.

$ kubectl cluster-info Kubernetes kontrollplan körs på https://0.0.0.0:42879 CoreDNS körs på https://0.0.0.0:42879/api/v1/namespaces/kube-system/services/kube-dns: dns/proxy Metrics-server körs på https://0.0.0.0:42879/api/v1/namespaces/kube-system/services/https:metrics-server:https/proxy

Kör docker ps kommer att visa två behållare har startats, en för K3s och en annan för K3d’s proxy som vidarebefordrar trafik till ditt kluster:

$ docker ps CONTAINER ID BILDKOMMANDO SKAPADE STATUSPORTNAMN 9b6b610ad312 ghcr.io/k3d-io/k3d-proxy:5.4.6 “/bin/sh -c nginx-pr…” 3 minuter sedan Upp 3 minuter 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 minuter sedan Upp 3 minuter k3d- k3s-default-server-0

Använda ditt kluster

Använd välbekanta Kubectl-kommandon för att interagera med ditt kluster och distribuera dina Pods:

$ kubectl run nginx –image nginx:senaste pod/nginx skapad $ kubectl expose pod/nginx –port 80 –typ NodePort-tjänst/nginx exponerad

För att komma åt din NGINX-server, hitta först IP-adressen som tilldelats din Kubernetes-nod:

$ kubectl get nodes -o wide NAMN STATUS ROLLER ÅLDER VERSION INTERN-IP EXTERN-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME k3d- k3s-default-server-0 Redo kontrollplan, master 102s v1.24.4+k3s1 172.27.0.2 <ingen> K3s dev 5.4.0-125-generic containerd://1.6.6-k3s1

Rätt IP att använda är 172.27.0.2.

Hitta sedan nodeporten som tilldelats din nginx-tjänst:

p>$ kubectl få tjänster NAMN TYP CLUSTER-IP EXTERN-IP-PORT(AR) ÅLDER kubernetes ClusterIP 10.43.0.1 <ingen> 443/TCP 5m49s nginx NodePort 10.43.235.233 <ingen> 80:31214/TCP 1s

Det exponerade portnumret är 31214. Om du gör en begäran till 172.17.0.2:31214 bör standard NGINX-välkomstsidan utfärdas:

$ curl http://172.17.0.2:31214 < !DOCTYPE html> <html> <huvud> <title>Välkommen till nginx!</title> …

Du kan få mer vägledning om att exponera tjänster och ställa in Ingress-nätverk i K3d-dokumentationen.

Aktivera K3s-flaggor

Kommandot Cluster create omsluter standardprocessen för att skapa K3s-kluster. Du kan skicka argument till K3s genom att tillhandahålla –k3s-arg flaggor. Värdet på flaggan bör vara ett argument som kommer att inkluderas när K3d anropar K3s binär.

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

Det här exemplet instruerar K3s att inaktivera dess inbyggd Traefik-komponent.

Åtkomst till tjänster som körs på din värd

Vissa arbetsbelastningar du kör i K3d kan behöva komma åt tjänster som redan körs på din Docker-värd. K3d tillhandahåller ett värdnamn som heter host.k3d.internal inom dess standard DNS-konfiguration. Detta kommer automatiskt att lösas till din värddator. Du kan referera till detta speciella värdnamn i dina Pods för att komma åt befintliga databaser, filresurser och andra API:er som körs utanför Kubernetes.

Använda lokala Docker-bilder

Ditt K3d/K3s-kluster kan inte komma åt dina lokala Docker-bilder. Klustret och alla dess komponenter körs inuti Docker. Att försöka använda en privat bild som bara finns på värden kommer att misslyckas och rapportera ett fel.

Det finns två sätt att lösa detta: antingen skicka din bild till ett register eller använd K3d’s bildimportfunktion för att kopiera en lokal bild till ditt kluster. Den första metoden är i allmänhet att föredra eftersom den centraliserar din bildlagring och låter dig komma åt bilder från vilken miljö som helst. Men när du snabbt testar lokala ändringar kanske du vill direktimportera en bild som du just har byggt:

$ k3d image import demo-image:latest

Det här kommandot gör demo-image:latest tillgängligt inuti ditt kluster.

K3d kan också skapa och exponera ett bildregister åt dig. Register skapas bäst tillsammans med ditt kluster eftersom K3d sedan automatiskt kan konfigurera klustrets åtkomst:

$ k3d kluster skapa –registry-create demo-register

Detta startar ett nytt kluster med ett register som kallas demo-register. Registret kommer att köras i sin egen Docker-behållare. Du kan upptäcka portnumret som registret är exponerat för genom att köra docker ps -f name=<klusternamn>-registret, där <klusternamn> är namnet på ditt kluster. Genom att skicka bilder till det här registret blir de tillgängliga för Pods i ditt kluster.

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

Du kan också skapa register på begäran, men du måste manuellt konfigurera om ditt kluster för att tillhandahålla anslutningsinformation.

Stoppa ditt kluster

Ditt K3d-kluster kommer att köras kontinuerligt tills du stoppar det själv. Klusterstoppkommandot slutar köra Docker-behållare samtidigt som ditt klusterdata bevaras:

$ k3d cluster stop k3s-default

Starta om ditt kluster i framtiden med kommandot klusterstart:

$ k3d kluster start k3s-default

Ta bort ditt kluster

Du kan ta bort ett kluster när som helst genom att köra kommandot kluster delete och ange dess namn. Detta tar bort alla spår av klustret, tar bort Docker-behållare och volymer som gav det. Om du tar bort alla dina kluster tar din värd tillbaka till ett rent blad med endast K3d CLI installerat.

$ k3d kluster radera k3s-default INFO[0000] Tar bort kluster 'k3s-default' INFO[0001] Tar bort klusternätverket 'k3d-k3s-default' INFO[0001] Tar bort 2 bifogade volymer… INFO[0001] Ta bort klusterdetaljer från standard kubeconfig… INFO[0001] Tar bort fristående kubeconfig-fil (om det finns en sådan)… INFO[0001] Raderade kluster k3s-default!

Raderingsprocessen tar automatiskt bort referenser till klustret från din Kubeconfig.

Sammanfattning

K3d låter dig köra ett containeriserat Kubernetes-kluster. Det ger en komplett K3s-miljö varhelst Docker är tillgänglig. K3d stöder flera noder, har integrerat stöd för bildregister och kan användas för att skapa högt tillgängliga kluster med flera kontrollplan.

Utvecklare som redan kör Docker kan använda K3d för att snabbt lägga till Kubernetes i sin arbetsmiljö. K3d är lätt, lätt att hantera och lägger inga andra systemtjänster till din maskin. Detta gör det till ett utmärkt val för lokal användning, men dess beroende av Docker betyder att den kanske inte är lämplig för produktionsvärdar där du inte vill lägga till ett annat beroende. Andra Kubernetes-distributioner som Minikube, Microk8s och vanliga K3s är alla genomförbara alternativ.

LÄS NÄSTA

  • › 7 sätt att öppna Windows Terminal i Windows 11
  • › Nu vill till och med Walmart se dig halvnaken
  • › Android-appar på Windows 11 blir smidigare
  • › Så här lägger du till flera stopp i Apple Maps
  • › Så här använder du direkttextning på en iPhone
  • › Hur man stänger av gränser i iPhone-kameran