Kubernetes nedir? En kısa haliyle: container'larınızı (konteynerlarınızı) birden fazla sunucu üzerinde otomatik olarak çalıştıran, ölçeklendiren ve ayakta tutan açık kaynak bir platform. Kısaca K8s diye de yazılıyor; K ile s arasında 8 harf olduğu için. Bu yazıda Kubernetes'in ne işe yaradığını, temel kavramlarını ve gerçekten ihtiyacınız olup olmadığını teknik jargona boğmadan anlatmaya çalıştık.
Kubernetes Ne İşe Yarar?
Diyelim ki uygulamanızı Docker ile container haline getirdiniz. Tek sunucuda bir iki container çalıştırmak kolay. Ama iş büyüyünce sorular başlıyor: Container çökerse kim yeniden başlatacak? Trafik artınca kopya sayısını kim artıracak? Yeni sürümü kesinti olmadan nasıl yayına alacağız? Sunuculardan biri giderse içindeki container'lar ne olacak?
Kubernetes tam olarak bu işleri üstleniyor. Siz ona "bu uygulamadan her zaman 3 kopya çalışsın" diyorsunuz, o da bunu sağlamak için sürekli çalışıyor. Bir kopya çökerse yenisini başlatıyor, bir sunucu giderse container'ları diğer sunuculara taşıyor. Herşey sizin tarif ettiğiniz "olması gereken duruma" göre otomatik yönetiliyor.
Biraz tarihçe: Kubernetes, Google'ın kendi içinde yıllarca kullandığı Borg sisteminden edindiği tecrübeyle geliştirildi, 2014'te açık kaynak olarak yayınlandı ve bugün Cloud Native Computing Foundation (CNCF) çatısı altında geliştiriliyor. İsmi Yunanca'da "dümenci" anlamına geliyor, logosundaki gemi dümeni de buradan.
Kubernetes'in Temel Kavramları
Kubernetes ilk bakışta çok fazla yeni kelimeyle geliyor. En sık karşılaşacaklarınızı bir tabloda topladık:
| Kavram | Ne demek? |
|---|---|
| Cluster | Kubernetes'in yönettiği sunucuların tamamı. |
| Node | Cluster'daki tek bir sunucu (fiziksel veya sanal). |
| Control Plane | Cluster'ın beyni; neyin nerede çalışacağına karar verir, durumu takip eder. |
| Pod | Kubernetes'teki en küçük birim; bir veya birkaç container'ı birlikte çalıştırır. |
| Deployment | Bir uygulamanın kaç kopya çalışacağını ve nasıl güncelleneceğini tanımlar. |
| Service | Pod'lara sabit bir adres verir, trafiği aralarında dağıtır. |
| Ingress | Dışarıdan gelen HTTP/HTTPS trafiğini alan adına göre doğru servise yönlendirir. |
| Namespace | Cluster'ı mantıksal bölümlere ayırır (ör. test ve prod). |
| ConfigMap / Secret | Ayarları ve şifre gibi gizli bilgileri uygulamadan ayrı tutar. |
| PersistentVolume | Pod silinse bile kaybolmayan kalıcı disk alanı (veritabanları için). |
Kubernetes Nasıl Çalışır?
Kubernetes'in mantığı "istenen durum" (desired state) üzerine kurulu. Siz YAML dosyalarıyla ne istediğinizi yazıyorsunuz, örneğin şöyle bir deployment:
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: nginx:1.27
ports:
- containerPort: 80
Bu dosyayı kubectl apply -f web.yaml ile cluster'a verdiğinizde Control Plane işe koyuluyor: uygun node'ları seçiyor, 3 pod başlatıyor ve sonra sürekli kontrol ediyor. Gerçek durum istenen durumdan saparsa (bir pod çöktü, bir node kapandı) farkı kendisi kapatıyor. Sizin "şunu başlat, bunu yeniden başlat" diye uğraşmanıza gerek kalmıyor.
Docker ile Kubernetes Arasındaki Fark
En çok karıştırılan konulardan biri bu. Aslında ikisi rakip değil, birlikte çalışıyorlar:
| Docker | Kubernetes | |
|---|---|---|
| Ne yapar? | Container oluşturur ve çalıştırır | Çok sayıda container'ı birden fazla sunucuda yönetir |
| Ölçek | Genelde tek sunucu | Birden fazla sunucu (cluster) |
| Çöken container | Restart politikasıyla sınırlı | Otomatik yeniden başlatır, gerekirse başka node'a taşır |
| Ölçeklendirme | Manuel | Otomatik (HPA ile yüke göre) |
| Güncelleme | Manuel | Kesintisiz kademeli güncelleme (rolling update), geri alma |
| Öğrenme eğrisi | Kolay | Daha dik |
Yani Docker ile container imajlarınızı hazırlıyorsunuz, Kubernetes ile o imajları üretimde yönetiyorsunuz.
Kubernetes, Docker Compose ve Docker Swarm Karşılaştırması
| Docker Compose | Docker Swarm | Kubernetes | |
|---|---|---|---|
| Kullanım alanı | Tek sunucu, geliştirme ve küçük projeler | Küçük–orta cluster'lar | Küçükten çok büyüğe her ölçek |
| Kurulum zorluğu | Çok kolay | Kolay | Orta–zor (hazır kurulumla kolay) |
| Otomatik ölçeklendirme | Yok | Sınırlı | Var |
| Kendi kendini iyileştirme | Sınırlı | Var | Var, gelişmiş |
| Ekosistem | Küçük | Küçük, durağan | Çok geniş (Helm, ArgoCD, Prometheus...) |
| Kimler için | Geliştirici, tek sunuculu uygulama | Basit dağıtık yapı isteyenler | Mikroservis, büyüyen ekipler, üretim ortamları |
Kubernetes'in Avantajları ve Dezavantajları
Avantajları
- Kendi kendini iyileştirme: Çöken pod'lar otomatik yeniden başlatılır.
- Otomatik ölçeklendirme: Yük artınca kopya sayısı artar, azalınca düşer.
- Kesintisiz güncelleme: Yeni sürüm kademeli yayına alınır, sorun olursa tek komutla geri alınır.
- Taşınabilirlik: Aynı YAML dosyaları kendi sunucunuzda da, farklı bir sağlayıcıda da çalışır.
- Dev ekosistem: Helm, ArgoCD, Prometheus, cert-manager gibi araçlarla hemen herşeyin hazır bir çözümü var.
Dezavantajları
- Öğrenme eğrisi: Kavram sayısı fazla, ilk haftalar yorucu olabilir.
- Kurulum ve bakım: Sıfırdan cluster kurmak, sertifikaları ve sürüm yükseltmelerini yönetmek emek ister.
- Küçük projeler için fazla gelebilir: Tek bir web sitesi için Kubernetes kurmak, sinek avlamak için top kullanmak gibi olabilir.
Kubernetes'e Ne Zaman Geçmeli?
Kubernetes muhtemelen size göre, eğer:
- Birden fazla servisten oluşan (mikroservis) bir uygulamanız varsa,
- Trafiğiniz dalgalı ve otomatik ölçeklendirmeye ihtiyaç duyuyorsanız,
- Sık sık yeni sürüm çıkıyor ve kesintisiz dağıtım istiyorsanız,
- CI/CD ve GitOps ile süreçlerinizi otomatikleştirmek istiyorsanız.
Tek bir WordPress sitesi yada küçük bir API için ise genelde Docker Compose ile çalışan bir Docker hazır sanal sunucu fazlasıyla yeterli olur.
Kubernetes'i Nerede Çalıştırabilirsiniz?
| Kendin kur (self-managed) | Büyük bulutlarda yönetilen Kubernetes | Single node Kubernetes server | |
|---|---|---|---|
| Kurulum | Sizde (kubeadm, k3s, RKE2...) | Sağlayıcıda | Hazır teslim |
| Maliyet | Sunucu maliyeti + emek | Control plane + worker + trafik ücretleri | Sabit aylık ücret |
| Yüksek erişilebilirlik | Kurguya bağlı | Var | Yok (tek sunucu) |
| Kimler için | Deneyimli ekipler | Büyük ve kritik iş yükleri | Öğrenme, test, staging, küçük–orta prod |
Kubernetes'i öğrenmek ya da test/staging ortamı kurmak istiyorsanız en hızlı yol hazır bir cluster ile başlamak. VECDC Kubernetes Server paketleri Kubernetes ön kurulu geliyor, aylık $6'dan başlıyor ve otomatik kurulum sayesinde yaklaşık 5 dakikada kubeconfig dosyanız elinizde oluyor. Çok node'lu, üretime hazır bir cluster lazımsa Kubernetes danışmanlık ekibimizle birlikte kurgulayabiliriz.
İlk Adımlar: Birkaç Temel kubectl Komutu
Cluster'a bağlandıktan sonra en çok kullanacağınız komutlar şunlar:
kubectl get nodes # cluster'daki node'ları listeler
kubectl get pods -A # tüm namespace'lerdeki pod'lar
kubectl apply -f web.yaml # YAML dosyasındaki kaynakları oluşturur/günceller
kubectl logs deploy/web # uygulamanın loglarını gösterir
kubectl scale deploy/web --replicas=5 # kopya sayısını 5'e çıkarır
kubectl rollout undo deploy/web # son güncellemeyi geri alır
Sık Sorulan Sorular
Kubernetes ücretsiz mi?
Evet, Kubernetes açık kaynak ve ücretsizdir. Ödediğiniz para, Kubernetes'i çalıştıracağınız sunuculara ve varsa yönetilen hizmet ücretlerine gider.
Kubernetes öğrenmek için Docker bilmek gerekir mi?
Şart değil ama çok yardımcı olur. Container mantığını ve Dockerfile yazmayı bilmek, Kubernetes kavramlarını çok daha hızlı oturtmanızı sağlar.
Kubernetes tek bir sunucuda çalışır mı?
Evet. Single node kurulumda control plane ve worker aynı sunucuda çalışır. Öğrenme, test, staging ve küçük–orta ölçekli iş yükleri için ekonomik bir seçenektir; ancak tek sunucu olduğu için donanım seviyesinde yüksek erişilebilirlik sağlamaz.
K8s ne demek?
K8s, Kubernetes kelimesinin kısaltmasıdır: K ile s arasındaki 8 harf yerine 8 rakamı yazılır.
Kısacası
Kubernetes, container'larınızı birden fazla sunucuda otomatik çalıştıran, ölçeklendiren ve ayakta tutan bir platform. Öğrenmesi biraz zaman alıyor ama büyüyen projelerde operasyon yükünü ciddi şekilde azaltıyor. İşin güzel yanı, başlamak için büyük bir altyapıya ihtiyacınız yok; tek bir sunucuda bile öğrenmeye başlayabilirsiniz. Aklınıza takılan birşey olursa bize yazın.