Kubernetes (K8s) Nedir?
Çalışma Mantığı ve Temel Bileşenleri
Modern yazılım dünyasında uygulamalar artık tek bir sunucuda çalışan basit yapılar olmaktan çıkmıştır. Özellikle bulut teknolojilerinin ve mikroservis mimarisinin yaygınlaşmasıyla birlikte uygulamaların yönetimi daha karmaşık hale gelmiştir. İşte bu noktada Kubernetes devreye girer.
Kubernetes’in kelimesi Yunancadan gelir ve “dümenci (helmsman)” veya “pilot” anlamına gelir. Çoğu kaynakta Kubernetes’in “K8s” şeklinde yazıldığını görebilirsiniz. Bunun sebebi K ve S harfleri arasında 8 harf bulunmasıdır.
Kubernetes, Google tarafından GO dili ile geliştirilmiş, container tabanlı uygulamaları yönetmek için kullanılan açık kaynaklı bir platformdur.
Basitçe ifade etmek gerekirse:
- Docker uygulamayı paketler
- Kubernetes o uygulamayı yönetir
Kubernetes günümüzde özellikle mikroservis mimarisi kullanan, yüksek trafik alan ve ölçeklenebilir sistemler geliştiren şirketler için vazgeçilmez hale gelmiştir.
Neden Kubernetes Ortaya Çıktı?
Eskiden uygulamalar genellikle tek bir sunucuda çalışıyordu. Trafik arttığında ise sistemler yavaşlıyor veya tamamen çökebiliyordu. Ayrıca yeni sürüm geçişleri sırasında servis kesintileri yaşanabiliyordu.
Container teknolojilerinin yaygınlaşmasıyla birlikte uygulamalar daha taşınabilir hale geldi. Docker gibi teknolojiler sayesinde uygulamalar her ortamda aynı şekilde çalıştırılabiliyordu. Ancak sistem büyüdükçe yeni problemler ortaya çıktı:
- Uygulama kaç kopya çalışacak?
- Trafik artınca sistem nasıl büyüyecek?
- Çöken uygulamalar nasıl ayağa kaldırılacak?
- Güncelleme sırasında sistem nasıl kesintisiz çalışacak?
- Birden fazla sunucu nasıl yönetilecek?
Kubernetes tam olarak bu problemleri çözmek için geliştirildi.
Docker ve Kubernetes İlişkisi
Docker ve Kubernetes genellikle birlikte kullanılan teknolojilerdir ancak görevleri farklıdır.
Docker’ın temel amacı uygulamayı paketlemektir.
Örneğin bir FastAPI uygulamasını düşünelim:
- Python sürümü
- Kütüphaneler
- Nginx
- Uygulama kodu
bunların hepsi bir container içine konabilir.
Bu sayede uygulama:
```text
Benim bilgisayarımda çalışıyordu ama sunucuda çalışmıyor
```
problemini büyük ölçüde ortadan kaldırır.
Fakat Docker tek başına büyük sistemleri yönetmek için yeterli değildir. Çünkü:
- Trafik dağıtımı
- Otomatik ölçekleme
- Sunucular arası yönetim
- Self-healing
- Rolling update
gibi işlemler için ek yönetim gerekir.
İşte Kubernetes burada devreye girer.
Kubernetes Ne Sağlar?
Kubernetes birçok operasyonel işlemi otomatik hale getirir.
1. Auto Scaling
Kubernetes trafik arttığında uygulamadan yeni kopyalar oluşturabilir.
Örneğin:
```text
3 Pod çalışıyor
```
CPU kullanımı yükseldiğinde:
```text
3 Pod → 6 Pod
```
şeklinde otomatik ölçekleme yapılabilir.
Trafik düştüğünde ise Pod sayısı tekrar azaltılabilir.
Bu sayede:
- sistem çökmez
- kaynak kullanımı optimize edilir
2. Load Balancing
Kubernetes gelen kullanıcı isteklerini Pod’lar arasında dağıtır.
Örneğin:
```text
100 kullanıcı isteği geldi
```
Bu yük:
```text
Pod1 → 33 istek
Pod2 → 33 istek
Pod3 → 34 istek
```
şeklinde dağıtılabilir.
Böylece tek bir Pod aşırı yük altında kalmaz.
3. Self-Healing
Kubernetes çöken Pod’ları otomatik olarak yeniden oluşturabilir.
Örneğin:
```text
Pod çöktü ❌
```
Kubernetes bunu fark eder ve yeni bir Pod başlatır:
```text
Yeni Pod oluşturuldu ✅
```
Bu özellik sistemin daha stabil çalışmasını sağlar.
4. Rolling Update ve Rollback
Yeni sürüm yayınlarken sistemin tamamen kapanması istenmez.
Kubernetes yeni Pod’ları sırayla devreye alır:
```text
v1 v1 v1
↓
v2 v1 v1
↓
v2 v2 v1
↓
v2 v2 v2
```
Eğer yeni sürüm problemliyse eski sürüme geri dönülebilir.
Bu işleme rollback denir.
Trafik Artınca Kubernetes Ne Yapar?
Normalde:
1 adet uygulama çalışıyor
Ama trafik arttı:
10.000 kişi aynı anda bağlandı
Tek sunucu zorlanabilir.
Kubernetes şunu yapar:
Uygulamadan yeni kopyalar açar
Örneğin:
Pod 1
Pod 2
Pod 3
Pod 4
Sonra gelen kullanıcı isteklerini bunlara dağıtır:
Kullanıcılar
↓
Kubernetes Service
↓ ↓ ↓
Pod1 Pod2 Pod3
Buna Load Balancing denir.
🏗️ Kubernetes Cluster Yapısı
Kubernetes birden fazla sunucuyu tek bir sistem gibi yönetir. Bu yapıya cluster denir.
Örnek:
```text
Cluster
├── Sunucu 1
├── Sunucu 2
└── Sunucu 3
```
Bu sunucular:
- Master Node
- Worker Node
olarak ikiye ayrılır.

Master Node Nedir?
Master node Kubernetes’in beynidir.
Tüm yönetim işlemleri burada gerçekleştirilir.
Master node içinde temel bileşenler bulunur.
1. API Server
Kubernetes’in giriş noktasıdır.
Tüm komutlar önce API Server’a gider.
Örneğin:
```bash
kubectl apply -f app.yaml
```
komutu API Server tarafından karşılanır.
2. Scheduler
Yeni oluşturulan Pod’un hangi sunucuda çalışacağına karar verir.
Örnek:
Sunucu 1 dolu
Sunucu 2 boş
→ Yeni Pod Sunucu 2'ye yerleştirilir
3. Controller Manager
Cluster’ın istenen durumda kalmasını sağlar.
Örneğin:
3 Pod çalışmalıydı
1 Pod çöktü
Controller der ki:
Eksik Pod'u yeniden oluştur
4. Etcd
Kubernetes’in veritabanıdır.
Cluster ile ilgili bilgiler burada tutulur.
Örneğin:
- Pod bilgileri
- Servis bilgileri
- Replica sayıları
- Network ayarları
gibi kritik veriler etcd içinde saklanır.
Worker Node Nedir?
Worker node uygulamaların gerçekten çalıştığı sunuculardır.
Her worker node içinde bazı temel bileşenler bulunur.
1. Kubelet
Node üzerindeki Kubernetes ajanıdır.
API Server’dan gelen komutları uygular.
Örnek:
Yeni Pod oluştur
komutunu alır ve container’ı başlatır.
2. Kube-Proxy
Network işlemlerini yönetir.
Pod’lar arası iletişim ve load balancing işlemlerinde görev alır.
3. Container Engine
Docker gibi container yönetim sistemidir.
Image indirir ve container başlatır.
Pod Nedir?
Pod Kubernetes’in en küçük çalışma birimidir.
Bir Pod içinde bir veya daha fazla container bulunabilir.Örnek:
Pod
└── FastAPI Container
Kubernetes uygulamaları Pod olarak çalıştırır.
Pod’lar geçici yapılardır. Bir Pod silinirse Kubernetes aynı image’dan yeni Pod oluşturabilir.

Pod Çökerse Ne Olur?
Kubernetes Pod’un öldüğünü fark eder.
Sonra aynı image’dan yenisini oluşturur:
Pod öldü ❌
↓
Yeni Pod oluşturuldu ✅
Pod’lar kalıcı değildir. Kubernetes sürekli sistemi istenen durumda tutmaya çalışır.
Deployment Nedir?
Deployment uygulamanın nasıl çalışacağını tanımlar.
Deployment şunu söyler:
Bu uygulamadan kaç tane çalışsın?
Örnek:
replicas: 3
şu anlama gelir:
```text
Bu uygulamadan her zaman 3 tane çalışsın.
```
Sonuç:
Pod1
Pod2
Pod3
Eğer Pod’lardan biri çökerse Kubernetes tekrar 3’e tamamlar.
Service Nedir?
Pod’ların IP adresleri değişebilir.
Bu nedenle uygulamaların Pod IP’sine doğrudan bağlanması sağlıklı değildir.
Service burada sabit bir erişim noktası sağlar.
Örnek:
```text
Frontend
↓
backend-service
↓
Backend Pod’ları
```
Bu sayede Pod IP’si değişse bile sistem çalışmaya devam eder.
Ingress Nedir?
Ingress dış dünyadan gelen HTTP/HTTPS trafiğini yönlendirir.
Örnek:
proje.sirket.com
↓
Ingress
↓
Service
↓
Pod
Ingress, Nginx reverse proxy mantığına benzer şekilde çalışır.
Volume Nedir?
Pod’lar geçici yapılardır.
Eğer veri Pod içinde tutulursa Pod silindiğinde veri kaybolabilir.
Bu yüzden Kubernetes’te Volume kullanılır.
Örneğin:
- PostgreSQL verileri
- Upload edilen dosyalar
- Log dosyaları
Volume sayesinde kalıcı hale getirilebilir.
ConfigMap ve Secret
Kubernetes uygulama ayarlarını yönetmek için ConfigMap ve Secret yapıları sunar.
ConfigMap
Normal ayarlar:
APP_ENV=production
LOG_LEVEL=INFO
Secret
Şifre ve token gibi hassas bilgiler:
DB_PASSWORD=123456
JWT_SECRET=xyz
Kubernetes Çalışma Akışı
Kubernetes’in temel çalışma mantığı şöyledir:
1. Kullanıcı kubectl ile istek gönderir
2. API Server isteği alır
3. Etcd’ye kaydeder
4. Scheduler uygun node seçer
5. Kubelet container başlatır
6. Pod ayağa kalkar
7. Durum tekrar etcd’ye yazılır

Sonuç
Kubernetes modern yazılım dünyasının en güçlü teknolojilerinden biridir.
Özellikle:
mikroservis mimarisi,
yüksek trafik,
cloud sistemleri,
DevOps süreçleri
için vazgeçilmez hale gelmiştir.
Kısaca:
Docker → uygulamayı paketler
Kubernetes → uygulamayı yönetir
ve bunu:
otomatik ölçekleme,
yük dağıtma,
self-healing,
rolling update
gibi özelliklerle yapar.