02-kind-lab · Kullanım Kılavuzu
Amaç
Geliştirme makinesinde, ~40 saniyede tek kullanımlık bir Kubernetes cluster’ı kurar.
Cluster’la birlikte bir yerel imaj deposu da ayağa kalkar; böylece geliştirdiğiniz
imajı docker push ile itip doğrudan cluster’da çalıştırabilirsiniz — her turda
kind load docker-image beklemek gerekmez.
01 ile arasındaki fark
| 02-kind-lab | 01-multipass-cluster-maker | |
|---|---|---|
| Teknoloji | Docker konteyneri (kind) | Gerçek VM (Multipass + QEMU/KVM) |
| Kurulum süresi | ~40 saniye | ~2 dakika |
| Kaynak | Az (paylaşılan kernel) | 3 × (2 vCPU, 4 GB RAM, 10 GB disk) |
| Ne için | Günlük geliştirme döngüsü, hızlı test | kubeadm kurulumu, kernel modülü, node reboot, systemd, air-gapped simülasyonu |
Kısacası: gün içinde kind, gerçek sunucu davranışı gerektiğinde Multipass.
Gereksinimler
| Araç | Not |
|---|---|
kind |
https://kind.sigs.k8s.io/docs/user/quick-start/#installation |
kubectl |
sudo snap install kubectl --classic |
docker |
Çalışır durumda olmalı (docker info) |
inotify limitleri (önemli)
Bu, kind’in en sık takıldığı yerdir ve hata mesajı sebebi söylemez. Her node kendi
kubelet/containerd izleyicilerini açar; Ubuntu varsayılanları ikinci bir cluster için
yetmez. Belirtiler:
kind create cluster→error execution phase wait-control-plane(zaman aşımı)- Cluster kurulur ama
kube-proxyCrashLoopBackOff‘a düşer; log’da:failed complete: too many open files
Kalıcı çözüm:
printf 'fs.inotify.max_user_instances=512\nfs.inotify.max_user_watches=524288\n' \
| sudo tee /etc/sysctl.d/99-kind.conf && sudo sysctl --system
make kind-up bu değerleri kurulumdan önce denetler ve düşükse uyarır; kurulumdan
sonra da çökmüş sistem pod’u olup olmadığına bakar. Limiti yükseltmeden geçici çözüm:
daha az node (make kind-up KIND_WORKERS=0).
Ne kadar yer kaldığını görmek için (limit dolmak üzereyse yeni cluster kurulamaz):
find /proc/*/fd -lname 'anon_inode:inotify' 2>/dev/null | wc -l # açık instance sayısı
sysctl fs.inotify.max_user_instances # tavan
Değişikliği geri alma
sudo rm /etc/sysctl.d/99-kind.conf && sudo sysctl --system
Dikkat: sysctl --system yalnızca yapılandırma dosyalarında tanımlı değerleri
yeniden uygular. Ubuntu’da max_user_watches başka bir dosyada (30-localsearch.conf)
tanımlı olduğu için eski değerine döner, ama max_user_instances hiçbir varsayılan
dosyada tanımlı değildir — bu yüzden çalışma anındaki yüksek değerini yeniden
başlatmaya kadar korur. Hemen düşürmek için:
sudo sysctl fs.inotify.max_user_instances=128
Make hedefleri
| Hedef | Açıklama |
|---|---|
make kind-up |
Cluster + yerel imaj deposunu kurar |
make kind-status |
Node’lar, çalışmayan pod’lar, depo durumu |
make kind-list |
Makinedeki tüm kind cluster’ları (aktif olan işaretli) |
make kind-reset |
Siler ve aynı ayarlarla sıfırdan kurar |
make kind-down |
Siler; kubeconfig context/cluster/user girdilerini de temizler |
Parametreler
| Değişken | Varsayılan | Anlamı |
|---|---|---|
KIND_NAME |
lab |
Cluster adı (context kind-lab olur) |
KIND_WORKERS |
2 |
Worker sayısı; 0 verilirse tek node’lu cluster |
KIND_K8S |
— | Node imajı/sürümü, örn. v1.31.2 |
KIND_REGISTRY |
1 |
Yerel imaj deposu kurulsun mu |
KIND_REG_PORT |
5001 |
Deponun host portu |
KIND_INGRESS |
0 |
1 ise ingress-nginx kurar ve 80/443’ü hosta açar |
KIND_HTTP_PORT |
8080 |
Ingress için host HTTP portu |
KIND_HTTPS_PORT |
8443 |
Ingress için host HTTPS portu |
make kind-up KIND_NAME=test KIND_WORKERS=3 # 3 worker'lı ikinci cluster
make kind-up KIND_WORKERS=0 # tek node, en hızlı
make kind-up KIND_INGRESS=1 # ingress-nginx ile
make kind-up KIND_K8S=v1.31.2 # belirli Kubernetes sürümü
make kind-down KIND_NAME=test # sadece o cluster'ı sil
Aynı anda birden fazla cluster çalıştırabilirsiniz; KIND_NAME farklı olduğu sürece
birbirlerini etkilemezler ve hepsi aynı imaj deposunu kullanır.
Çalıştırma
make kind-up
──────────────────────────────────────────────────────────────────────────────
kind lab
cluster: lab · 1 control-plane + 2 worker
──────────────────────────────────────────────────────────────────────────────
▸ Yerel imaj deposu
✔ Imaj deposu olusturuluyor (localhost:5001) (2s)
▸ Cluster olusturuluyor
✔ kind cluster 'lab' kuruluyor (38s)
▸ Imaj deposu cluster'a baglaniyor
✔ localhost:5001 tum node'lara tanitildi
▸ Dogrulama
✔ Cluster erisilebilir (context: kind-lab)
NAME STATUS ROLES AGE VERSION
lab-control-plane Ready control-plane 32s v1.31.2
lab-worker Ready <none> 20s v1.31.2
lab-worker2 Ready <none> 20s v1.31.2
İmajını cluster’a taşıma
Yerel depo, kind’in resmi
local registry yöntemiyle
kurulur: depo konteyneri kind ağına bağlanır ve her node’un containerd
yapılandırmasına localhost:5001 adresi tanıtılır.
docker build -t localhost:5001/uygulama:dev .
docker push localhost:5001/uygulama:dev
kubectl run deneme --image=localhost:5001/uygulama:dev
Manifest içinde de aynı adres kullanılır:
spec:
containers:
- name: uygulama
image: localhost:5001/uygulama:dev
imagePullPolicy: Always
imagePullPolicy: Always önerilir: aynı etiketi tekrar push ettiğinizde node’un
önbellekteki eski katmanı kullanmasını engeller.
Ingress ile çalışma
make kind-up KIND_INGRESS=1
ingress-nginx kurulur, control-plane node’una ingress-ready=true etiketi verilir ve
konteynerin 80/443 portları hosta eşlenir. Ingress kaynaklarınıza
http://localhost:8080 üzerinden erişirsiniz.
Temizlik
make kind-down
Cluster silinir ve ~/.kube/config içindeki kind-lab context/cluster/user girdileri
denetlenip temizlenir (çökmüş cluster’lardan artık kalmasın diye).
Yerel imaj deposu bilinçli olarak korunur: birden fazla cluster onu paylaşır ve içindeki imajlar bir sonraki kurulumda hazır olur. Tamamen kaldırmak için:
./scripts/02-kind-lab/cluster-down.sh --purge-registry --yes
Sorun giderme
| Belirti | Çözüm |
|---|---|
wait-control-plane zaman aşımı |
inotify limiti — yukarıdaki bölüme bakın; hızlı çare KIND_WORKERS=0 |
kube-proxy CrashLoopBackOff |
Aynı sebep: too many open files. Limiti yükseltip make kind-reset |
Docker calismiyor gorunuyor |
sudo systemctl start docker |
Pod ImagePullBackOff, imaj localhost:5001/... |
Depo cluster’a bağlı mı: make kind-status. Gerekirse make kind-reset |
port is already allocated (5001) |
Başka bir servis portu tutuyor: make kind-up KIND_REG_PORT=5002 |
| Ingress’e 8080’den erişilemiyor | Cluster KIND_INGRESS=1 ile kurulmalı; sonradan açmak için make kind-reset KIND_INGRESS=1 |
kubectl başka cluster’a bakıyor |
kubectl config use-context kind-lab (uyarıyı make kind-status da gösterir) |
Notlar
- kind node’ları docker konteyneridir;
docker psçıktısındalab-control-plane,lab-workergibi isimlerle görünürler. - Cluster’lar makine yeniden başlatıldığında ayakta kalmaz sayılmalıdır — zaten tek kullanımlık olmaları amaçlanmıştır. Kalıcı bir ortam gerekiyorsa 01. modülü kullanın.
- Node imajları ve depodaki katmanlar disk yer kaplar; birikeni görmek ve temizlemek
için
03-dev-diskmodülüne bakın.