Giriş
Kubernetes, Google tarafından başlatılan ve açık kaynak topluluğuyla geliştirilen bir konteyner orkestrasyon platformudur. Konteyner tabanlı uygulamaların dağıtımını, yönetimini ve ölçeklendirilmesini otomatikleştirir. Konteyner oluşturma araçlarından farklı olarak, uygulamaların birden fazla makine üzerinde nasıl çalışacağını yönetmeye odaklanır.
Bir Kubernetes kümesi, istenen durumu yöneten kontrol düzlemi ve iş yüklerini çalıştıran düğümlerden oluşur. En küçük dağıtım birimi olan Pod, ağ ve depolama kaynaklarını paylaşabilen bir veya daha fazla konteyner içerir. Kubernetes, tanımlanan Pod sayısı gibi hedeflerle mevcut durumu karşılaştırarak gerekli işlemleri yürütür.
Kubernetes’in Temel Özellikleri
Otomatik Konteyner Orkestrasyonu
Kubernetes, tanımlanan yapılandırmaya göre konteynerlerin çalıştırılmasını, durdurulmasını ve yeniden başlatılmasını yönetir. Örneğin bir Deployment, uygulamanın hedeflenen sayıda Pod kopyasıyla çalışmasını sağlamaya çalışır. Bu otomasyon, tekrarlayan yönetim işlerini azaltır; ancak uygulama hatalarını kendiliğinden çözmez ve kesintisiz çalışmayı garanti etmez.
Yüksek Erişilebilirlik
Kubernetes, arızalar sonrasında uygulamanın toparlanmasını destekler. Bir konteyner sonlandığında düğümdeki kubelet, Pod’un yeniden başlatma politikasına göre konteyneri yeniden başlatabilir. Deployment gibi denetleyiciler ise kaybolan Pod’ların yerine yenilerini oluşturabilir. Bu işlemler zaman alabilir ve yeterli küme kapasitesi gerektirir. Yüksek erişilebilirlik için birden fazla kopya, kopyaların farklı düğümlere dağıtılması, uygun sağlık kontrolleri ve dayanıklı kontrol düzlemi ile depolama tasarımı gerekir; sıfır kesinti garantisi yoktur.
Otomatik Ölçeklendirme
Kubernetes, yapılandırıldığında uygulama yüküne göre Pod sayısını otomatik olarak değiştirebilir. Horizontal Pod Autoscaler (HPA), CPU, bellek veya özel metriklere göre ölçeklendirme yapar; uygun metrik kaynağının sağlanması gerekir. CPU ve bellek kullanımını kaynak isteğine oranlayan hedeflerde ilgili kaynak istekleri de tanımlanmalıdır. Pod sayısının artması, düğüm kapasitesini otomatik olarak artırmaz; bunun için ayrıca düğüm ölçeklendirme çözümü gerekir. Ölçeklendirme gecikmesi, kapasite sınırları ve uygulama darboğazları nedeniyle performans veya maliyet iyileşmesi garanti değildir.
Servis Keşfi ve Yük Dengeleme
Kubernetes Service nesneleri, değişen Pod adresleri yerine kararlı bir erişim noktası sunar. Küme DNS’i yapılandırıldığında hizmetler adlarıyla bulunabilir; Service trafiği uygun ve hazır durumdaki Pod uç noktalarına dağıtılabilir. Dışarıdan erişim için Service türüne ve altyapıya göre bir yük dengeleyici veya Ingress/Gateway denetleyicisi gibi ek bileşenler gerekebilir. Bu mekanizmalar iletişimi kolaylaştırır, ancak tek başına uygulama hızını artırmaz.
Depolama Orkestrasyonu
Kubernetes, uygulamaların geçici ve kalıcı depolama kaynaklarına erişimini yönetir. Geçici birimler Pod yaşam döngüsüne bağlı olabilir; PersistentVolume (PV) ve PersistentVolumeClaim (PVC) ise kalıcı depolamayı uygulamalara bağlamak için kullanılır. StorageClass ve uygun bir depolama sürücüsüyle dinamik kaynak sağlama yapılabilir. Birden fazla Pod’un aynı veriyi paylaşabilmesi, depolama sistemine ve desteklenen erişim modlarına bağlıdır. Kalıcı birim kullanmak tek başına veri kaybını önlemez; yedekleme, geri yükleme ve birim silme politikaları ayrıca planlanmalıdır.
Kubernetes’in Kullanım Alanları
Mikroservis Mimarisi
Kubernetes, mikroservis mimarisi ile uyumlu çalışır. Her mikroservis, bağımsız olarak yönetilebilen konteynerler içinde çalışabilir. Bu, uygulamaların daha esnek ve ölçeklenebilir olmasını sağlar. Ayrıca, mikroservislerin bağımsız olarak güncellenmesi ve dağıtılması daha kolay hale gelir.
Sürekli Entegrasyon ve Sürekli Dağıtım (CI/CD)
Kubernetes, CI/CD iş akışlarında test işlerinin çalıştırılacağı ortam veya uygulamaların dağıtım hedefi olarak kullanılabilir. Ancak kaynak kodunu derleme, konteyner imajı oluşturma ve test süreçlerini kendi başına sağlayan bir CI/CD sistemi değildir; bunlar ayrı araçlarla düzenlenir. İş hattı, hazırlanan imajı Kubernetes’e dağıtabilir. Deployment’ın kademeli güncelleme mekanizması ve uygun hazır olma kontrolleri, sürüm geçişlerini kontrollü yürütmeye yardımcı olur; güvenilirlik testlerin ve uygulama tasarımının kalitesine de bağlıdır.
Bulut Tabanlı Uygulamalar
Kubernetes, bulut tabanlı uygulamalarda kullanılabilir. AWS, Google Cloud ve Azure gibi sağlayıcılar yönetilen Kubernetes hizmetleri sunar; kümeler uygun altyapı üzerinde kurum içinde de çalıştırılabilir. Yönetilen hizmetler bazı küme yönetimi görevlerini sağlayıcıya devredebilir, ancak sorumlulukların kapsamı hizmete göre değişir. Uygulama yapılandırması, kapasite planlaması ve veri yönetimi yine değerlendirilmelidir; Kubernetes her iş yükü için en basit veya en ekonomik seçenek değildir.
Büyük Veri ve Yapay Zeka
Kubernetes, büyük veri ve yapay zekâ iş yüklerini çalıştırmak için kullanılabilir. Apache Spark işleri Kubernetes üzerinde yürütülebilir; Hadoop bileşenlerini çalıştırmak ise bileşene ve dağıtım yöntemine göre ek yapılandırma gerektirir. TensorFlow ve PyTorch tabanlı eğitim veya model sunum iş yükleri de konteynerler içinde dağıtılabilir. Dağıtık eğitim için ek operatörler, GPU kullanımı için uygun donanım, sürücüler ve aygıt eklentileri gerekebilir. Kubernetes bu kaynakların yönetimine yardımcı olur; veri işleme kapasitesini kendiliğinden artırmaz.
Kubernetes’in Avantajları
Esneklik ve Taşınabilirlik
Kubernetes’in ortak API’leri ve bildirimsel yapılandırmaları, uygulamaların geliştirme ortamı, veri merkezi ve farklı bulutlar arasında taşınmasını kolaylaştırabilir. Ancak bir kümeyi veya uygulamayı taşımak yalnızca yapılandırma dosyalarını kopyalamaktan ibaret değildir. Depolama sınıfları, yük dengeleyiciler, kimlik entegrasyonları, sürüm uyumluluğu ve verinin aktarımı ortama özgü uyarlamalar gerektirebilir.
Kaynak Verimliliği
Kubernetes zamanlayıcısı, Pod’ları CPU ve bellek kaynak istekleri ile yerleştirme kurallarına göre uygun düğümlere atar. Doğru boyutlandırılmış kaynak istekleri, uygun limitler ve ölçeklendirme politikaları kapasitenin daha verimli kullanılmasına yardımcı olabilir. Yük dengeleme ise CPU ve belleği doğrudan optimize etmez. Yanlış yapılandırma, atıl kapasite veya kümenin yönetim yükü maliyetleri artırabilir; kaynak kullanımı metriklerle izlenerek ayarlanmalıdır.
Güvenlik
Kubernetes, kimlik doğrulama, rol tabanlı erişim kontrolü (RBAC), Pod güvenlik kısıtlamaları ve ağ politikaları gibi güvenlik mekanizmaları sunar. RBAC, kullanıcıların ve servis hesaplarının API kaynaklarında hangi işlemleri yapabileceğini belirler; işlem kayıtları için ayrıca denetim günlükleri yapılandırılmalıdır. NetworkPolicy kurallarının uygulanması, bunları destekleyen bir ağ eklentisi gerektirir. Konteynerler tek başına güçlü bir güvenlik sınırı sayılmamalıdır; en az yetki, güvenilir imajlar, güncellemeler ve gizli bilgilerin korunması da gereklidir.
Geniş Topluluk ve Ekosistem
Kubernetes, geniş bir topluluk ve ekosisteme sahiptir. Dünya çapında birçok geliştirici ve şirket, Kubernetes’i kullanarak uygulama geliştirme ve dağıtım süreçlerini iyileştirir. Bu topluluk, sürekli olarak yeni araçlar, dokümantasyon ve destek sağlar.
Sonuç
Kubernetes, çok sayıda konteyner tabanlı iş yükünün dağıtımını, ölçeklendirilmesini ve arıza sonrası toparlanmasını ortak bir modelle yönetmek isteyen ekipler için yararlı olabilir. Mikroservislerden veri işleme işlerine kadar farklı senaryoları destekler; ancak kurulum, izleme, güvenlik, güncelleme ve yedekleme sorumluluklarını ortadan kaldırmaz. Küçük veya az değişen uygulamalarda daha basit bir konteyner dağıtımı ya da uygun bir barındırma çözümü yeterli olabilir. Seçim, iş yükünün ihtiyaçları ve ekibin operasyon kapasitesiyle yapılmalıdır.






