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.