Kubernetes nedir ve gerçekten ihtiyacınız var mı?
Kubernetes karmaşık olmakla ünlüdür ve bu ünü hak etmiştir. Ancak arkasındaki temel fikir basittir: Bir grup makine üzerinde çok sayıda container'ı güvenilir biçimde çalıştıran, çökenleri yeniden başlatan ve yükü sağlıklı olanlar arasında dağıtan bir sistemdir; üstelik bunların hiçbiri için bir insanın panele bakıp elle müdahale etmesi gerekmez.
Çözdüğü problem
Tek bir sunucudaki tek bir container'ı yönetmek kolaydır. Gerçek canlı trafik geldiği anda ise genellikle uygulamanızın birkaç kopyasının çalışması (hem kapasite için hem de bir sunucunun çökmesini atlatabilmek için), ayrıca bir veritabanı, bir önbellek, arka plan işçileri (worker) ve trafiği o an gerçekten sağlıklı olan kopyalara yönlendirecek bir yöntem gerekir. Bunu elle yapmak (sunucuya SSH ile bağlanmak, bir container'ın öldüğünü fark etmek, onu yeniden başlatmak, yük dengeleyicinin yapılandırmasını güncellemek) birkaç servisin ötesine ölçeklenmez ve bir makinenin çoktan düzeltmiş olması gereken bir şey yüzünden birinin gece üçte uyandırılacağını garanti eder.
Kubernetes bu işi devralır. İstediğiniz durumu tarif edersiniz (“Bu container'ın üç kopyasını farklı makinelere dağıtarak çalıştır ve hep böyle kalmasını sağla”) ve Kubernetes gerçekliği bu tarife uydurmak için kesintisiz çalışır. Bir sunucu mu çöktü? Üzerindeki container'ları başka bir yere yeniden yerleştirir. Bir container mı çöktü? Otomatik olarak yeniden başlatılır. Trafik mi arttı? Kendiliğinden yeni kopyalar ekleyecek şekilde yapılandırabilirsiniz.
Jargona boğulmadan temel parçalar
- Pod: Dağıtılabilen en küçük birim; genellikle tek bir container'dan (bazen sıkı biçimde birlikte çalışan birkaç container'dan) oluşur.
- Deployment: Bir pod'un kaç kopyasının çalışması gerektiğini ve güncellemelerin kesinti olmadan bu kopyalara nasıl yayılacağını tanımlar.
- Service: Altındaki pod'lar değiştirilse bile o an mevcut olan sağlıklı pod'lara yönlendirme yapan sabit bir ağ adresi.
- Node: Pod'ların üzerinde çalıştığı gerçek makine (fiziksel ya da sanal).
- Cluster: Kubernetes'in tek bir sistem olarak yönettiği node'ların tamamı.
Bunların altında Kubernetes; servis keşfini, yük dengelemeyi, kademeli dağıtımları (rolling deployment), başarısız sağlık kontrollerinde otomatik geri almayı ve gizli anahtar (secrets) yönetimini üstlenir. Bunlar, eskiden elle birbirine bağlanmış bir yığın ayrı araç gerektiren operasyonel tesisattır.
Dürüst cevap: İhtiyacınız var mı?
Kubernetes gerçek sorunları çözer, ama bunu gerçek bir karmaşıklık pahasına yapar: öğrenme eğrisi, operasyonel yük ve ekibinizin artık bilmek zorunda olduğu koca bir terminoloji. Öngörülebilir ve mütevazı trafiğe sahip bir iki servis çalıştırıyorsanız, daha basit bir kurulum (bir yük dengeleyicinin arkasında birkaç sunucu ya da orkestrasyonu tamamen gizleyen yönetilen bir platform) büyük olasılıkla işinizi daha iyi görür ve bakımı için çok daha az mühendislik zamanı harcatır.
Kubernetes'in karmaşıklığı genellikle şu durumlarda karşılığını verir: Bağımsız olarak ölçeklendirilip dağıtılması gereken çok sayıda servis çalıştırdığınızda, trafik otomatik ölçeklendirmenin gerçekten önem taşıyacağı kadar değişken olduğunda ya da bulut altyapısına zaten o kadar derinden girmiş olduğunuzda ki ekosistemi (ve onu zaten bilen geniş mühendis havuzu) öğrenme maliyetinden ağır basar. Bu noktaya gelmeden ona yönelmek, ekiplerin çalıştırması gereken ürünü geliştirmek yerine yalnızca cluster'ın kendisini sağlıklı tutmak için tam zamanlı bir işle baş başa kalmasının en yaygın yollarından biridir.
Makul bir yol
Pek çok başarılı ürün Kubernetes'e hiç dokunmaz; pek çoğu da çözdüğü operasyonel sıkıntı gerçekten ortaya çıktığında, bir iki yıl sonra onu benimser. İyi bilinen bir isim olduğu için baştan benimsemek yerine daha basit başlayıp Kubernetes'in çözdüğü sıkıntıyı somut olarak hissettiğinizde geçiş yapmak, genellikle daha düşük riskli sıralamadır.
Kubernetes'in doğru tercih olup olmadığı ya da önümüzdeki yıl için daha basit bir kurulumun daha iyi hizmet edip etmeyeceği, Burncode'da ekiplerle birlikte verdiğimiz türden bir altyapı kararıdır. Bu kararı, ekibin bir gün sahip olabileceği değil, bugün gerçekten sahip olduğu trafiğe ve ekip büyüklüğüne göre veririz.