Kubernetes nedir sorusu, container dünyasında bir süre çalışan hemen herkesin karşısına çıkar ama cevabı çoğu zaman gereğinden karmaşık anlatılır. Sade haliyle: Kubernetes, çok sayıda container'ı birçok sunucu üzerinde otomatik olarak yerleştiren, ayakta tutan ve ölçekleyen bir orkestrasyon sistemidir. Tek bir container'ı çalıştırmak kolaydır; onlarca container'ı, birden fazla makinede, çökerse kendini toparlayacak biçimde yönetmek ise ayrı bir iştir. Kubernetes bu ikinci işi üstlenir.
Bu rehberde Kubernetes'in ne olduğunu, hangi sorunu çözdüğünü, Docker ile ilişkisini, ne zaman gerçekten gerekli olduğunu ve küçük bir ekip için ne zaman gereğinden ağır kaçtığını dürüst bir dille açıklıyoruz. Amaç, terimleri şişirmeden net bir karar zemini kurmak.
Kısaca: Kubernetes, container'ları birçok sunucudan oluşan bir küme üzerinde otomatik olarak dağıtan, çöken container'ları yeniden başlatan, yükü ölçekleyen ve ağ ile servis keşfini yöneten açık kaynaklı bir orkestrasyon sistemidir. Docker'ın rakibi değildir; Docker container üretir, Kubernetes bu container'ları büyük ölçekte yönetir. Küçük ekipler çoğu zaman bu karmaşıklığa ihtiyaç duymaz.
Kubernetes nedir?
Kubernetes (sık sık "K8s" olarak kısaltılır), container tabanlı uygulamaların dağıtımını, ölçeklenmesini ve yönetimini otomatikleştiren açık kaynaklı bir platformdur. Google'ın iç sistemlerinden doğmuş, bugün geniş bir topluluk tarafından geliştirilmektedir. Temel fikir, bir grup sunucuyu tek bir havuz gibi ele alıp, üzerinde çalışacak container'ların nereye yerleşeceğine sistemin kendisinin karar vermesidir.
Kubernetes, container'ları bir sunucu kümesi üzerinde otomatik yerleştiren, kendi kendini iyileştiren ve ölçekleyen bir orkestrasyon sistemidir. Hangi container'ın hangi makinede çalışacağına karar verir, çökenleri yeniden başlatır ve trafiği sağlıklı örneklere yönlendirir.
Kubernetes'in çözdüğü asıl sorun, ölçek ve dayanıklılıktır. Tek bir sunucuda birkaç container çalıştırırken elle yönetim yeterlidir. Ancak onlarca servis, yüzlerce container ve birden çok sunucu söz konusu olduğunda, hangisinin nerede çalışacağını, biri çökerse ne olacağını ve trafiğin nasıl dağıtılacağını elle takip etmek imkânsız hale gelir. Resmi tanım ve mimari için Kubernetes'in kendi dokümantasyonu başvurulabilir bir kaynaktır.
Kubernetes ne işe yarar?
Kubernetes'in sağladığı yetenekleri birkaç somut başlıkta toplayabiliriz. Bunlar, büyük ölçekli sistemlerin neden bu araca yöneldiğini açıklar.
- Otomatik yerleştirme (scheduling): Yeni bir container çalıştırmak istediğinizde, Kubernetes onu kümede kaynağı uygun olan bir sunucuya kendisi yerleştirir. Hangi makineye koyacağınızı siz düşünmezsiniz.
- Kendi kendini iyileştirme: Bir container çökerse Kubernetes onu otomatik olarak yeniden başlatır. Bir sunucu tamamen düşerse, üzerindeki container'ları sağlıklı sunuculara taşır.
- Ölçekleme: Yük arttığında bir servisin kaç kopyasının çalışacağını artırabilir, azaldığında düşürebilirsiniz. Yapılandırmayla bu süreç otomatikleştirilebilir.
- Servis keşfi ve yük dengeleme: Container'lar sürekli oluşup yok olurken bile, Kubernetes onlara kararlı bir adres verir ve gelen trafiği sağlıklı örnekler arasında dağıtır.
- Aşamalı güncelleme (rolling update): Yeni bir sürümü, hizmeti kesintiye uğratmadan container'ları kademeli değiştirerek yayına alır. Bir sorun çıkarsa geri alabilir.
Bu yetenekler güçlüdür ama bedelsiz değildir. Kubernetes'i kurmak, yapılandırmak ve işletmek başlı başına bir uzmanlık alanıdır.
Kubernetes ile Docker arasındaki ilişki
En yaygın kafa karışıklığı, Kubernetes ile Docker'ın rakip olduğunu sanmaktır. Oysa ikisi farklı katmanlarda çalışır ve çoğu zaman birlikte kullanılır.
Docker tek bir makinede container üretir ve çalıştırır. Kubernetes ise birçok makineden oluşan bir küme üzerinde bu container'ları orkestre eder. Biri container'ı oluşturur, diğeri onları büyük ölçekte yönetir; yani rakip değil, birbirini tamamlayan araçlardır.
Basitçe söylemek gerekirse Docker bir uygulamayı image haline getirir ve tek bir sunucuda container olarak çalıştırır. Kubernetes ise bu image'lardan üretilen container'ları onlarca sunucuya yayar, aralarındaki trafiği yönetir ve arızalara karşı ayakta tutar. "Kubernetes mi Docker mı" sorusu bu yüzden yanlış kurgulanmış bir sorudur; gerçek soru, tek bir hostun yeterli olup olmadığıdır.
Kafa karışıklığının bir kaynağı da geçmiş haberlerdir. Kubernetes bir dönem Docker'ın çalışma zamanı arayüzü olan "dockershim"i kaldırdı. Bu, "Kubernetes Docker'ı bıraktı" diye yorumlandı ama uygulamada Docker ile üretilen image'lar hâlâ sorunsuz çalışır çünkü bu image'lar standart bir biçime uyar. Konunun ayrıntısı için Kubernetes'in dockershim hakkındaki resmi açıklamasına bakabilirsiniz.
Kubernetes ne zaman gerekir, ne zaman aşırı kaçar?
Kubernetes'i benimseme kararı, ölçeğinize ve ekibinize bağlıdır. Onu değerli kılan koşullar bellidir, ama aynı ölçüde onu gereksiz kılan koşullar da vardır.
Kubernetes şu durumlarda mantıklıdır: çok sayıda birbirinden bağımsız servisiniz (mikroservisler) varsa, birden fazla sunucuya yayılmanız gerekiyorsa, trafiğiniz büyük dalgalanmalar gösteriyorsa ve bu altyapıyı işletecek özel bir ekibiniz varsa. Bu koşullarda sağladığı otomasyon, kurulum maliyetine değer.
Buna karşılık, küçük bir ekipseniz ve birkaç servisi yayına almak istiyorsanız Kubernetes çoğu zaman aşırı kaçar. Bir kümeyi kurmak, güvenli tutmak, güncellemek ve hata ayıklamak tam zamanlı bir uğraştır. İhtiyacınız aslında "container'ım deploy edilsin ve ayakta kalsın" ise, bu ihtiyacı bir küme yönetmeden karşılamanın yolları vardır.
| Ölçüt | Kubernetes | PaaS (yönetilen platform) |
|---|---|---|
| Kapsam | Çok sunuculu küme orkestrasyonu | Container'ı çalıştırıp ayakta tutma |
| İşleten kişi | Sizin ekibiniz (küme yönetimi) | Platform sizin yerinize |
| Öğrenme eğrisi | Dik, kavram yoğun | Düşük, hızlı başlangıç |
| Kontrol düzeyi | Çok yüksek, ince ayar | Orta, kasıtlı basitlik |
| En uygun kullanım | Büyük ölçek, çok servis, özel ekip | Küçük ve orta ekipler, hızlı yayın |
Küçük ekipler için pratik yol
Küçük bir ekibin çoğu ihtiyacı aslında Kubernetes'in tamamını gerektirmez. Container'ınızın çalışması, çökerse yeniden başlaması, bir adres üzerinden HTTPS ile yayınlanması ve veritabanına bağlanması yeterlidir. Bu ihtiyaçları, bir küme kurup işletmeden karşılamanın yolu bir PaaS kullanmaktır. Bu modelin ayrıntısını PaaS nedir yazısında bulabilirsiniz.
Out Plane bu orta yolu izler. Container image'ınızı çalıştırır, ayakta tutar, ağı ve sertifikaları yönetir ve yanına yönetilen bir PostgreSQL veritabanı koyabilir. Dürüst olmak gerekirse Out Plane tam bir orkestratör değildir; otomatik ölçekleme (autoscaling) sunmaz ve bir Kubernetes kümesinin küme-genelindeki gelişmiş yeteneklerini birebir karşılamaz. Bunun karşılığında, yönetilmesi gereken bir küme olmaz. Uygulamanızı yayına almanın ne anlama geldiğini deploy nedir yazımızda ele alıyoruz. İhtiyaçlarınız ileride gerçek anlamda küme ölçeğine büyürse, uygulamanız hâlâ standart bir container image olduğu için bir yere kilitlenmiş olmazsınız.
Sıkça Sorulan Sorular
Kubernetes tam olarak ne yapar?
Kubernetes, container'ları bir sunucu kümesi üzerinde otomatik yerleştirir, çökenleri yeniden başlatır, yükü ölçekler, trafiği sağlıklı örneklere dağıtır ve yeni sürümleri kesintisiz yayına alır. Kısacası, çok sayıda container'ı birçok makinede ayakta ve tutarlı tutma işini otomatikleştirir.
Kubernetes ile Docker rakip mi?
Hayır. Docker tek bir makinede container üretir ve çalıştırır; Kubernetes ise bu container'ları birçok makineden oluşan bir kümede orkestre eder. Farklı katmanlarda çalışırlar ve genellikle birlikte kullanılırlar. "Kubernetes mi Docker mı" sorusu yanlış kurgulanmıştır.
Küçük bir proje için Kubernetes gerekli mi?
Genellikle hayır. Birkaç servisi tek veya az sayıda sunucuda çalıştıran küçük ekipler için Kubernetes gereğinden ağırdır. Bir kümeyi kurmak ve işletmek başlı başına bir uğraştır. Container'ınızın deploy edilip ayakta kalması yeterliyse, bir PaaS bu ihtiyacı çok daha az karmaşıklıkla karşılar.
K8s ne anlama gelir?
K8s, "Kubernetes" kelimesinin kısaltmasıdır. Baştaki "K" ile sondaki "s" harfi arasında sekiz harf bulunduğu için bu sayısal kısaltma kullanılır. İkisi tamamen aynı şeyi ifade eder; K8s yalnızca yazımı kısaltan yaygın bir gelenektir.
Kubernetes ücretsiz mi?
Kubernetes'in kendisi açık kaynaklıdır ve ücretsizdir. Ancak onu çalıştırmak için sunuculara ihtiyacınız olur ve bu sunucuların bedeli vardır. Ayrıca kümeyi kurmak, güvenli tutmak ve işletmek için gereken uzmanlık zamanı da gerçek bir maliyettir. Yönetilen Kubernetes hizmetleri bu işletim yükünün bir kısmını devralır.
Kubernetes yerine ne kullanabilirim?
İhtiyacınız küme ölçeğinde orkestrasyon değil de container'larınızı basitçe yayına almaksa, bir PaaS iyi bir alternatiftir. Container image'ınızı alır, çalıştırır, ayakta tutar ve ağ ile HTTPS'i yönetir; siz bir küme yönetmezsiniz. Çok servisli, yüksek ölçekli senaryolarda ise Kubernetes hâlâ güçlü seçenektir.
Sonuç
Kubernetes nedir sorusunun özü şudur: container'ları birçok sunucu üzerinde otomatik yerleştiren, ayakta tutan ve ölçekleyen bir orkestrasyon sistemi. Docker'ın rakibi değil, tamamlayıcısıdır; biri container üretir, diğeri onları büyük ölçekte yönetir. Gücü tartışılmaz ama bu güç, kurulum ve işletim karmaşıklığıyla birlikte gelir.
Doğru soru, "Kubernetes'e ihtiyacım var mı" değil, "container'ımın yalnızca deploy edilip ayakta kalması mı yoksa küme ölçeğinde orkestrasyon mu gerekiyor" sorusudur. Çoğu küçük ekip için ilki yeterlidir. Container'ınızı bir küme yönetmeden yayına almak isterseniz, konsolda bir uygulama oluşturarak başlayabilir ve ücretsiz Hobby katmanını fiyatlandırma sayfasında inceleyebilirsiniz.