Drejtimi i një grupi Kubernetes në Docker me K3d
K3d është një mbështjellës me burim të hapur rreth shpërndarjes Rancher/SUSE K3s Kubernetes që ju lejon të ekzekutoni planin e kontrollit brenda Docker. E gjithë grumbulli funksionon në Docker, duke ju dhënë një grup plotësisht të kontejneruar që është i lehtë dhe i lehtë për t'u konfiguruar.
Ndërsa K3s është projektuar për një gamë të gjerë fluksesh pune, K3d fokusohet më konkretisht në situatat e zhvillimit ku tashmë po përdorni Docker. Kjo ju lejon të rrotulloni një grup Kubernetes në hostin tuaj ekzistues Docker pa ekzekutuar një makinë virtuale ose ndonjë shërbim tjetër të sistemit.
Ky artikull do t'ju tregojë se si të filloni dhe të funksiononi me një grup të thjeshtë K3d. Ju do të keni nevojë për Kubectl dhe Docker v20.10.5 ose më të reja të instaluara tashmë në sistemin tuaj përpara se të filloni. K3d punon në Linux, Mac (përfshirë përmes Homebrew) dhe Windows (nëpërmjet Chocolatey). Ky udhëzues fokusohet në përdorimin me Linux; k3d
Udhëzimet e instalimit të CLI për platforma të tjera janë të disponueshme në dokumentacion.
Instalimi i K3d CLI
CLI k3d
ofron komanda menaxhimi për krijimin dhe menaxhimin e grupimeve tuaja. Mund të gjeni CLI-në më të fundit në GitHub ose të ekzekutoni skriptin e instalimit për të marrë automatikisht shkarkimin e duhur për sistemin tuaj.
$ curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash
Skripti depoziton binarin k3d
në drejtorinë tuaj /usr/local/bin
. Provoni të ekzekutoni komandën k3d version
për të kontrolluar nëse instalimi juaj ka pasur sukses:
$ k3d version
k3d version v5.4.6
k3s version v1.24.4-k3s1 (default)
Krijimi i një grupi
K3d CLI ofron një komandë cluster create
për të krijuar dhe nisur automatikisht një grup të ri:
$ k3d cluster create
INFO[0000] Prep: Network
INFO[0000] Created network 'k3d-k3s-default'
INFO[0000] Created image volume k3d-k3s-default-images
INFO[0000] Starting new tools node...
INFO[0001] Creating node 'k3d-k3s-default-server-0'
INFO[0001] Pulling image 'ghcr.io/k3d-io/k3d-tools:5.4.6'
INFO[0002] Pulling image 'docker.io/rancher/k3s:v1.24.4-k3s1'
INFO[0002] Starting Node 'k3d-k3s-default-tools'
INFO[0008] Creating LoadBalancer 'k3d-k3s-default-serverlb'
INFO[0009] Pulling image 'ghcr.io/k3d-io/k3d-proxy:5.4.6'
INFO[0012] Using the k3d-tools node to gather environment information
INFO[0012] HostIP: using network gateway 172.25.0.1 address
INFO[0012] Starting cluster 'k3s-default'
INFO[0012] Starting servers...
INFO[0012] Starting Node 'k3d-k3s-default-server-0'
INFO[0016] All agents already running.
INFO[0016] Starting helpers...
INFO[0016] Starting Node 'k3d-k3s-default-serverlb'
INFO[0022] Injecting records for hostAliases (incl. host.k3d.internal) and for 2 network members into CoreDNS configmap...
INFO[0025] Cluster 'k3s-default' created successfully!
INFO[0025] You can now use it like this:
kubectl cluster-info
Grupi do të quhet k3s-default
kur të ekzekutoni komandën pa asnjë argument. Vendosni emrin tuaj duke e përfshirë atë si argumentin e parë të komandës:
$ k3d cluster create demo
...
K3d modifikon automatikisht skedarin tuaj të konfigurimit Kubernetes (.kube/config
) për të përfshirë një lidhje me grupin tuaj të ri. Ai shënon lidhjen si të paracaktuar, kështu që komandat kubectl
tani do të synojnë mjedisin tuaj K3d.
$ kubectl cluster-info
Kubernetes control plane is running at https://0.0.0.0:42879
CoreDNS is running at https://0.0.0.0:42879/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Metrics-server is running at https://0.0.0.0:42879/api/v1/namespaces/kube-system/services/https:metrics-server:https/proxy
Ekzekutimi i docker ps
do të tregojë se dy kontejnerë janë nisur, një për K3 dhe një tjetër për përfaqësuesin e K3d që përcjell trafikun në grupin tuaj:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9b6b610ad312 ghcr.io/k3d-io/k3d-proxy:5.4.6 "/bin/sh -c nginx-pr..." 3 minutes ago Up 3 minutes 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 minutes ago Up 3 minutes k3d-k3s-default-server-0
Përdorimi i grupit tuaj
Përdorni komandat e njohura të Kubectl për të bashkëvepruar me grupin tuaj dhe për të vendosur Pods tuaj:
$ kubectl run nginx --image nginx:latest
pod/nginx created
$ kubectl expose pod/nginx --port 80 --type NodePort
service/nginx exposed
Për të hyrë në serverin tuaj NGINX, së pari gjeni adresën IP të caktuar në nyjen tuaj Kubernetes:
$ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION 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
IP e saktë për t'u përdorur është 172.27.0.2
.
Më pas gjeni NodePort-in e caktuar për shërbimin tuaj nginx
:
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 5m49s
nginx NodePort 10.43.235.233 <none> 80:31214/TCP 1s
Numri i portit të ekspozuar është 31214
. Bërja e një kërkese për 172.17.0.2:31214
duhet të lëshojë faqen e paracaktuar të mirëseardhjes NGINX:
$ curl http://172.17.0.2:31214
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...
Mund të merrni më shumë udhëzime për ekspozimin e shërbimeve dhe konfigurimin e rrjetit Ingress brenda dokumentacionit K3d.
Aktivizimi i flamujve të K3s
Komanda cluster create
mbështjell procesin standard të krijimit të grupimeve K3s. Ju mund t'i kaloni argumentet K3-ve duke dhënë flamuj --k3s-arg
. Vlera e flamurit duhet të jetë një argument që do të përfshihet kur K3d thërret binarin K3s.
$ k3s cluster create --k3s-arg "--disable=traefik"
Ky shembull udhëzon K3s të çaktivizojë komponentin e tij të integruar Traefik.
Qasja në shërbimet që funksionojnë në hostin tuaj
Disa ngarkesa pune që ekzekutoni në K3d mund të kenë nevojë për të hyrë në shërbimet që funksionojnë tashmë në hostin tuaj Docker. K3d ofron një emër hosti të quajtur host.k3d.internal
brenda konfigurimit të tij të paracaktuar DNS. Kjo do të zgjidhet automatikisht në kompjuterin tuaj pritës. Ju mund t'i referoheni këtij emri special të hostit brenda Pods tuaj për të hyrë në bazat e të dhënave ekzistuese, ndarjet e skedarëve dhe API-të e tjera që funksionojnë jashtë Kubernetes.
Duke përdorur Imazhet Local Docker
Grupi juaj K3d/K3s nuk mund të qaset në imazhet tuaja lokale Docker. Grupi dhe të gjithë përbërësit e tij po funksionojnë brenda Docker. Përpjekja për të përdorur një imazh privat që ekziston vetëm në host do të dështojë dhe do të raportojë një gabim.
Ka dy mënyra për ta zgjidhur këtë: ose shtyni imazhin tuaj në një regjistër, ose përdorni veçorinë e importimit të imazhit të K3d për të kopjuar një imazh lokal në grupin tuaj. Metoda e parë preferohet përgjithësisht pasi centralizon ruajtjen e imazhit tuaj dhe ju lejon të përdorni imazhe nga çdo mjedis. Sidoqoftë, kur testoni shpejt ndryshimet lokale, mund të dëshironi të importoni drejtpërdrejt një imazh që sapo keni ndërtuar:
$ k3d image import demo-image:latest
Kjo komandë do ta bëjë demo-image:latest
të disponueshme brenda grupit tuaj.
K3d gjithashtu mund të krijojë dhe ekspozojë një regjistër imazhesh për ju. Regjistrat krijohen më së miri së bashku me grupin tuaj pasi K3d më pas mund të konfigurojë automatikisht aksesin e grupit:
$ k3d cluster create --registry-create demo-registry
Kjo fillon një grup të ri me një regjistër të quajtur demo-registry
. Regjistri do të funksionojë në kontejnerin e vet Docker. Mund të zbuloni numrin e portit në të cilin është ekspozuar regjistri duke ekzekutuar docker ps -f name=
, ku
është emri i grupit tuaj. Shtyrja e imazheve në këtë regjistër do t'i bëjë ato të aksesueshme për Pods në grupin tuaj.
$ docker tag demo-image:latest k3d-demo-registry.localhost:12345/demo-image:latest
$ docker push k3d-demo-registry.localhost:12345/demo-image:latest
Ju gjithashtu mund të krijoni regjistra sipas kërkesës, por do t'ju duhet të rikonfiguroni manualisht grupin tuaj për të dhënë detajet e lidhjes.
Ndalimi i grupit tuaj
Grupi juaj K3d do të funksionojë vazhdimisht derisa ta ndaloni vetë. Komanda Cluster stop
ndalon ekzekutimin e kontejnerëve Docker duke ruajtur të dhënat e grupit tuaj:
$ k3d cluster stop k3s-default
Rinisni grupin tuaj në të ardhmen duke përdorur komandën cluster start
:
$ k3d cluster start k3s-default
Fshirja e grupit tuaj
Ju mund të fshini një grup në çdo kohë duke ekzekutuar komandën fshij grupi
dhe duke dhënë emrin e tij. Kjo do të heqë të gjitha gjurmët e grupit, duke fshirë kontejnerët Docker dhe vëllimet që e kanë dhënë atë. Fshirja e të gjitha grupimeve tuaja do ta kthejë hostin tuaj në një listë të pastër me të instaluar vetëm K3d CLI.
$ k3d cluster delete k3s-default
INFO[0000] Deleting cluster 'k3s-default'
INFO[0001] Deleting cluster network 'k3d-k3s-default'
INFO[0001] Deleting 2 attached volumes...
INFO[0001] Removing cluster details from default kubeconfig...
INFO[0001] Removing standalone kubeconfig file (if there is one)...
INFO[0001] Successfully deleted cluster k3s-default!
Procesi i fshirjes heq automatikisht referencat në grup nga Kubeconfig.
Përmbledhje
K3d ju lejon të ekzekutoni një grup Kubernetes të kontejneruar. Ai siguron një mjedis të plotë K3s kudo që Docker është i disponueshëm. K3d mbështet shumë nyje, ka mbështetje të integruar për regjistrat e imazheve dhe mund të përdoret për të krijuar grupime shumë të disponueshme me plane të shumta kontrolli.
Zhvilluesit që tashmë përdorin Docker mund të përdorin K3d për të shtuar shpejt Kubernetes në mjedisin e tyre të punës. K3d është i lehtë, i lehtë për t'u menaxhuar dhe nuk shton shërbime të tjera të sistemit në kompjuterin tuaj. Kjo e bën atë një zgjedhje të shkëlqyeshme për përdorim lokal, por mbështetja e tij në Docker do të thotë se mund të mos jetë i përshtatshëm për hostet e prodhimit ku nuk dëshironi të shtoni një varësi tjetër. Shpërndarjet e tjera të Kubernetes si Minikube, Microk8s dhe K3 të thjeshta janë të gjitha alternativa të mundshme.