Kubernetes Nedir?
Kısa tanım
Kubernetes (K8s), container'lara paketlenmiş uygulamaları birden çok sunucudan oluşan bir küme (cluster) üzerinde dağıtan, ölçekleyen ve ayakta tutan açık kaynak bir orkestrasyon platformudur. Geliştirici uygulamanın kaç kopyayla, hangi imajla ve hangi kaynaklarla çalışacağını bildirimsel olarak tanımlar; Kubernetes gerçek durumu sürekli bu tanımla karşılaştırır, çöken container'ları yeniden başlatır ve trafiği sağlıklı kopyalara yönlendirir.
Diğer adları: K8s, Kube, Container Orkestrasyonu, Container Orchestration

Orkestrasyon neyi çözer?
Tek bir sunucuda birkaç container çalıştırmak için Docker Compose yeterlidir. Sorular, container'lar onlarca sunucuya yayıldığında başlar: Yeni bir kopya hangi makineye konacak? Bir sunucu çöktüğünde üzerindeki uygulamalar nereye taşınacak? Yeni sürüm, kullanıcılar kesinti yaşamadan nasıl devreye alınacak? Kubernetes bu sorulara cevap veren bir orkestrasyon platformudur. Google'ın iç sistemlerinden edinilen deneyimle geliştirilmiş, bugün Cloud Native Computing Foundation (CNCF) çatısı altında açık kaynak olarak sürdürülmektedir.
İstenen durum ve kontrol döngüsü
Kubernetes'te komut vermek yerine durum tarif edilir: “Bu imajdan üç kopya çalışsın, her biri en fazla 512 MB bellek kullansın.” Bu tanım YAML dosyalarıyla kümeye gönderilir. Kümedeki denetleyiciler (controller) sürekli olarak gerçek durumu bu tanımla karşılaştırır ve fark gördüklerinde düzeltir. Bir container çökerse yerine yenisi açılır; bir sunucu kaybolursa üzerindeki kopyalar başka sunuculara yerleştirilir. Bu döngüye reconciliation (uzlaştırma) denir ve Kubernetes'in “kendi kendini onarma” özelliğinin temelidir.
Üç temel nesne: Pod, Deployment, Service
- Pod: Kubernetes'in dağıtabildiği en küçük birimdir. Aynı ağı ve depolamayı paylaşan bir veya birkaç container içerir; çoğu pod tek container'lıdır. Pod'lar geçicidir: silinebilir, yeniden oluşturulabilir ve her seferinde farklı bir IP adresi alabilir.
- Deployment: Pod'lar genellikle doğrudan değil, bir Deployment aracılığıyla oluşturulur. Deployment kaç kopya istendiğini ve hangi imajın kullanılacağını tutar; imaj değiştiğinde eski pod'ları varsayılan olarak kademeli (rolling update) biçimde yenileriyle değiştirir.
- Service: Sürekli değişen pod'ların önüne sabit bir ad ve adres koyar. Diğer uygulamalar pod'ları değil, Service'i çağırır; Service trafiği o an sağlıklı olan pod'lara dağıtır.
Bunların yanında yapılandırma için ConfigMap, gizli bilgiler için Secret, dış dünyadan gelen HTTP trafiğini yönetmek için Ingress veya Gateway API gibi nesneler kullanılır.
Küçük bir manifest
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: registry.example.com/web:1.4.0
ports:
- containerPort: 3000
readinessProbe:
httpGet:
path: /health
port: 3000
---
apiVersion: v1
kind: Service
metadata:
name: web
spec:
selector:
app: web
ports:
- port: 80
targetPort: 3000kubectl apply -f web.yaml ile gönderilen bu tanım üç pod başlatır. readinessProbe, /health adresi başarılı yanıt vermeyen bir pod'a trafik gönderilmesini engeller. İmaj etiketi 1.4.1 yapılıp dosya tekrar uygulandığında Deployment, hazır olan yeni pod'lar geldikçe eskileri kapatır.
Kubernetes ne zaman fazla gelir?
Kubernetes'in gücü, beraberinde ciddi bir işletme yükü getirir. Küme sürümlerinin düzenli güncellenmesi, ağ eklentileri, erişim yetkileri (RBAC), log ve metrik toplama, sertifika yönetimi ve tüm bunları bilen bir ekip gerekir. AWS, Google Cloud ve Azure'un yönetilen Kubernetes servisleri kontrol düzlemini üstlenir; ancak uygulama tarafındaki yapılandırma ve izleme yine sizde kalır.
Tek bir web uygulaması ve bir veritabanından oluşan, trafiği tek sunucuya sığan bir proje için bu yük çoğu zaman kazançtan büyüktür. Böyle durumlarda Compose ile yönetilen bir VPS, bir PaaS veya serverless platform daha sade bir çözümdür. Kubernetes; çok sayıda servisin, farklı ekiplerin ve değişken trafiğin bir arada olduğu, mikroservis mimarisiyle çalışan ve ölçeklenebilirlik ile yüksek erişilebilirliğin somut bir ihtiyaç olduğu sistemlerde anlam kazanır.

