Kubernetes Nedir? Bulut Sunucu Ölçeklendirme Nasıl Yapılır?

Kubernetes Nedir? Bulut Sunucu Ölçeklendirme Nasıl Yapılır?

Modern yazılım geliştirme ve altyapı yönetimi, sürekli artan karmaşıklık ve ölçeklendirme ihtiyaçları ile karşı karşıyadır. Mikroservis mimarilerinin ve konteyner teknolojilerinin yükselişi, uygulamaları daha esnek, taşınabilir ve verimli hale getirmiştir. Ancak bu dağıtık sistemleri manuel olarak yönetmek, özellikle yüzlerce veya binlerce konteyner söz konusu olduğunda, neredeyse imkansızdır. İşte bu noktada, bu karmaşıklığı otomatize eden, yöneten ve ölçeklendiren bir orkestrasyon aracı devreye girer. Bu aracın adı Kubernetes’tir. Google tarafından geliştirilen ve daha sonra açık kaynaklı hale getirilen Kubernetes, günümüzde konteyner orkestrasyonu için endüstri standardı olarak kabul edilmektedir. İşletmelerin bulut sunucu altyapılarını en verimli şekilde kullanmalarını sağlayarak, uygulamaların kesintisiz ve yüksek performansla çalışmasını garanti eder.

Temel Kavramlarıyla Kubernetes Nedir?

Kubernetes, genellikle K8s olarak kısaltılır (K ve s arasındaki 8 harfi temsil eder), konteynerleştirilmiş uygulamaların dağıtımını, ölçeklendirilmesini ve yönetimini otomatikleştirmek için tasarlanmış açık kaynaklı bir platformdur. Temelde, bir sunucu kümesini (cluster) tek bir büyük işlem birimi gibi yönetmenizi sağlar. Bu sayede, geliştiriciler ve sistem yöneticileri, uygulamalarının hangi sunucuda çalıştığı gibi altyapısal detaylarla uğraşmak yerine, uygulamanın kendisiyle ve onun yaşam döngüsüyle ilgilenebilirler. Kubernetes, altyapıyı soyutlayarak, uygulamaların farklı bulut sağlayıcıları veya şirket içi veri merkezleri arasında kolayca taşınabilmesini sağlar.

Kubernetes’in temel amacı, uygulamaların her zaman istenen durumda (desired state) çalışmasını sağlamaktır. Siz platforma uygulamanızın nasıl çalışması gerektiğini (örneğin, “bu uygulamadan 3 kopya çalışsın ve 80 portundan trafik alsın”) bildirirsiniz ve Kubernetes, mevcut durumu sürekli olarak bu istenen durumla karşılaştırır. Herhangi bir sapma olduğunda (örneğin bir konteyner çöktüğünde), Kubernetes otomatik olarak müdahale eder ve sistemi istenen duruma geri getirir. Bu kendi kendini iyileştirme (self-healing) yeteneği, platformun en güçlü özelliklerinden biridir ve sistemlerin dayanıklılığını (resilience) önemli ölçüde artırır. Bu yaklaşım, özellikle konteyner teknolojisi Docker gibi araçlarla oluşturulmuş uygulamalar için hayati önem taşır.

Kubernetes Mimarisi: Temel Bileşenler ve İşleyişi

Kubernetes, bir ana (master) ve birden çok işçi (worker) düğümden (node) oluşan bir küme (cluster) mimarisine dayanır. Ana düğüm, kümenin beyni olarak hareket eder ve tüm yönetimsel görevleri üstlenir. İşçi düğümler ise uygulamaların ve konteynerlerin fiilen çalıştığı sunuculardır. Bu mimarinin her bir parçasının belirli bir görevi vardır ve birlikte uyum içinde çalışarak platformun gücünü oluştururlar.

Ana Düğüm (Master Node) Bileşenleri

Ana düğüm veya Kontrol Düzlemi (Control Plane), kümenin genel durumunu yönetir, planlama yapar ve değişiklikleri izler. Ana düğümü oluşturan temel bileşenler şunlardır:

  • API Sunucusu (kube-apiserver): Kümenin tüm iç ve dış iletişiminin merkezidir. Geliştiriciler, yöneticiler ve diğer bileşenler, küme ile etkileşim kurmak için bu API sunucusuna istek gönderir. Tüm komutlar ve sorgular bu bileşen üzerinden geçer.
  • etcd: Kümenin tüm yapılandırma verilerinin, durum bilgilerinin ve meta verilerinin saklandığı, tutarlı ve yüksek erişilebilirliğe sahip bir anahtar-değer deposudur. Kümenin “tek doğruluk kaynağı” olarak kabul edilir. Bir düğümün çökmesi durumunda bile verilerin güvende kalmasını sağlar.
  • Zamanlayıcı (kube-scheduler): Yeni oluşturulan Pod’ları (konteyner gruplarını) izler ve kaynak gereksinimlerine, kısıtlamalara ve politikalara göre en uygun işçi düğüme atanmasını sağlar. Örneğin, yüksek CPU gerektiren bir Pod’u, mevcut CPU kapasitesi en yüksek olan düğüme yerleştirir.
  • Kontrolcü Yöneticisi (kube-controller-manager): Küme durumunu düzenleyen çeşitli kontrolcüleri çalıştırır. Örneğin, Düğüm Kontrolcüsü (Node Controller) düğümlerin durumunu izlerken, Çoğaltma Kontrolcüsü (Replication Controller) belirtilen sayıda Pod kopyasının her zaman çalıştığından emin olur.

İşçi Düğüm (Worker Node) Bileşenleri

İşçi düğümler, konteynerleştirilmiş uygulamaların çalıştığı yerdir. Her işçi düğüm, ana düğümden aldığı talimatları yerine getirmek için gerekli olan bileşenleri barındırır:

  • Kubelet: Her işçi düğümde çalışan bir ajandır. Ana düğümdeki API sunucusundan Pod tanımlarını alır ve bu tanımlara göre konteynerlerin düğüm üzerinde çalıştırılmasını ve sağlıklı olmasını sağlar. Düğümün ve üzerindeki konteynerlerin durumunu düzenli olarak ana düğüme raporlar.
  • Kube-proxy: Düğümler arasındaki ağ iletişimini ve dış dünyadan gelen trafiğin doğru konteynerlere yönlendirilmesini sağlayan bir ağ proxy’sidir. Küme içindeki servisler (Services) için ağ kurallarını yönetir ve yük dengeleme yapar.
  • Konteyner Çalıştırma Motoru (Container Runtime): Konteynerleri fiilen çalıştıran yazılımdır. En popüler örnekleri Docker, containerd ve CRI-O’dur. Kubelet, konteynerleri başlatmak, durdurmak ve yönetmek için bu motorla iletişim kurar.

Kubernetes Nesneleri ve Mimarisi Özeti

Kubernetes’in mimarisi, bu bileşenlerin uyumlu çalışması üzerine kuruludur. Aşağıdaki tablo, temel Kubernetes nesnelerini ve mimari bileşenlerini özetlemektedir.

Bileşen / Nesne Rolü ve Görevi Bulunduğu Yer
Pod Bir veya daha fazla konteyneri barındıran en küçük dağıtım birimi. Aynı Pod içindeki konteynerler, ağ ve depolama kaynaklarını paylaşır. İşçi Düğüm
Service Bir grup Pod’a tek bir erişim noktası (IP adresi ve DNS adı) sağlayan ve yük dengeleme yapan soyutlama katmanı. Küme Geneli
Deployment Pod’ların ve ReplicaSet’lerin durumunu bildirimsel olarak yönetir. Uygulama güncellemelerini ve geri almaları kolaylaştırır. Ana Düğüm (etcd’de tanımlı)
API Server Kümenin merkezi yönetim noktası. Tüm komutları alır ve işler. Ana Düğüm
Scheduler Yeni Pod’ları kaynak durumuna göre en uygun İşçi Düğüme atar. Ana Düğüm
Kubelet Düğüm üzerindeki Pod’ların ve konteynerlerin sağlıklı bir şekilde çalıştığından emin olan ajandır. İşçi Düğüm

Kubernetes ile Bulut Sunucu Ölçeklendirme Nasıl Yapılır?

Kubernetes’in en güçlü yanlarından biri, bulut sunucu kaynaklarını dinamik ve otomatik olarak ölçeklendirme yeteneğidir. Bu, uygulamanızın trafiği arttığında performans kaybı yaşamamasını, trafik azaldığında ise gereksiz kaynak kullanımını önleyerek maliyet tasarrufu sağlamasını mümkün kılar. Ölçeklendirme temel olarak iki düzeyde gerçekleşir: Pod düzeyinde (yatay) ve Düğüm düzeyinde (küme).

Yatay Pod Otomatik Ölçeklendirme (Horizontal Pod Autoscaler – HPA)

HPA, bir uygulamanın (Deployment veya ReplicaSet) Pod sayısını, gözlemlenen CPU veya bellek kullanımı gibi metrikler doğrultusunda otomatik olarak artırıp azaltır. İşleyişi şu şekildedir:

  1. Metriklerin Tanımlanması: Yönetici, bir HPA nesnesi oluşturarak hangi metriğin izleneceğini ve hedeflenen değeri belirtir. Örneğin, “Tüm Pod’ların ortalama CPU kullanımı %70’i aştığında Pod sayısını artır” gibi bir kural tanımlanabilir.
  2. Metriklerin İzlenmesi: Kubernetes, metrik sunucusu aracılığıyla Pod’ların kaynak kullanımını sürekli olarak izler.
  3. Otomatik Ölçeklendirme: Ortalama kaynak kullanımı, belirlenen eşiği aştığında, HPA otomatik olarak Deployment’a yeni Pod’lar eklenmesi talimatını verir. Trafik azalıp kaynak kullanımı eşiğin altına düştüğünde ise gereksiz Pod’ları sonlandırarak kaynakları serbest bırakır.

Bu mekanizma sayesinde, bir e-ticaret sitesinin kampanya dönemlerinde artan trafiği sorunsuzca karşılaması veya gece saatlerinde azalan trafikle birlikte sunucu maliyetlerini düşürmesi tamamen otomatik hale gelir.

Küme Otomatik Ölçeklendirme (Cluster Autoscaler)

Bazen Pod sayısını artırmak tek başına yeterli olmaz. Eğer mevcut işçi düğümlerde yeni Pod’ları çalıştıracak yeterli CPU veya bellek kalmamışsa, kümenin kendisinin büyümesi gerekir. İşte bu noktada Küme Otomatik Ölçeklendirici devreye girer. Bu bileşen, bulut sağlayıcınızla (AWS, Google Cloud, Azure vb.) entegre çalışarak:

  • Yeni Düğüm Ekleme: Zamanlayıcı (Scheduler) tarafından kaynak yetersizliği nedeniyle yerleştirilemeyen (pending) Pod’lar olduğunda, Cluster Autoscaler bunu algılar ve bulut sağlayıcınızdan yeni bir sunucu (işçi düğüm) talep ederek kümeye ekler. Yeni düğüm hazır olduğunda, bekleyen Pod’lar bu düğüme yerleştirilir.
  • Gereksiz Düğümleri Kaldırma: Kümedeki genel kaynak kullanımı belirli bir süre boyunca düşük seviyede kalırsa ve bazı düğümler üzerindeki Pod’lar başka düğümlere güvenle taşınabiliyorsa, Cluster Autoscaler bu boş veya az kullanılan düğümleri tespit eder ve maliyetleri azaltmak için bunları kümeden kaldırır.

 

Bu iki ölçeklendirme mekanizması birlikte çalışarak, uygulamalara neredeyse sınırsız bir esneklik ve verimlilik kazandırır. Kubernetes, bu sayede bulut bilişimin en önemli vaatlerinden biri olan “kullandığın kadar öde” modelini tam anlamıyla hayata geçirir.