Modern yazılım geliştirme süreçlerinde Docker, uygulamalarımızı paketleyerek farklı ortamlarda sorunsuz bir şekilde çalıştırabilmemizi sağlayan büyük bir yenilik getirdi. Peki, projeniz büyüyüp tek bir sunucu yetersiz kaldığında ve yüzlerce konteyneri aynı anda çalıştırmanız gerektiğinde ne olacak?
Bu kadar çok konteyneri manuel olarak yönetmek, çöktüklerinde yeniden başlatmak veya artan trafiğe göre ölçeklemek (scale etmek) neredeyse imkânsız hâle gelir.
İşte tam bu noktada, konteyner dünyasının orkestra şefi Kubernetes (diğer adıyla K8s) devreye girer.
Kubernetes Nedir?
Kubernetes, Google tarafından geliştirilen ve günümüzde Cloud Native Computing Foundation (CNCF) tarafından sürdürülen, açık kaynaklı bir konteyner orkestrasyon platformudur.
Docker, uygulamaların paketlenmesini ve çalıştırılmasını sağlarken; Kubernetes, onlarca hatta yüzlerce konteynerin uyum içinde, güvenilir ve kesintisiz bir şekilde çalışmasını yönetir.
Adını Yunanca "dümen tutucu" veya "kaptan" anlamına gelen kelimeden alan Kubernetes, genellikle K8s şeklinde kısaltılır. Bunun nedeni, K ile s harfi arasında sekiz harf bulunmasıdır. Günümüzde Kubernetes, bulut bilişim dünyasının en önemli teknolojilerinden biri hâline gelmiştir.
Kubernetes Neden Bu Kadar Önemli?
Tek bir sunucuda Docker Compose kullanmak küçük ve orta ölçekli projeler için oldukça yeterlidir. Ancak sisteminiz büyüdüğünde Kubernetes aşağıdaki kritik sorunları çözer.
1. Otomatik Ölçekleme (Auto Scaling)
Uygulamanıza aniden yoğun trafik geldiğinde Kubernetes bunu algılar ve saniyeler içinde yeni Pod'lar oluşturur. Trafik azaldığında ise kullanılmayan Pod'ları kapatarak sistem kaynaklarının verimli kullanılmasını sağlar.
2. Yük Dengeleme (Load Balancing)
Kubernetes, gelen istekleri çalışan Pod'lar arasında dengeli bir şekilde dağıtır. Böylece hiçbir sunucu aşırı yük altında kalmaz ve uygulamanız daha kararlı çalışır.
3. Kendi Kendini İyileştirme (Self-Healing)
Çalışan bir Pod veya bulunduğu sunucu (Node) arızalandığında Kubernetes bunu otomatik olarak algılar. Sorunlu Pod'u yeniden başlatır veya çalışır durumdaki başka bir Node üzerinde yeniden oluşturur. Böylece sistem mümkün olduğunca kesintisiz çalışmaya devam eder.
4. Kesintisiz Güncelleme (Rolling Updates)
Uygulamanızın yeni bir sürümünü yayınlarken sistemi kapatmanıza gerek kalmaz. Kubernetes, eski sürümleri kademeli olarak devreden çıkarırken yeni sürümleri devreye alır. Böylece kullanıcılar herhangi bir kesinti yaşamadan uygulamayı kullanmaya devam eder.
Kubernetes'in Temel Kavramları
Kubernetes öğrenmeye başladığınızda karşınıza çıkacak temel yapı taşları şunlardır:
- Pod: Kubernetes'teki en küçük dağıtım birimidir. Genellikle içerisinde tek bir Docker konteyneri bulunur. Ancak birlikte çalışması gereken birden fazla konteyner de aynı Pod içinde yer alabilir.
- Cluster (Küme): Kubernetes tarafından yönetilen tüm fiziksel veya sanal sunucuların oluşturduğu yapıya Cluster denir.
- Node: Cluster içerisindeki her bir fiziksel veya sanal sunucuya Node adı verilir.
- Control Plane (eski adıyla Master Node): Kümenin yönetiminden sorumludur.
- Worker Node: Pod'ların çalıştırıldığı sunuculardır.
- Deployment: Bir uygulamanın kaç kopya (Replica) ile çalışacağını, güncellemelerin nasıl yapılacağını ve Pod'ların nasıl yönetileceğini tanımlayan Kubernetes nesnesidir.
- Service: Pod'lar geçici yapılardır ve IP adresleri zamanla değişebilir. Service, bu Pod'lara küme içinden veya dış dünyadan sabit bir adres üzerinden erişilmesini sağlayan Kubernetes bileşenidir.
Herkes Kubernetes Kullanmalı mı?
Kubernetes son derece güçlü bir platformdur; ancak her proje için doğru tercih olmayabilir.
Eğer küçük veya orta ölçekli bir uygulamanız varsa ve tek bir VPS tüm ihtiyaçlarınızı karşılıyorsa, Kubernetes'in öğrenme eğrisi ve altyapı karmaşıklığı nedeniyle kullanılması aşırı mühendislik (over-engineering) olabilir.
Buna karşılık mikroservis mimarisine geçtiyseniz, birden fazla sunucu üzerinde yüksek erişilebilirliğe (High Availability - HA) sahip bir sistem kurmanız gerekiyorsa veya uygulamanız yoğun trafik dalgalanmalarıyla karşılaşıyorsa, Kubernetes sektör standardı hâline gelmiş güçlü bir çözümdür.
"Docker, uygulamalarınızı konteynerler içinde çalıştırmanızı sağlar. Kubernetes ise bu konteynerlerin büyük ölçekli ortamlarda güvenilir, ölçeklenebilir ve kesintisiz bir şekilde yönetilmesini sağlar."
Sonuç
Küçük projelerde Docker Compose çoğu zaman yeterliyken, uygulamanız büyüyüp birden fazla sunucu üzerinde çalışmaya başladığında Kubernetes sunduğu otomatik ölçekleme, yük dengeleme, kendi kendini iyileştirme ve kesintisiz güncelleme özellikleri sayesinde vazgeçilmez bir teknoloji hâline gelir.
Bu nedenle günümüzde Kubernetes, özellikle bulut tabanlı ve mikroservis mimarisine sahip uygulamalar geliştiren ekipler için en önemli araçlardan biri olarak kabul edilmektedir.