top of page

Kubernetes’in Kalbini Anlamak: Bileşenler, Mimari ve kubectl apply Komutunun Arkasındaki Sihir

  • Yazarın fotoğrafı: emirhanaydin
    emirhanaydin
  • 1 gün önce
  • 3 dakikada okunur
ree

Modern yazılım artık tek bir sunucuda çalışan küçük uygulamalardan çok daha fazlası. Mikroservisler, yatay ölçeklenebilirlik, self-healing yani kendini onarma ve otomatik dağıtım gibi şeyler artık standart hale geldi. İşte tam da bu yüzden güçlü bir orkestrasyon platformuna ihtiyaç var ve Kubernetes tam burada devreye giriyor.

Bu dokümanda, Kubernetes’in temel bileşenlerini ve bunların nasıl birlikte çalıştığını adım adım anlatacağım. Amacım, konuyu derinlemesine ama anlaşılır şekilde aktarmak.


1. Kubernetes Mimarisi


Kubernetes aslında iki ana katmandan oluşuyor: Control Plane ve Worker Nodes.


Control Plane


Burası cluster’ın beyni. Tüm yönetim ve karar mekanizmaları burada çalışıyor.

  • API Server – Cluster ile tüm iletişimin merkezi

  • etcd – Cluster state’in tutulduğu dağıtık veritabanı

  • Scheduler – Pod’ları uygun node’lara yerleştiren akıllı motor

  • Controller Manager – Otomasyon ve self-healing işlemlerini yönetir

  • Cloud Controller Manager (opsiyonel) – Eğer bulut kullanıyorsan, bulut sağlayıcı entegrasyonu için


Worker Nodes

Burası uygulamaların çalıştığı makineler.

  • kubelet – Node’u yöneten ajan

  • Container Runtime – Container’ları çalıştıran motor (containerd veya CRI-O)

  • kube-proxy – Ağ trafiğini Pod’lara yönlendiren sistem

Bu bileşenler nasıl konuşur? Önemli kural: Hiçbir component birbirine direkt konuşmaz.Hepsi API Server üzerinden konuşur.


Scheduler → API ServerController Manager → API ServerKubelet → API Serverkubectl → API Server

API Server bir "trafik kontrol kulesi"dir.

2. Control Plane Bileşenleri


2.1 API Server (kube-apiserver)


API Server cluster’ın kapısı diyebiliriz. Buraya gelen her istek (kubectl, dashboard, controller’lar…) önce API Server üzerinden geçiyor.

Ne yapıyor?

  • Authentication: Kullanıcı kimliğini doğrular

  • Authorization: Yetkilerini kontrol eder

  • Admission Controllers: Gerekirse isteği değiştirir veya reddeder

  • Controller’lara watch event yollar

  • Etcd ile veri alışverişi yapar

  • Diğer bileşenlerle REST API üzerinden iletişim kurar

  • Scheduler ile Pod scheduling akışını yönetir

API Server’ın Request Pipeline’ı

ree


Tasarım notu: API Server stateless, yani cluster state’i kendisi tutmuyor, bunu etcd yapıyor. Ayrıca, istersen birden fazla API Server çalıştırabilirsin (horizontal scaling) ve tüm iletişim HTTP/JSON veya Protobuf üzerinden oluyor.


2.2 etcd – Cluster’ın Hafızası


Etcd, Kubernetes’in tüm cluster bilgisini saklayan dağıtık bir key-value store. Burada cluster’daki her şeyin kaydı tutuluyor.Etcd çok hassastır; IOPS ve latency çok kritiktir.


Neden etcd?

  • Strong consistency: Cluster state her zaman tutarlı

  • Watch/Notify: Değişiklikleri anında görebiliyorsun

  • Quorum bazlı yazma: N/2+1 node olmadan veri yazılamıyor, böylece split-brain olmuyor

  • Hafif ve performanslı

Raft algoritması kullanılıyor; leader seçiliyor, log replikasyonu yapılıyor ve consensus sağlanıyor.

Ne saklanıyor?

  • Pod ve Deployment bilgileri

  • Node bilgileri

  • ConfigMap ve Secret’lar

  • Replica sayıları

  • Service ve Cluster IP’leri

Özetle etcd, Kubernetes’in tek doğru bilgi kaynağı. Bozulursa cluster çalışmaz.

2.3 Scheduler – Pod’ları Node’lara Atayan Motor


Scheduler’ın 3 aşamalı algoritması vardır:

Filter CPU yeterli mi? Memory yeterli mi? Taints/tolerations uygun mu? Node affinity sağlanıyor mu?

Score Hangi node daha mantıklı?

Bind Pod’u seçilen node’a bağlar."Bunu şurada çalıştır" diye API Server’a yazar.

Scheduler asla pod yaratmaz.Sadece kime gideceğini seçer.


2.4 Controller Manager – Self-Healing ve Otomasyon


Her controller bir loop çalıştırır:

desired state → actual state karşılaştırması → farkı düzelt 

Deployment ControllerNode ControllerJob ControllerEndpoint ControllerNamespace Controller

Hepsi API Server’ı izler (watch).Bir değişiklik fark ederse aksiyon alır.


3. Worker Node Bileşenleri


3.1 kubelet


Görevleri:

  • PodSpec’i API Server’dan alır

  • Container runtime’a iletir

  • Health check yapar (Liveness, Readiness, Startup)

  • Volume mount eder

  • CNI ile network kurmasını sağlar

  • Node health bilgisini API Server’a gönderir

Kubelet çalışmazsa node pod çalıştıramaz.


3.2 Container Runtime


Kubernetes artık Docker’ı runtime olarak kullanmıyor, bunun yerine containerd veya CRI-O var.

  • Container image çekiyor (pull)

  • Container başlatıyor/durduruyor

  • Network ve filesystem izolasyonu sağlıyor

  • Process ve lifecycle yönetimi yapıyor


3.3 kube-proxy


  • Service trafiğini doğru Pod’lara yönlendiriyor

  • iptables veya ipvs kullanıyor

  • Load balancing ve Cluster IP yönlendirmesi sağlıyor


3.4 — CNI Plugin (Pod network’ü kurar)

Pod doğduğunda CNI şu işleri yapar:

  • Pod için network namespace yaratır

  • Pod’a IP verir

  • Routing kurar

  • Network policy uygular

Calico → en yaygın

Cilium → eBPF ile modern ve hızlı

Flannel → basit overlay

4. POD NASIL YARATILIR?


Bir örnek üzerinden anlatayım, kubectl apply -f nginx.yml dediğinde arka planda neler oluyor:


1. Adım — kubectl apply


Kubectl → API Server’a POST gönderir.


2. Adım — API Server Pipeline


  1. Auth

  2. RBAC

  3. Mutating Admission (örn: Istio sidecar ekler)

  4. Validating Admission

  5. Etcd’ye kayıt


ALTIN KURAL:Pod henüz hiçbir node’da değil.Sadece etcd’ye yazıldı.


3. Adım — Scheduler devreye girer

Scheduler API Server’ı izler.

Bir pod Pending ve nodeName boş → “Schedule edilmesi gerek”.


Scheduler:

  • Filtreler node’ları

  • Skorlar

  • Seçer

  • Binding işlemini API Server’a yazar


Pod artık bir node’a atanmıştır ama hala çalışmıyor.


4. Adım — Kubelet devreye girer


Node’daki kubelet API Server’ı izler:

“Bu Pod bana atanmış.”

Sonra:

  • PodSandbox (pause) yaratır

  • Network oluşturması için CNI plugin’i çağırır

  • Containerları başlatır

  • Health check’leri çalıştırır

Pod ilk defa Running olur.


5. Adım — Service / Kube-proxy / Network binding

Pod çalışınca:

  • Endpoints nesnesine eklenir

  • Kube-proxy iptables/ipvs entry’lerini günceller

  • Network policy uygulanır

Artık Pod cluster içinden erişilebilir.


POD ÖLÜMÜ & RECONCILE LOOP

Pod ölürse:

  • Kubelet “pod öldü” event’i yollar

  • Controller Manager bunu fark eder

  • Yeni pod yaratır

  • Scheduler tekrar atama yapar

Kubernetes’in sihri işte burada:Kimseye haber vermiyorsun.Sistem kendini hep düzeltiyor.



Yorumlar


bottom of page