K3d, kontrol düzlemini Docker içinde çalıştırmanıza izin veren Rancher/SUSE K3s Kubernetes dağıtımının etrafındaki açık kaynaklı bir sarmalayıcıdır. Yığının tamamı Docker’da çalışarak size hafif ve kurulumu kolay, tamamen kapsayıcılı bir küme sunar.
K3’ler çok çeşitli iş akışları için tasarlanırken, K3d daha özel olarak Docker’ı kullandığınız geliştirme durumlarına odaklanır. Bir sanal makine veya başka herhangi bir sistem hizmeti çalıştırmadan mevcut Docker ana makinenizde bir Kubernetes kümesini döndürmenize olanak tanır.
Bu makale size basit bir K3d kümesiyle nasıl çalışmaya başlayacağınızı gösterecektir. Başlamadan önce hem Kubectl hem de Docker v20.10.5 veya daha yenisinin sisteminizde kurulu olması gerekir. K3d Linux, Mac (Homebrew aracılığıyla dahil) ve Windows (Çikolata aracılığıyla) üzerinde çalışır. Bu kılavuz, Linux ile kullanıma odaklanır; k3d
Diğer platformlar için CLI kurulum talimatları belgelerde mevcuttur.
K3d CLI’yi yükleme
bu k3d
CLI, kümelerinizi oluşturmak ve yönetmek için yönetim komutları sağlar. En son CLI’yi GitHub’da bulabilir veya sisteminiz için doğru indirmeyi otomatik olarak almak için kurulum komut dosyasını çalıştırabilirsiniz.
$ curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash
Komut dosyası k3d
senin içine ikili /usr/local/bin
dizin. çalıştırmayı deneyin k3d version
kurulumunuzun başarılı olduğunu kontrol etmek için komut:
$ k3d version k3d version v5.4.6 k3s version v1.24.4-k3s1 (default)
Küme Oluşturma
K3d CLI sağlar cluster create
otomatik olarak yeni bir küme oluşturma ve başlatma komutu:
$ 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
Küme adlandırılacak k3s-default
komutu herhangi bir argüman olmadan çalıştırdığınızda. Komutun ilk argümanı olarak ekleyerek kendi adınızı ayarlayın:
$ k3d cluster create demo ...
K3d, Kubernetes yapılandırma dosyanızı otomatik olarak değiştirir (.kube/config
) yeni kümenize bir bağlantı eklemek için. Bağlantıyı varsayılan olarak işaretler, bu nedenle kubectl
komutlar artık K3d ortamınızı hedefleyecektir.
$ 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
Koşma docker ps
biri K3’ler için, diğeri trafiği kümenize ileten K3d’nin proxy’si için olmak üzere iki kapsayıcının başlatıldığını gösterir:
$ 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
Kümenizi Kullanma
Kümenizle etkileşim kurmak ve Kapsüllerinizi dağıtmak için tanıdık Kubectl komutlarını kullanın:
$ kubectl run nginx --image nginx:latest pod/nginx created $ kubectl expose pod/nginx --port 80 --type NodePort service/nginx exposed
NGINX sunucunuza erişmek için önce Kubernetes Düğümünüze atanan IP adresini bulun:
$ 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
Kullanılacak doğru IP 172.27.0.2
.
Ardından, cihazınıza atanan NodePort’u bulun. nginx
hizmet:
$ 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
Açıkta kalan bağlantı noktası numarası 31214
. için istekte bulunmak 172.17.0.2:31214
varsayılan NGINX karşılama sayfasını yayınlamalıdır:
$ curl http://172.17.0.2:31214 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> ...
K3d belgelerinde hizmetleri ifşa etme ve Giriş ağı kurma hakkında daha fazla rehberlik alabilirsiniz.
K3s Bayraklarını Etkinleştirme
bu cluster create
komutu, standart K3s kümesi oluşturma sürecini tamamlar. Argümanları sağlayarak K3’lere iletebilirsiniz. --k3s-arg
bayraklar. Bayrağın değeri, K3d, K3s ikili dosyasını çağırdığında dahil edilecek bir argüman olmalıdır.
$ k3s cluster create --k3s-arg "--disable=traefik"
Bu örnek, K3’lere yerleşik Traefik bileşenini devre dışı bırakmasını söyler.
Ana Bilgisayarınızda Çalışan Hizmetlere Erişme
K3d’de çalıştırdığınız bazı iş yüklerinin, Docker ana makinenizde halihazırda çalışan hizmetlere erişmesi gerekebilir. K3d adlı bir ana bilgisayar adı sağlar host.k3d.internal
varsayılan DNS yapılandırması içinde. Bu, otomatik olarak ana makinenize çözülecektir. Kubernetes dışında çalışan mevcut veritabanlarına, dosya paylaşımlarına ve diğer API’lere erişmek için Pod’larınızda bu özel ana bilgisayar adına başvurabilirsiniz.
Yerel Docker Görüntülerini Kullanma
K3d/K3s kümeniz yerel Docker görüntülerinize erişemez. Küme ve tüm bileşenleri çalışıyor içeri Liman işçisi. Yalnızca ana bilgisayarda bulunan özel bir resmi kullanmaya çalışmak başarısız olur ve bir hata bildirir.
Bunu çözmenin iki yolu vardır: ya görüntünüzü bir kayıt defterine gönderin ya da yerel bir görüntüyü kümenize kopyalamak için K3d’nin görüntü içe aktarma özelliğini kullanın. İlk yöntem, görüntü depolamanızı merkezileştirdiği ve herhangi bir ortamdan görüntülere erişmenizi sağladığı için genellikle tercih edilir. Ancak, yerel değişiklikleri hızlı bir şekilde test ederken, yeni oluşturduğunuz bir görüntüyü doğrudan içe aktarmak isteyebilirsiniz:
$ k3d image import demo-image:latest
Bu komut yapacak demo-image:latest
kümenizin içinde kullanılabilir.
K3d ayrıca sizin için bir görüntü kaydı oluşturabilir ve gösterebilir. K3d kümenin erişimini otomatik olarak yapılandırabileceğinden, kayıtlar en iyi şekilde kümenizle birlikte oluşturulur:
$ k3d cluster create --registry-create demo-registry
Bu, adlı bir kayıt defteriyle yeni bir küme başlatır. demo-registry
. Kayıt defteri kendi Docker kapsayıcısında çalışacaktır. Çalıştırarak kayıt defterinin maruz kaldığı bağlantı noktası numarasını keşfedebilirsiniz. docker ps -f name=<cluster-name>-registry
nerede <cluster-name>
kümenizin adıdır. Görüntüleri bu kayıt defterine göndermek, onları kümenizdeki Pod’lar tarafından erişilebilir hale getirecektir.
$ docker tag demo-image:latest k3d-demo-registry.localhost:12345/demo-image:latest $ docker push k3d-demo-registry.localhost:12345/demo-image:latest
Ayrıca isteğe bağlı kayıtlar da oluşturabilirsiniz, ancak bağlantı ayrıntılarını sağlamak için kümenizi manuel olarak yeniden yapılandırmanız gerekir.
Kümenizin Durdurulması
K3d kümeniz, siz onu durdurana kadar sürekli olarak çalışacaktır. bu cluster stop
komutu, kümenizin verilerini korurken Docker kapsayıcılarını çalıştırmayı durdurur:
$ k3d cluster stop k3s-default
kullanarak gelecekte kümenizi yeniden başlatın. cluster start
emretmek:
$ k3d cluster start k3s-default
Kümenizin Silinmesi
çalıştırarak bir kümeyi istediğiniz zaman silebilirsiniz. cluster delete
komut ve adını sağlama. Bu, kümenin tüm izlerini kaldırarak Docker kapsayıcılarını ve onu sağlayan birimleri silecektir. Tüm kümelerinizi silmek, ana makinenizi yalnızca K3d CLI’nin kurulu olduğu temiz bir sayfaya geri götürür.
$ 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!
Silme işlemi, kümeye yapılan başvuruları Kubeconfig’inizden otomatik olarak kaldırır.
Özet
K3d, kapsayıcılı bir Kubernetes kümesi çalıştırmanıza olanak tanır. Docker’ın bulunduğu her yerde eksiksiz bir K3s ortamı sağlar. K3d birden çok düğümü destekler, görüntü kayıtları için entegre desteğe sahiptir ve birden çok kontrol düzlemi ile yüksek düzeyde kullanılabilir kümeler oluşturmak için kullanılabilir.
Halihazırda Docker çalıştıran geliştiriciler, Kubernetes’i çalışma ortamlarına hızla eklemek için K3d’yi kullanabilir. K3d hafiftir, yönetimi kolaydır ve makinenize başka hiçbir sistem hizmeti eklemez. Bu, onu yerel kullanım için harika bir seçim yapar, ancak Docker’a güvenmesi, başka bir bağımlılık eklemek istemediğiniz üretim ana bilgisayarları için uygun olmayabileceği anlamına gelir. Minikube, Microk8s ve düz K3s gibi diğer Kubernetes dağıtımlarının tümü uygun alternatiflerdir.