KUBERNETES NEDİR?

Kubernetes resmi dümenci logosu: yedi kollu helm tekerleği konteyner orkestrasyonunun sembolü

2003 yılında Google içeride "Borg" adında bir küme yöneticisi kullanmaya başladığında, Gmail ve Arama gibi servislerin milyonlarca makine üzerinde nasıl tutarlı çalıştığı dışarıdan bir sırdı. On yıl boyunca Borg, ardından Omega projesi Google mühendislerine konteyner orkestrasyonunun ne demek olduğunu öğretti. 2014'te bu birikim "Kubernetes" adıyla açık kaynak dünyasına bırakıldığında, modern bulut altyapısının kuralları yeniden yazılmaya başlandı.

Borg'dan Önce: Sunucu Yönetiminin Karanlık Çağı

2000'li yılların başında büyük servis sağlayıcılar her uygulama için ayrı fiziksel sunucu ya da elle yapılandırılmış sanal makineler kullanıyordu. Bir servisin trafiği iki katına çıktığında yeni donanım sipariş etmek, kabloyu çekmek, işletim sistemini kurmak ve uygulamayı dağıtmak günler sürüyordu. Google ölçeği bu modeli yıktı: arama indeksini güncellemek için on binlerce makinenin saat bazında değil dakika bazında iş alıp bırakması gerekiyordu.

Bu ihtiyaç, ilk büyük "küme zamanlayıcısı" denemelerini doğurdu. Amaç tek tek sunucuları değil, bir bütün olarak veri merkezini tek bir bilgisayar gibi görmekti.

Borg: Google'ın İçindeki Gizli Devrim

Borg, 2003-2004 yıllarında Google içinde hayata geçti ve uzun yıllar boyunca şirketin ana iş yükü yöneticisi oldu. Bir Borg kümesi, "cell" adı verilen on binlerce makineden oluşan birimlere bölünür; kullanıcılar uygulamalarını "job" olarak tanımlar, Borg da bunları kaynak taleplerine göre uygun makinelere yerleştirirdi. Borg'un getirdiği temel fikirler bugün Kubernetes'te hâlâ canlı:

  • Bildirimsel (declarative) yapılandırma: "şu kadar kopya çalışsın" der, sistem bunu sürekli korur.
  • Konteyner tabanlı izolasyon: cgroups ve namespace temelleri Borg ihtiyaçlarından gelişti.
  • Otomatik yeniden zamanlama: makine düşerse iş başka makineye taşınır.
  • Kaynak paylaşımı: aynı makinede farklı önceliklerde işler birlikte koşar.

Borg, Linux çekirdeğindeki cgroups çalışmasını da tetikledi; bu kod 2008'de yukarı akıma katkılandı ve sonradan Docker'ın temelini oluşturacaktı.

Borg Omega ve Kubernetes üç neslin tarihsel zaman çizelgesi ve mimari evrim akışı

Omega: İkinci Nesil ve Alınan Dersler

Borg ölçek büyüdükçe tek bir merkezi zamanlayıcının darboğaza dönüştüğünü gösterdi. 2013'te yayımlanan akademik makalede Google, "Omega" adlı ikinci nesil sistemi anlattı. Omega'nın temel farkı, zamanlama kararını paylaşımlı bir küme durumu üzerinde iyimser eşzamanlılık (optimistic concurrency) ile vermesiydi. Yani birden çok zamanlayıcı aynı anda çalışabilir, çakışmalar sonradan çözülürdü.

Omega tam anlamıyla Borg'un yerine geçmedi; daha çok bir araştırma platformu oldu. Ama mimarisi, sonradan Kubernetes API server + etcd + controller deseninin habercisiydi.

2013-2014: Docker, Açık Kaynak ve Kubernetes'in Doğuşu

Mart 2013'te Docker'ın yayımlanması, konteynerleri Google dışında da popüler hale getirdi. Geliştiriciler artık uygulamayı paketleyip taşınabilir şekilde dağıtabiliyordu. Ama tek başına bir konteyner çalıştırmak yetmiyordu: yüzlerce konteyneri farklı makineler arasında nasıl dağıtacak, nasıl güncelleyecek, nasıl izleyeceklerdi?

Joe Beda, Brendan Burns ve Craig McLuckie öncülüğünde küçük bir Google ekibi, Borg'dan öğrenilenleri sıfırdan, açık kaynak olarak yazmaya başladı. Proje önce "Seven" (Star Trek'teki Seven of Nine'a atıfla) kod adıyla anıldı, sonra Yunanca "dümenci" anlamına gelen Kubernetes ismini aldı. 7 Haziran 2014'te GitHub'da ilk commit yapıldı. Temmuz 2015'te v1.0 sürümü duyuruldu ve aynı gün proje, yeni kurulan Cloud Native Computing Foundation'a (CNCF) bağışlandı.

Kubernetes Nedir: Bugünkü Tanım

Kubernetes, kısaca konteynerleştirilmiş uygulamaları otomatik olarak dağıtan, ölçekleyen ve yöneten açık kaynak bir platformdur. Bir Kubernetes kümesi iki ana parçadan oluşur:

  • Control plane: API server, etcd (durum deposu), scheduler, controller manager — kümenin beynidir.
  • Worker node'lar: kubelet ve container runtime üzerinden gerçek iş yüklerini koşturur.

Kullanıcı bir YAML dosyasıyla "şu imajdan 3 kopya çalışsın, şu portu dışarı açsın" der; Kubernetes hangi node'a yerleşeceğine, hangisi düştüğünde nereye taşınacağına kendisi karar verir. Bu yaklaşım bildirimseldir: siz hedefi söylersiniz, sistem mevcut durumu hedefe yaklaştırmak için çalışır. Tüm API nesneleri ve davranışlarının ayrıntıları için projenin resmi dokümantasyonu başvurulacak ana kaynaktır.

Temel Kavramlar

Bir Kubernetes ortamına ilk kez bakan biri için tanışılması gereken birkaç kavram vardır:

  1. Pod: bir veya birkaç konteynerin birlikte koştuğu en küçük dağıtım birimi.
  2. Deployment: belirli sayıda pod'un istenen sürümde tutulmasını sağlayan denetleyici.
  3. Service: pod'lara kalıcı bir ağ adresi ve yük dengeleme sunan soyutlama.
  4. Namespace: kaynakları mantıksal olarak ayıran sanal bölme.
  5. ConfigMap ve Secret: yapılandırma ve hassas veriyi imajdan ayırarak yönetme yolu.

Bu yapı taşları üzerine Ingress, StatefulSet, DaemonSet, Job, CronJob, Operator gibi katmanlar eklenir. Konuyu daha sistemli ele almak isteyenler Kubernetes eğitimi içeriğinden yararlanabilir.

Neden Bu Kadar Hızlı Yaygınlaştı?

2015 sonrası Kubernetes'in benimsenme hızının ardında birkaç pratik neden var. AWS, Google Cloud ve Azure'un kendi yönetilen Kubernetes servislerini (EKS, GKE, AKS) sunması, satıcı kilidi (vendor lock-in) endişesini büyük ölçüde azalttı. Aynı YAML dosyası üç bulut üzerinde de büyük oranda benzer şekilde çalışıyordu. CNCF çatısı altında Prometheus, Envoy, Helm, Argo CD gibi tamamlayıcı projelerin oluşturduğu ekosistem ise Kubernetes'i bir "araç" olmaktan çıkarıp bir "platformlar platformu"na dönüştürdü.

Kubernetes control plane merkezi yöneticisi ve worker node pod kümesinin temel mimari şeması

Ne Zaman Kullanılır, Ne Zaman Aşırıdır?

Kubernetes güçlü olduğu kadar karmaşıktır. Tek bir küçük uygulamayı tek sunucuda koşturan bir ekip için Kubernetes çoğu zaman aşırı mühendisliktir; basit bir systemd servisi veya Docker Compose yeterli olabilir. Buna karşılık çok servisli mimarilerde, farklı ortamlar (dev, test, prod) arasında tutarlılık gerektiğinde, otomatik ölçeklendirme veya kendi kendini iyileştirme beklendiğinde Kubernetes'in sunduğu soyutlamalar maliyetini geri öder.

Karar verirken sorulması gereken soru "Kubernetes'e ihtiyacımız var mı?" değil, "operasyonel karmaşıklığı taşımaya hazır mıyız?" sorusudur. Kavramlara daha derin girmek için temel pod, deployment ve service alıştırmalarını içeren Kubernetes eğitimi sayfasını inceleyebilirsiniz.

Borg'un 2003'teki ilk satırlarından bugün CNCF altındaki yüzlerce projeye uzanan bu hikâye, aslında bir yazılım parçasının değil, bir fikrin yayılma öyküsüdür: veri merkezini tek bir bilgisayar gibi görmek. Kubernetes bu fikrin şu anki en yaygın somut karşılığı; ama mirası, ondan sonra gelecek sistemlerde de devam edecek.