Modern yazılım geliştirme dünyasında artık sadece kod yazma süreçlerine hakim olmak yeterli olmamaktadır . Uygulamanın hangi ortamda çalıştığı, nasıl ölçeklendiği, uygulamanın çökmesi ve diğer kaza durumlarında neler yapıldığını bilmek, kıdemli yazılımcılar için en az kodun kendisi kadar önemli olmaya başlamıştır. İşte bu noktada Kubernetes (K8s) denen bir icat giriyor. Peki nedir bu Kubernetes diye sorarsak container tabanlı uygulamaları deploy etmek, ölçeklemek ve yönetmek için kullanılan açık kaynaklı bir container orchestration platformudur diyebiliriz. Fakat bu kavramı anlatmakla bitiremiyoruz. Detaylarına girdiğimizde derya deniz bilgilerle karşılaşıyoruz. Bu yazımızda Kubernetes hakkında temel bilgilere giriş yaparak, ileriki yazılarda da detaylandırmayı planlıyoruz.

Kubernetes nasıl ortaya çıktı?


Bugün Kubernetes, cloud-native dünyasının merkezinde yer alıyor. Ancak bu noktaya bir anda gelinmedi. Kubernetes; Google’ın yıllara yayılan operasyonel tecrübesinin, Docker’ın yarattığı container devriminin ve modern yazılım ihtiyaçlarının birleşiminden doğdu.

Borg Nedir?

Borg için kubernetes'in atası diyebiliriz. Google’ın kendi veri merkezlerinde milyonlarca işi (job) yönetmek problem olmaya başlayınca kurum içi bir çözüm olarak Borg adında ürün ortaya çıkmıştır. Açık kaynaklı yayınlanmadan kurumun iç sistemi olarak kullanılmıştır.

Borg Ne Zaman Ortaya Çıktı?

2003 → Borg’un ilk versiyonları Google içinde kullanılmaya başlandı.

2005–2010 → Google Search, Gmail, YouTube gibi sistemlerin tamamı Borg üzerinde çalıştı.

2014 → Google, Borg deneyimini akademik bir makale ile kamuya açıkladı.

Google, Borg ile binlerce makine üzerinde iş dağıtımı, Otomatik scheduling, Self-healing, Kaynak optimizasyonu sorunlarını çözüyordu. Google, Borg ile Kubernetes çıkmadan 10 yıl önce Kubernetes’in problemlerini çözmüştü.

Docker’ın Ortaya Çıkışı - 2013

Bu noktada piyasaya önemli bir araç dahil oldu. Mart 2013 yılında Solomon Hykes tarafından The future of Linux containers” isimli sunumla ilk kez duyuruldu. Hepimizin bildiği gibi bu ürün Container’ı basit, taşınabilir ve tekrar üretilebilir hale getirdi.
Docker ile Benim bilgisayarımda çalışıyor problemi büyük ölçüde çözüldü. Image kavramı standartlaştı. Docker Hub yaygınlaştı. Microservice mimarileri hızla arttı.Çoklu container’ı yönetmek için Docker Compose ortaya çıktı. Herkes container üretmeye başladı. Ama büyük bir problem ortaya çıktı, Docker container’ı çalıştırıyordu ama 1000 tanesini yönetemiyordu.

Bu noktada ortaya Kubernetes çıktı, yönetim işini başarılı bir şekilde çözdü. Docker'ı Scheduling, Auto-scaling, Self-healing, Rolling update, Infrastructure bağımsızlığı ile docker'ı tamamladı.

Kubernetes'e geçmeden Docker bu sorun için 2015 yılında Docker Swarm ürününü ortaya çıkardı. Fakat bu ürün ekosistem oluşturamadı, scheduling konusunda yeterli olmadı.

2015 yılında CNCF (Cloud Native Computing Foundation) kuruldu ve Kubernetes CNCF’ye devredildi. (Bu kavramla ve KCNF sınavı ile ilgili detaylı bir yazı yazacağım.) Sonuç olarak Kubernetes container işletim sistemi olarak bir standart durumuna geldi.

Kubernetes Tam olarak ne işe yarıyor? Hangi sorunlara Çözüyor?


Kubernetes, container tabanlı uygulamaların dağıtık ortamlarda güvenilir, ölçeklenebilir ve sürdürülebilir şekilde çalıştırılmasını sağlamak için geliştirilmiş bir orkestrasyon platformudur. Uygulama yükü arttığında pod’ları otomatik olarak ölçekleyerek kaynak kullanımını optimize eder, container veya node seviyesindeki hataları algılayıp yeniden planlayarak sistemin istenen durumda kalmasını sağlar. Servisler arası trafiği dahili yük dengeleme mekanizmalarıyla yönetir, ortamlar arasında tutarlı konfigürasyon sunar ve deklaratif tanımlar aracılığıyla altyapının sürekli olarak hedeflenen durumla uyumlu olmasını garanti eder. Bu yaklaşım, modern dağıtık sistemlerin operasyonel karmaşıklığını önemli ölçüde azaltır.

Kubernetes’in Çözdüğü Temel Problemler


Trafik Artışı ve Ölçeklenme

Artan kullanıcı trafiği karşısında tek veya sınırlı sayıda çalışan uygulama instance’ı yetersiz kalabilir ve performans problemleri ortaya çıkar. Kubernetes, Horizontal Pod Autoscaler (HPA) mekanizmasıyla CPU, bellek veya tanımlı metriklere göre pod sayısını otomatik olarak artırıp azaltarak uygulamanın yük durumuna dinamik şekilde uyum sağlamasını mümkün kılar.

Container ve Uygulama Hataları

Uygulamalar çalışma sırasında bellek taşması, runtime hataları veya beklenmeyen durumlar nedeniyle durabilir. Kubernetes, pod ve container durumlarını sürekli izleyerek başarısız olan bileşenleri otomatik olarak yeniden başlatır. Liveness ve readiness probe’lar sayesinde sağlıksız pod’lar trafiğe kapatılır ve servis sürekliliği korunur.

Sunucu (Node) Kaybı

Fiziksel sunucu veya sanal makine seviyesindeki arızalar, geleneksel yapılarda tüm uygulamanın devre dışı kalmasına neden olabilir. Kubernetes, node sağlığını takip eder ve erişilemeyen node’lar üzerindeki pod’ları otomatik olarak diğer uygun node’lara yeniden planlayarak sistemin çalışmaya devam etmesini sağlar.

Servisler Arası Trafik Yönetimi

Pod’ların dinamik olarak oluşturulması ve silinmesi nedeniyle IP adresleri sabit değildir. Kubernetes, Service objeleri aracılığıyla pod’lara sabit erişim noktaları sunar ve dahili load balancing gerçekleştirir. Bu sayede servisler birbirine doğrudan pod adresleri yerine servis isimleri üzerinden güvenilir şekilde erişir.

Ortamlar Arası Konfigürasyon Tutarlılığı

Farklı ortamlar arasında konfigürasyonların manuel yönetilmesi tutarsızlıklara ve beklenmedik hatalara yol açabilir. Kubernetes, ConfigMap ve Secret yapılarıyla konfigürasyonları uygulama kodundan ayırır ve aynı container image’ın farklı ortamlarda güvenli ve tutarlı şekilde çalıştırılmasına olanak tanır.

Güncelleme ve Dağıtım Süreçleri

Yeni bir uygulama versiyonu yayınlanırken servis kesintisi yaşanması kullanıcı deneyimini olumsuz etkiler. Kubernetes, rolling update stratejileriyle pod’ları kademeli olarak günceller; yeni pod’lar hazır hale gelmeden eskileri kapatılmaz ve kesintisiz dağıtım sağlanır.

İstenen Durumun Sürekli Korunması

Dağıtık sistemlerde manuel müdahaleler veya beklenmeyen değişiklikler zamanla yapılandırmanın bozulmasına neden olabilir. Kubernetes, deklaratif yapı sayesinde tanımlanan istenen durum ile mevcut durumu sürekli karşılaştırır ve sapmalar oluştuğunda otomatik olarak düzeltir.

Yazılımcılar İçin Kubernetes Ne Kazandırır?


Kubernetes bilgisi, yazılımcıların DevOps ekiplerine olan bağımlılığını azaltırken aynı zamanda Cloud Native dünyayı doğru şekilde anlamalarını sağlar. Özellikle mikroservis mimarilerinde Kubernetes artık bir tercih değil, fiili bir zorunluluk haline gelmiştir. Bu da Kubernetes bilen geliştiricileri kariyer açısından belirgin şekilde öne çıkarır.

Kubernetes öğrenmek başta karmaşık gibi görünse de, yazılımcı bakış açısıyla yaklaşıldığında oldukça mantıklı ve güçlü bir sistemdir. Kubernetes hakkında detaylı bilgiyi kendi sitesindeki documentation sayfasından edinebilirsiniz.
https://kubernetes.io/docs/home/