KUBERNETES NEDİR?

Veri Akademi8 dk okuma
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ı.

1. 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.

2. 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ışı

3. 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.

4. 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ı.

5. 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.

6. 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.

7. 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ı

8. 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.

Sıkça Sorulan Sorular

Kubernetes adı nereden geliyor?

Kubernetes, Yunanca 'dümenci' veya 'kaptan' anlamına gelen κυβερνήτης sözcüğünden türetilmiştir. Konteyner gemilerini yöneten kaptan metaforuyla uyumludur. Proje içinde kısaca K8s olarak yazılır; bu yazımda 'K' ile 's' arasındaki sekiz harf rakamla ifade edilir. İsim, Joe Beda ve ekibinin Google içinde başlattığı projenin açık kaynağa çıkarken aldığı son addır.

Borg ile Kubernetes arasındaki temel fark nedir?

Borg, Google içinde kapalı çalışan ve job-task hiyerarşisi üzerine kurulu bir sistemdi. Kubernetes ise açık kaynak olarak yazıldı, pod soyutlamasını merkeze koydu ve API server etrafında modüler bir mimari benimsedi. Borg'un fikirleri korunurken, çok kiracılı bulut ortamlarına ve farklı container runtime'larına uyum sağlayacak şekilde yeniden tasarlandı.

Kubernetes 2014'te kim tarafından başlatıldı?

Projenin ilk çekirdeği Google'da Joe Beda, Brendan Burns ve Craig McLuckie tarafından kuruldu. Çok geçmeden Tim Hockin, Brian Grant ve diğer Borg veteranları katıldı. İlk açık commit 7 Haziran 2014'te yapıldı. Proje, 2015'te v1.0 sürümüyle birlikte yeni kurulan Cloud Native Computing Foundation'a bağışlandı.

Omega projesi neden Borg'un yerini almadı?

Omega, paylaşımlı küme durumu üzerinde iyimser eşzamanlılık deneyen ikinci nesil bir araştırmaydı. Bazı fikirleri başarılıydı ancak Borg'un üretimdeki olgunluğu çok yüksekti ve geçiş maliyeti büyüktü. Omega'nın katkıları zamanla Borg'a entegre edildi; mimari dersleri ise Kubernetes'in API ve controller tasarımına yansıdı.

Docker olmadan Kubernetes çalışır mı?

Evet. Kubernetes uzun süre Docker'ı varsayılan runtime olarak kullandı, ancak 1.20 sürümünden itibaren dockershim aşamalı olarak kaldırıldı. Bugün containerd ve CRI-O gibi Container Runtime Interface uyumlu runtime'lar standarttır. Docker imajları OCI uyumlu olduğu için yine kullanılabilir; yalnızca arka plandaki çalıştırıcı değişir.

Kubernetes küçük projeler için aşırı mı?

Genellikle evet. Tek bir uygulama, sabit trafik ve küçük ekip için bir VM üzerinde systemd veya Docker Compose çoğu zaman yeterlidir. Kubernetes'in değeri çoklu servis, çoklu ortam, otomatik ölçeklendirme ve kendi kendini iyileştirme ihtiyacı arttığında ortaya çıkar. Operasyonel karmaşıklığı taşıyacak bilgi birikimi yoksa, fayda maliyetin altında kalabilir.

CNCF'in Kubernetes ile ilişkisi nedir?

Cloud Native Computing Foundation, 2015'te Linux Foundation çatısı altında kuruldu ve Kubernetes onun ilk barındırılan projesi oldu. CNCF, projenin tarafsız yönetimini sağlar, ticari markayı korur ve etrafındaki ekosistem projelerini (Prometheus, Envoy, Helm, Argo, etcd vb.) aynı süreçle olgunlaştırır. Bu yapı, tek bir şirketin Kubernetes üzerinde tam kontrol kurmasını engeller.

K8s öğrenmeye nereden başlamak mantıklı?

Önce konteyner kavramını ve tek bir Docker imajıyla çalışmayı oturtmak gerekir. Ardından minikube veya kind ile yerel bir küme kurup pod, deployment ve service üzerinde küçük denemeler yapılabilir. YAML dosyalarını elle yazmak, kubectl komutlarını ezbere değil mantığını anlayarak kullanmak temel adımlardır. Sonra ConfigMap, Ingress ve Helm gibi katmanlara geçilir.