Herkesin Anlayacağı Dille Kubernetes

Kubernetes Nedir?

Teknoloji dünyasında sıkça duyduğumuz bir kelime var: Kubernetes.
Ama çoğu kişi için hâlâ karmaşık, teknik ve soyut bir kavram gibi duruyor.
Bu yazıda, “hiç bilmeyene anlatır gibi” en temelden başlayarak Kubernetes’i, container’ları, Docker ilişkisini, ölçekleme, ortam, on-prem ve DBA (Database Administrator) açısından önemini sade bir dille anlatacağız.


Kubernetes’i Kısaca Özetleyelim

Kubernetes, bir sürü container’ı (küçük, taşınabilir uygulama kutularını) otomatik olarak yöneten bir sistemdir.

Yani sistemin kendi kendine:

  • Uygulamaları başlatır,
  • Çökeni yeniden ayağa kaldırır,
  • Trafik artınca yenilerini açar,
  • Güncellerken sistemi durdurmaz.

Bir bakıma Kubernetes, uygulama dünyasının akıllı yöneticisidir.

“E tamam da kardeşim container dediğin şey ne , ben onu da bilmiyorum ki…” diyorsan kesinlikle doğru yerdesin çünkü ben de konuyu ilk araştırırken bu kadar temelden başlamıştım. Bu yüzden senin için container kavramını da hemen açıklıyorum.


Container Nedir? Fiziksel Bir Şey Mi?

Hayır, container tamamen yazılımsal bir şeydir.

Bir uygulamanın çalışması için gereken her şeyi (kütüphaneler, sürümler, ayarlar vb.) yanına alarak tek bir kutuya koyar. Bu kutu (container), taşınabilir bir mini bilgisayar gibidir.
İstersen kendi bilgisayarında, istersen bulutta aynı şekilde çalışır.

Container’ları oluşturmak için genelde Docker kullanılır.
Kubernetes ise bu Docker “kutularını” yöneten ve düzenleyen akıllı sistemdir.

Docker: Uygulamayı paketler.
Kubernetes: Paketleri yönetir, ölçekler ve dağıtır.


🍔 Restoran Benzetmesiyle Kubernetes

Bir restoran zincirin olduğunu düşün. Her şuben bir sunucu, garsonlar ise uygulamanın çalışan kopyaları.
Müşteri artınca müdür daha fazla garson çağırıyor, biri hastalanınca yerine yenisini getiriyor, yeni menü geldiğinde eskiyi kaldırmadan geçiş yapıyor.

İşte Kubernetes bu müdür gibi çalışır :
Her şeyi düzenler, kontrol eder, otomatikleştirir.


Kubernetes Arayüz mü, Kod mu?

Kubernetes bir “program” değildir; bir yönetim sistemidir.
Arayüzü vardır ama asıl gücü komutlardan gelir.

  1. Komut Satırı (CLI):
    kubectl get pods, kubectl apply -f deployment.yaml gibi komutlarla sistem yönetilir.
  2. YAML Dosyaları:
    Uygulamanın nasıl çalışacağını tarif eden küçük metin dosyalarıdır.
    Kaç kopya çalışacak, hangi port kullanılacak gibi bilgileri içerir.
  3. Arayüz (Dashboard):
    Görsel araçlar (örneğin Kubernetes Dashboard veya Lens) mevcuttur ama arkada yine aynı komutlar çalışır.

⚙️ Kubernetes ve Docker İlişkisi

Docker container oluşturur , Kubernetes ise bu container yapılarını yönetir. Yani Kubernetes tek başına yeterli değildir, çünkü altında Docker (veya benzeri bir motor) çalışır.

Şöyle düşün :

Diyelim ki senin bir restoran zincirin var:

  • Her şehirde bir şube (sunucu) var.
  • Her şubede çalışan garsonlar (uygulamalar) var.
  • Bazen müşteri sayısı artıyor, bazen azalıyor.
  • Bazı şubelerde garsonlar fazla, bazılarında az.
  • Bazen bir garson hastalanıyor (uygulama çöküyor).

Şimdi sen bu restoran zincirini tek tek elle yönetmek yerine, bir yönetici robot istiyorsun. İşte Kubernetes o robotun ta kendisi !

Ne yapıyor bu robot?

  1. Garsonları (container’ları) otomatik başlatıyor.
    → Yani uygulamanı çalıştırıyor.
  2. Garsonlardan biri ölürse yerine yenisini atıyor.
    → Uygulama çökse bile sistem ayakta kalıyor.
  3. Müşteri sayısına göre garson sayısını ayarlıyor.
    → Trafik artarsa yeni uygulama kopyaları açıyor, azalınca kapatıyor. (auto-scaling)
  4. Garsonları uygun şubelere dağıtıyor.
    → Yani hangi sunucuda hangi container çalışsın, bunu otomatik belirliyor. (load balancing)
  5. Yeni yemek menüsünü (uygulama güncellemesi) risksiz yayıyor.
    → Yeni versiyonunu denerken eskisini de bir süre açık tutuyor (rolling update).

1. Container’ları oluşturan araç: Docker

Docker aslında bir “inşaat işçisi” gibi:

  • Sen ona diyorsun ki: “Şu uygulamayı şu bağımlılıklarla birlikte bir kutuya koy.”
  • O da bir container (kutu) oluşturuyor.
    Bu kutunun içinde:
  • Uygulama (örneğin Node.js veya Java programın),
  • Gerekli kütüphaneler,
  • Bağımlılıklar bulunuyor.

Yani Docker = Uygulamayı paketleyen sistem.

2. Bu container’ları yöneten akıllı sistem: Kubernetes

Şimdi senin onlarca hatta yüzlerce container’ın olduğunu düşün.
Bunların:

  • Hangi sunucuda çalışacağını,
  • Ne zaman kapanıp açılacağını,
  • Kaç kopya olacağını,
  • Trafiği nasıl dengeleyeceğini,
  • Güncelleme sırasında kesinti olmamasını

manuel olarak yapmak imkânsız olurdu.

İşte burada Kubernetes devreye giriyor:

“Docker’la oluşturduğun bu kutuları (container’ları) ben yönetirim, otomatikleştiririm, ölçeklendiririm.”

Konunun başında ölçekleme işlevi olduğunu da söylemiştik , şimdi bir de bu ölçeklemenin ne olduğuna bakalım istiyorum.


Ölçekleme Nedir ?

1. En basit tanımıyla:

Ölçekleme = Sistemin yüküne göre kapasitesini artırmak veya azaltmaktır.

Yani:

“Sisteme daha çok kullanıcı gelirse, sistem kendi kendine güçlensin.
Kullanıcı azalırsa, gereksiz kaynakları kapatsın.”


🍔 2. Günlük hayat örneğiyle:

Bir hamburger dükkanın var diyelim:

  • Normalde 2 kişi çalışıyor.
  • Akşam 6 olunca müşteri akını başlıyor
    → O zaman 4 kişi çalışıyor.
  • Gece 12’den sonra müşteri yok,
    → 1 kişi kalıyor.

İşte bu ölçeklemedir:

İhtiyaca göre çalışan (kaynak) sayısını artırmak veya azaltmak.


3. Yazılım dünyasında nasıl oluyor?

Senin sisteminde (örneğin bir web uygulaması veya veritabanı) diyelim ki normalde 100 kişi aynı anda işlem yapıyor.
Ama kampanya zamanı birden 10.000 kişi girdi.

Eğer sistem sabit kalırsa, CPU ve RAM patlar 💥
İşte burada Kubernetes devreye girer:

“Yoğunluk arttı, hemen 5 tane daha container açayım.”
(Yani uygulamanın 5 kopyasını aynı anda çalıştırır.)

Trafik azalınca da:

“Artık gerek yok, 2 tanesini kapatayım.”

Bu sayede sistem her zaman dengede çalışır.


4. Otomatik ölçekleme (Auto-scaling)

Bu işi sürekli manuel yapmak zor olacağı için Kubernetes kendi kendine karar verir.
Örneğin:

  • CPU kullanımı %80’in üstüne çıkarsa → yeni Pod aç.
  • %30’un altına inerse → bir Pod’u kapat.

Bu sayede sistem kendini izler ve optimize eder.


🔒 5. Veritabanı tarafında ölçekleme

Veritabanlarında ölçekleme biraz daha karmaşıktır çünkü veri tek bir yerde tutulur.
Ama Kubernetes üzerinde şunlar yapılabilir:

  • Read Replica (okuma yükünü dağıtmak için),
  • Clustered DB yapıları (örneğin PostgreSQL Patroni),
  • Storage ölçeklemesi (daha fazla disk kapasitesi ekleme).

Özetle:

Ölçekleme = Sistemin trafiğe göre akıllıca büyüyüp küçülmesi.
Kubernetes bunu otomatik yapabildiği için, sistemler
“yüksek trafikte çökmeyen, az trafikte de kaynak israf etmeyen” hale gelir.


Peki bu sistemi kullanırken para harcaman gerekiyor mu ?

  • İlk olarak Google tarafından geliştirildi (2014 civarı).
  • Şu anda Cloud Native Computing Foundation (CNCF) tarafından yönetiliyor.
  • Kodları GitHub’da herkese açık (https://github.com/kubernetes/kubernetes).

Yani “tamamen open-source” bir sistem; dileyen herkes:

  • Kaynak koduna bakabilir,
  • Katkı verebilir,
  • Ücretsiz kurup kullanabilir.

Peki nerede “para” devreye giriyor?

Kubernetes’in kendisi ücretsizdir ama:

Onu nerede ve nasıl çalıştırdığına göre altyapı maliyeti oluşabilir.

Yani örnekle:

  • Eğer kendi bilgisayarına veya şirket sunucusuna kurarsan → tamamen bedava.
  • Ama bulut sağlayıcılarda (AWS, Azure, Google Cloud vs.) Kubernetes kullanırsan,
    o zaman altyapı kaynakları (CPU, RAM, disk, network) için ücret ödersin.

Yani ücret Kubernetes’e değil, üzerinde koştuğu bulut makinelerine gider.

Ücretli “yönetilen” Kubernetes hizmetleri

Bazı firmalar “Kubernetes’i ben senin yerine kurayım, güncelleyeyim, yedekleyeyim” diyor.
Bunlar ücretlidir ama işin kolaylaşır :

Ama tekrar söylüyorum:

Kubernetes yazılımı ücretsizdir.
Sadece “nerede” çalıştırdığına göre altyapı parası ödersin.

Artık Kubernetes’in “container taşır, ortamdan ortama geçirir” kısmını anladın —
şimdi “ortam” dediğimiz şeyin ne olduğunu somut, hayatla birebir örneklerle açıklayalım.


“Ortam” ne demek?

Yazılım dünyasında “ortam” (environment) kelimesi,
uygulamanın nerede ve hangi şartlarda çalıştığını ifade eder.

Yani “ortam” = çalıştığı yer + o yerin koşulları.

1. Restoran örneğiyle (çok basit düşünelim)

Bir hamburger zincirin var:

  • Evde deneme mutfağın var (orada tarif geliştiriyorsun),
  • Test mutfağın var (yeni garsonlara öğretiyorsun),
  • Gerçek restoran var (müşterilere servis veriyorsun).

Her yerin aynı hamburger tarifini kullanmasını istiyorsun.
Ama:

  • Evde kullandığın malzemeler farklı olabilir,
  • Test mutfağında ocaklar başka marka olabilir,
  • Restoranda yoğunluk daha fazladır.

İşte bu her biri farklı ortam.
Senin amacın:

“Hamburger her ortamda aynı lezzette çıksın.”

2. Yazılım dünyasında ortam örnekleri

Bir yazılım (örneğin PostgreSQL kullanan bir web uygulaması) genelde şu ortamlardan geçer:

3. Container ve Kubernetes burada ne işe yarıyor?

Eskiden bu ortamlara taşırken şöyle problemler oluyordu:

“Benim bilgisayarımda çalışıyor ama sizin sunucuda hata veriyor!”

Çünkü her ortamda:

  • İşletim sistemi farklı,
  • Kütüphane versiyonları farklı,
  • Ayarlar farklıydı.

Ama şimdi container sayesinde:

“Ben uygulamayı kendi kutuma koydum, içinde her şey var.
İster laptop’ta çalıştır, ister bulutta, ister şirketin test sunucusunda — hep aynı sonuç.”

Yani ortam değişse bile container’ın içi değişmez.
Bu yüzden taşınabilir olur.
Kubernetes de bu container’ların o ortamlara sorunsuz geçmesini sağlar.

4. Gerçek hayat örnekleri

Bu sefer de tabloda gördüğün on-prem ortamın ne olduğunu merak etmiş olabilirsin çünkü ben konuyu araştırırken böyle düşünmüştüm.


“On-prem” ne demek?

On-premises” kelimesinin kısaltmasıdır.
Türkçesiyle “şirketin kendi yerinde, kendi makinelerinde çalışan sistem” demektir.

Yani bulutta değil, şirketin fiziksel veri merkezinde (server odasında) duran gerçek donanımlar üzerinde kurulu sistemlerdir.

On-prem ortamda:

  • Sunucular fiziksel olarak şirkette bulunur.
  • Ağ altyapısı, yedekleme, güvenlik duvarı, enerji, bakım hepsi şirkete aittir.
  • Yazılımlar (örneğin SQL Server, PostgreSQL, Kubernetes, vs.) bu sunuculara manuel olarak kurulur.

Kısaca:

“Sunucu benim, işletim sistemi benim, veri benim, bakım da benim.”

☁️ Cloud (Bulut) ortamla farkı:

Aslında Kubernetes adı altındaki bu yazımı okuyarak birçok farklı alanda bilgi sahibi olmuş oldun , seni tebrik ediyorum.

Sonraki yazılarımda görüşmek üzere , kendine çok iyi bak.

Yazar : Nedim Akıl

Linkedin : https://www.linkedin.com/in/ndmakl/


Leave a Reply

Your email address will not be published. Required fields are marked *