Kubernetes ile Konteyner Orkestrasyonu: Minikube ve kind ile Yerel Küme Kurulum Rehberi

Docker ile uygulamalarınızı konteynerleştirmeyi öğrendiniz, peki ya bu konteynerleri üretim ortamında onlarca, yüzlerce hatta binlerce örneğe ölçeklendirmeniz gerektiğinde ne yapacaksınız? İşte tam bu noktada devreye Kubernetes giriyor. Bu Kubernetes kurulum rehberi, daha önce Kubernetes’e hiç dokunmamış geliştiriciler ve sistem yöneticileri için, kendi bilgisayarınızda 30 dakikada çalışan bir yerel küme kurmanızı sağlayacak. Docker temellerine hâkimseniz ve orkestrasyon dünyasına adım atmak istiyorsanız doğru yerdesiniz. Eğer Docker yolculuğuna yeni başladıysanız, önce Docker ile Konteynerleştirme rehberimize göz atmanızı öneririz.

Neden Kubernetes’e İhtiyacınız Var?

Docker tek başına konteynerleri oluşturup çalıştırmak için harikadır. Ancak iş birden fazla konteyneri yönetmeye, servis keşfine, yük dengelemeye, sıfır kesintiyle güncellemeye ve otomatik iyileştirmeye gelince bir orkestrasyon platformuna ihtiyaç duyarsınız. Kubernetes (kısaca K8s), tam olarak bu ihtiyaçlar için geliştirilmiş açık kaynak bir platformdur.

  • Ölçeklenebilirlik: Trafik arttığında pod sayınızı tek bir komutla ya da otomatik olarak artırabilirsiniz.
  • Kendini İyileştirme: Çöken bir konteyner otomatik olarak yeniden başlatılır, takvimden düşen bir düğüm üzerindeki yükler başka düğümlere taşınır.
  • Yük Dengeleme ve Servis Keşfi: Kubernetes, pod’lara gelen trafiği otomatik dağıtır ve DNS tabanlı servis keşfi sağlar.
  • Bildirimsel Yapılandırma: İstenen durumu YAML dosyaları ile tanımlar, Kubernetes bu durumu sürekli korur.

Docker Compose ile küçük ölçekli ortamları yönetmek mümkün olsa da, Kubernetes yüzlerce konteynerli mikroservis mimarileri için tasarlanmıştır. Kubernetes’in bu yetenekleri, onu günümüzün bulut tabanlı uygulama dünyasında vazgeçilmez kılar. (Mikroservis mimarisiyle ilgili daha fazla bilgi için Mikroservis Mimarisi Nedir? yazımıza göz atabilirsiniz.)

Kubernetes Temelleri: Control Plane ve Worker Node’lar

Yerel kuruluma geçmeden önce, Kubernetes’in anatomisini kısaca tanımakta fayda var. Bir Kubernetes kümesi iki ana bileşenden oluşur:

  • Control Plane (Kontrol Düzlemi): API server, etcd (durum deposu), scheduler (zamanlayıcı) ve controller manager bileşenlerini barındırır. Tüm küme yönetimi buradan yapılır.
  • Worker Node’lar: Uygulama pod’larının çalıştığı makinelerdir. Her node üzerinde kubelet (ajan), kube-proxy (ağ kuralları) ve bir konteyner çalışma zamanı (Docker, containerd vb.) bulunur.

Yerel geliştirme ortamında genellikle tek bir makine hem control plane hem de worker node rollerini üstlenir. İşte bu noktada Minikube ve kind gibi araçlar devreye girer.

Minikube ile Tek Düğümlü Kubernetes Kümesi Kurulumu

Minikube, yerel makinenizde tek düğümlü bir Kubernetes kümesi çalıştırmak için en popüler araçtır. Linux, macOS ve Windows’ta sorunsuz çalışır. VirtualBox, Docker veya Hyper‑V gibi bir sanallaştırma katmanı üzerine küme kurabilir.

Adım 1: Minikube Kurulumu

macOS (Homebrew):

brew install minikube

Linux (binary indirme):

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

Windows: Chocolatey veya doğrudan yükleyiciyi kullanabilirsiniz.

choco install minikube

Adım 2: Sanal Sürücü Seçimi ve Küme Başlatma

Minikube varsayılan olarak Docker sürücüsünü kullanır, ancak sisteminizde Docker kurulu değilse VirtualBox’ı tercih edebilirsiniz. Aşağıdaki komutla yeni bir küme başlatın:

minikube start --driver=docker

Kurulum tamamlandığında Minikube otomatik olarak kubectl aracını da yapılandırır. Eğer kubectl henüz yoksa:

minikube kubectl -- get pods -A

ya da işletim sisteminize uygun şekilde kubectl’i ayrıca yükleyebilirsiniz. Minikube, kubectl’i kendi içinde barındırdığı için pratik bir kullanım sağlar; ancak kalıcı olması için resmi kubectl kurulumunu yapmanızı öneririz.

Adım 3: Minikube Durumunu Kontrol Etme

minikube status
minikube dashboard   # Web tabanlı yönetim panelini açar

Artık çalışan tek düğümlü bir Kubernetes kümeniz var. Bu ortam, öğrenme ve yerel geliştirme için idealdir.

kind ile Çoklu Düğüm (Multi‑Node) Kubernetes Kümesi

kind (Kubernetes in Docker), her Kubernetes düğümünü ayrı bir Docker konteyneri olarak çalıştıran oldukça hafif bir araçtır. Özellikle CI/CD pipeline’larında ve çoklu düğüm senaryolarını test etmek için kullanılır. Minikube’den farklı olarak, birden fazla worker node’u kolayca simüle edebilirsiniz.

Adım 1: kind Kurulumu

macOS (Homebrew):

brew install kind

Linux:

curl -Lo ./kind https://kind.sigs.k8s.io/dl/latest/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind

Windows:

choco install kind

Adım 2: Küme Konfigürasyon Dosyası Hazırlama

Aşağıdaki kind-config.yaml dosyası, 1 control plane ve 2 worker node’dan oluşan bir küme tanımlar:

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:

- role: control-plane
- role: worker
- role: worker

Adım 3: Çoklu Düğümlü Kümeyi Oluşturma

kind create cluster --config kind-config.yaml --name coklu-dugum

Kurulum bittikten sonra node’ları listeleyerek başarılı olduğunu görebilirsiniz:

kubectl get nodes

Çıktıda control-plane ve iki worker node’u göreceksiniz. kind, kubeconfig dosyanızı otomatik günceller, dolayısıyla kubectl doğrudan bu yeni kümeyle konuşur.

İlk Pod ve Deployment

Kümemiz hazır, hadi ilk uygulamamızı dağıtalım. Burada klasik “Nginx” örneğiyle pod ve deployment kavramlarını pekiştireceğiz.

Tek Seferlik Pod Çalıştırma

kubectl run ilk-nginx --image=nginx:latest
kubectl get pods

Bu komut, ilk-nginx adında bir pod oluşturur. Pod, Kubernetes’in en küçük birimidir ve bir veya daha fazla konteyneri sarar. Ancak doğrudan pod çalıştırmak, pod silindiğinde yeniden yaratılmasını garanti etmez.

Deployment Oluşturma

Kalıcı ve ölçeklenebilir bir yapı için Deployment kullanırız:

kubectl create deployment nginx-deploy --image=nginx:latest --replicas=2
kubectl get deployments
kubectl get pods -o wide

Bu komut 2 replika Nginx pod’u başlatır. Deployment, tanımlanan replika sayısını sürekli korur; bir pod çökerse otomatik olarak yeni biri ayağa kaldırılır.

Servis ile Dış Dünyaya Açma

Şimdi bu Deployment’ı bir servis ile dışarıya erişilebilir hale getirelim:

kubectl expose deployment nginx-deploy --type=NodePort --port=80
minikube service nginx-deploy   # Minikube kullanıyorsanız
# kind ortamında port-forward kullanabilirsiniz:
# kubectl port-forward deployment/nginx-deploy 8080:80

Minikube’de minikube service komutu, tarayıcınızda ilgili URL’yi açar. kind ortamında ise kubectl port-forward ile yerel bir portu pod’lara yönlendirebilirsiniz.

kubectl Temel Komut Rehberi

Günlük operasyonlarınızda sıkça kullanacağınız kubectl komutlarını bilmek, Kubernetes’i verimli yönetmenin anahtarıdır.

Pod Yönetimi

  • kubectl get pods – Tüm pod’ları listeler.
  • kubectl describe pod <pod-adı> – Pod’un ayrıntılı bilgisi ve event log’ları.
  • kubectl delete pod <pod-adı> – Belirtilen pod’u siler.

Deployment ve Ölçeklendirme

  • kubectl scale deployment <deployment-adı> --replicas=5 – Replika sayısını anlık değiştirir.
  • kubectl rollout status deployment/<deployment-adı> – Güncelleme durumunu izler.
  • kubectl set image deployment/<deployment-adı> <container>=<yeni-imaj> – İmaj günceller.

Log ve Hata Ayıklama

  • kubectl logs <pod-adı> – Pod’un standart çıktısını gösterir.
  • kubectl logs -f <pod-adı> – Canlı log takibi.
  • kubectl exec -it <pod-adı> -- /bin/sh – Pod içinde interaktif terminal açar.

Port Yönlendirme ve Bağlantı

  • kubectl port-forward <pod-adı> 8080:80 – Yerel porta yönlendirme.
  • kubectl port-forward deployment/<deployment-adı> 8080:80 – Tüm deployment için yönlendirme.

Namespace Kullanımı

Namespace’ler, kaynakları mantıksal olarak ayırmanızı sağlar. Varsayılan namespace default’tur.

  • kubectl create namespace test – Yeni namespace oluşturur.
  • kubectl get pods -n test – Belirli bir namespace’teki pod’ları listeler.
  • kubectl config set-context --current --namespace=test – Varsayılan namespace’i değiştirir.

Bu komut seti, Kubernetes ile ilk deneyimlerinizde işinizin %80’ini fazlasıyla görecektir. Daha kapsamlı bir referans için kubectl komut tablosuna bakabilirsiniz.

Hangi Araç Ne Zaman Kullanılmalı?

  • Minikube: Yerel geliştirme, Kubernetes’i öğrenme ve hızlı prototipleme için idealdir. Tek düğüm yeterliyse, basitliği ile öne çıkar.
  • kind: CI/CD ortamlarında, çoklu düğüm senaryolarını test etmek ve Kubernetes’in kendisi üzerinde geliştirme yapmak için uygundur. Tamamen Docker üzerinde çalıştığı için sistem kaynaklarını verimli kullanır.
  • Üretim Seviyesi Kurulum: Gerçek üretim ortamları için kubeadm, kubespray ya da yönetilen Kubernetes servisleri (GKE, EKS, AKS) tercih edilir. Bu rehberdeki araçlar yalnızca öğrenme ve test amaçlıdır.

Sonuç ve Sonraki Adımlar

Bu Kubernetes kurulum rehberi ile kendi yerel kümenizi ayağa kaldırdınız, ilk deployment’ınızı oluşturdunuz ve temel kubectl komutlarını deneyimlediniz. Konteyner yolculuğunuzu Docker’dan orkestrasyona taşıdınız. Bundan sonraki adım olarak, YAML ile bildirimsel deployment’lar oluşturmayı, ConfigMap ve Secret’ları kullanmayı, Ingress ile trafiği yönlendirmeyi ve Helm ile paket yönetimini keşfetmenizi öneririz. Signalique olarak, dijital performans ve otomasyon çözümlerimizle bu süreçleri kurumsal düzeyde yönetmenize yardımcı olmaktan mutluluk duyarız. Sorularınız veya danışmanlık ihtiyacınız için bizimle iletişime geçmekten çekinmeyin.

Kaynaklar ve İleri Okuma: