Celil Uyanikoglu

Kubernetes Nedir? Container Orkestrasyon Rehberi

Celil Uyanikoglu Celil Uyanikoglu · 4 Nis 2026 · 8 dk okuma

Container teknolojisi yazılım dünyasını dönüştürdü. Ancak onlarca hatta yüzlerce container'ı manuel yönetmek imkansız. İşte Kubernetes burada devreye giriyor. Google tarafından geliştirilen ve 2015'te açık kaynak olarak yayımlanan bu platform, container orkestrasyon dünyasının tartışmasız lideri.

Kubernetes Nedir?

Kubernetes (K8s), container'ların dağıtımını, ölçeklenmesini ve yönetimini otomatikleştiren açık kaynaklı bir orkestrasyon platformu. Adı Yunanca'da "dümenci" veya "pilot" anlamına geliyor ve container filosunu yönlendirme görevini mükemmel ifade ediyor.

Neden K8s deniyor? Kubernetes kelimesinde K ve s harfleri arasında 8 harf var. Bu tarz kısaltmalara "numeronym" deniyor ve yazılım dünyasında oldukça yaygın.

Container Orkestrasyon Neden Gerekli?

Tek bir container çalıştırmak kolay. Docker ile birkaç komutla uygulamanızı ayağa kaldırabilirsiniz. Peki ya düzinelerce microservice, yüzlerce container instance'ı varsa?

Container orkestrasyon şu sorunları çözer:

Dağıtım: Hangi container hangi sunucuda çalışacak? Ölçekleme: Trafik arttığında yeni instance'lar nasıl eklenecek? Yük dengeleme: İstekler container'lar arasında nasıl dağıtılacak? Sağlık kontrolü: Çöken container nasıl tespit edilip yeniden başlatılacak? Güncelleme: Yeni versiyon kesintisiz nasıl devreye alınacak?

Bu işlemleri manuel yapmak yerine Kubernetes'e ne istediğinizi söylüyorsunuz, o gerisini hallediyor.

Kubernetes Mimarisi

Kubernetes, master-worker mimarisi üzerine kurulu. Küme (cluster) bir kontrol düzlemi (control plane) ve birden fazla worker node'dan oluşur.

Control Plane Bileşenleri

API Server: Kubernetes'in merkezi iletişim noktası. Tüm bileşenler ve kullanıcılar API Server üzerinden iletişim kurar. kubectl komutları buraya gider.

etcd: Dağıtık anahtar-değer veritabanı. Kümenin tüm durum bilgisi burada saklanır. CoreOS tarafından geliştirilmiş, tutarlılık odaklı bir depolama çözümü.

Scheduler: Yeni oluşturulan pod'ların hangi node'da çalışacağına karar verir. Kaynak gereksinimleri, kısıtlamalar ve dengeleme kurallarını değerlendirir.

Controller Manager: İstenen durumu gerçek durumla karşılaştırır ve gerekli düzeltmeleri yapar. Çöken pod'ları yeniden başlatmak, replica sayısını korumak gibi görevleri üstlenir.

Worker Node Bileşenleri

kubelet: Her node'da çalışan ajan. API Server'dan talimatları alır ve container'ların çalıştığından emin olur.

kube-proxy: Ağ kurallarını yönetir. Pod'lar arası ve dış dünya ile iletişimi sağlar.

Container Runtime: Container'ları çalıştıran motor. Docker, containerd veya CRI-O olabilir.

Temel Kavramlar

Pod

Kubernetes'in en küçük dağıtılabilir birimi. Bir veya daha fazla container'ı içerir. Aynı pod içindeki container'lar aynı ağ ve depolama alanını paylaşır.

Genellikle bir pod'da tek container çalıştırılır. Birden fazla container sadece çok yakın işbirliği gerektiren durumlarda (sidecar pattern) tercih edilir.

Pod'lar geçicidir; silinebilir, yeniden oluşturulabilir. Kalıcılık beklenmemeli, bu nedenle doğrudan pod oluşturmak yerine Deployment kullanılır.

ReplicaSet

Belirtilen sayıda pod replica'sının her zaman çalışmasını garanti eder. Bir pod çökerse yenisini oluşturur. Genellikle doğrudan değil, Deployment üzerinden yönetilir.

Deployment

Pod'ların declarative yönetimini sağlar. İstediğiniz durumu tanımlarsınız, Kubernetes gerçekleştirmeyi üstlenir.

Deployment'ın güzel yanı: Ne istediğinizi söylüyorsunuz, nasıl yapılacağını Kubernetes çözüyor. Pod çökerse yenisini başlatır, güncelleme yapmanız gerekirse kademeli olarak yayar.

Örnek Deployment manifest'i:

apiVersion: apps/v1 kind: Deployment metadata: name: web-app spec: replicas: 3 selector: matchLabels: app: web template: metadata: labels: app: web spec: containers: - name: web image: nginx:latest ports: - containerPort: 80

Bu manifest, 3 replica nginx pod'u çalıştırır. Biri çökerse otomatik olarak yenisi başlar.

Service

Pod'ların dinamik IP adresleri vardır ve değişebilir. Service, pod grubuna sabit bir erişim noktası sağlar.

Service türleri:

ClusterIP: Küme içi erişim (varsayılan). NodePort: Her node'un belirli portunda dışarıya açılır. LoadBalancer: Bulut sağlayıcının yük dengeleyicisini kullanır.

Kubernetes otomatik olarak service'lere DNS adı atar. my-service.my-namespace.svc.cluster.local formatında erişim mümkün.

ConfigMap ve Secret

ConfigMap, uygulama yapılandırmasını container'dan ayırır. Ortam değişkenleri, yapılandırma dosyaları gibi veriler burada tutulur.

Secret, hassas verileri (şifreler, API anahtarları) güvenli şekilde saklar. Base64 ile kodlanır, ancak production'da şifreleme etkinleştirilmeli.

Namespace

Kaynakları mantıksal olarak ayırmak için kullanılır. Farklı ekipler, ortamlar (dev, staging, prod) veya projeler için ayrı namespace oluşturulabilir.

Her şeyi default namespace'e koymak yerine organize bir yapı kurmak uzun vadede yönetimi kolaylaştırır.

Kubernetes'in Avantajları

Self-Healing

Container çökerse Kubernetes otomatik olarak yeniden başlatır. Node arızalanırsa pod'lar başka node'lara taşınır. İstenen replica sayısı her zaman korunur.

Otomatik Ölçekleme

Horizontal Pod Autoscaler (HPA): CPU veya bellek kullanımına göre pod sayısını otomatik artırır/azaltır. Trafik arttığında yeni instance'lar eklenir, azaldığında kaldırılır.

Vertical Pod Autoscaler (VPA): Pod'ların kaynak isteklerini (CPU, bellek) otomatik ayarlar.

Kademeli Güncelleme

Yeni versiyon yayınlarken Kubernetes pod'ları kademeli olarak günceller. Eski pod'lar yenileriyle değiştirilir. Sorun çıkarsa rollback anında yapılabilir.

Taşınabilirlik

Kubernetes her yerde çalışır: on-premise, AWS, Google Cloud, Azure... Bir kez öğrendiğinizde her ortamda uygulayabilirsiniz.

Declarative Yönetim

YAML manifest dosyalarıyla altyapıyı tanımlarsınız. Bu dosyalar version control'da saklanabilir (GitOps). Değişiklikler izlenebilir ve geri alınabilir.

Docker ve Kubernetes İlişkisi

Yaygın bir yanlış anlama: Kubernetes, Docker'ın alternatifi değil. İkisi farklı katmanlarda çalışır.

Docker, uygulamayı container haline getirir ve çalıştırır. Kubernetes, bu container'ları yönetir ve orkestre eder.

Kubernetes, container çalıştırmak için Docker, containerd veya CRI-O kullanabilir. 2024'ten itibaren Docker yerine containerd varsayılan runtime oldu ama bu Docker image'larının çalışmayacağı anlamına gelmiyor.

Best Practices

Kaynak Yönetimi

Her container için resource request ve limit tanımlayın:

resources: requests: memory: "128Mi" cpu: "250m" limits: memory: "256Mi" cpu: "500m"

Request: Garantili minimum kaynak. Limit: Kullanılabilecek maksimum kaynak.

Bu ayarları atlarsanız kaynak çatışmaları ve dengesiz yük dağılımı yaşarsınız.

Güvenlik

Network Policy ile pod'lar arası trafiği kısıtlayın. Sadece gerekli iletişime izin verin.

RBAC (Role-Based Access Control) ile kullanıcı yetkilerini sınırlayın. En az yetki prensibi uygulayın.

Pod Security Standards ile container güvenlik kurallarını zorunlu kılın. Root olarak çalışmayı engelleyin.

Container image'larını güvenlik açıklarına karşı tarayın. Trivy gibi araçlar kullanın.

Namespace Organizasyonu

Ortamlara göre: dev, staging, prod Ekiplere göre: team-a, team-b Uygulamalara göre: frontend, backend, database

Sağlık Kontrolleri

Liveness probe: Container'ın çalışıp çalışmadığını kontrol eder. Başarısız olursa container yeniden başlatılır.

Readiness probe: Container'ın trafik almaya hazır olup olmadığını kontrol eder. Başarısız olursa service'den çıkarılır.

livenessProbe: httpGet: path: /health port: 8080 initialDelaySeconds: 30 periodSeconds: 10

Declarative Yaklaşım

İmperatif komutlar (kubectl create, kubectl run) yerine YAML manifest dosyaları kullanın. Bu dosyaları Git'te saklayın. GitOps yaklaşımıyla dağıtım yapın.

Kubernetes Ekosistemi

Helm

Kubernetes için paket yöneticisi. Karmaşık uygulamaları tek komutla kurmanızı sağlar. Chart'lar, uygulama şablonlarını tanımlar.

Prometheus ve Grafana

Prometheus metrik toplar, Grafana görselleştirir. Kubernetes ortamlarının standart izleme çözümü.

Istio

Service mesh çözümü. Microservice'ler arası trafiği yönetir, güvenliği artırır, gözlemlenebilirlik sağlar.

ArgoCD

GitOps tabanlı continuous delivery aracı. Git repository'sindeki değişiklikleri otomatik olarak Kubernetes'e uygular.

Yönetilen Kubernetes Servisleri

Kubernetes kurmak ve yönetmek karmaşık olabilir. Bulut sağlayıcıların yönetilen servisleri bu yükü azaltır:

Amazon EKS: AWS'nin yönetilen Kubernetes servisi. Google GKE: Google Cloud'un servisi, Kubernetes'in doğduğu yer. Azure AKS: Microsoft Azure'un çözümü.

Bu servisler control plane yönetimini üstlenir. Siz sadece worker node'ları ve uygulamalarınızı yönetirsiniz.

Öğrenme Yolculuğu

Kubernetes öğrenmek zaman alır ama yatırıma değer. 2026'da DevOps, cloud engineering veya backend development alanlarında Kubernetes bilgisi artık zorunlu.

Önerilen öğrenme sırası:

Docker ve container temellerini kavrayın. Kubernetes temel kavramlarını öğrenin (Pod, Deployment, Service). Yerel ortamda pratik yapın (Minikube, kind). YAML manifest dosyaları yazmayı öğrenin. Yönetilen servislerde (EKS, GKE, AKS) deneyim kazanın. Helm, monitoring, güvenlik konularına geçin.

Interaktif platformlar (Killercoda, KodeKloud) hands-on pratik için idealdir.

Sonuç

Kubernetes, modern altyapının temel taşı haline geldi. Container'ların otomatik yönetimi, ölçekleme, self-healing ve declarative yapılandırma özellikleri onu vazgeçilmez kılıyor.

Öğrenme eğrisi dik olsa da, microservice mimarileri ve bulut-native uygulamalar geliştiriyorsanız Kubernetes bilgisi kritik. Küçük projelerle başlayın, kavramları sindirin, zamanla karmaşık senaryolara geçin.

Unutmayın: Kubernetes bir araç, amaç değil. İhtiyacınız olmadığında kullanmak karmaşıklık ekler. Ancak doğru senaryolarda uygulamalarınızı yeni bir seviyeye taşır.

0 Yorum

Yorum Yaz