Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

Kubernetes Nedir? Temel Kavramları Nelerdir?

Merhaba,

Günümüzde geliştirilen yazılımların, hızla değişen kullanıcı ihtiyaçlarına uyum sağlamak için esnek, taşınabilir ve ölçeklenebilir bir yapıya ihtiyaç duydukları aşikardır. Haliyle bizler bu içeriğimizde, modern uygulamaların otomatik olarak dağıtılmasını, ölçeklendirilmesini ve yönetilmesini sağlayan güçlü bir konteyner orkestrasyon platformu olan Kubernetes’i konu edinecek, modern yazılım mimarilerinde bir standart haline gelen bu teknolojinin, geliştiricilere karmaşık senaryoları nasıl daha verimli bir şekilde yönetme olanağı sunduğunu değerlendiriyor olacağız. O halde hiç vakit kaybetmeksizin, buyurun başlayalım…

Kubernetes Nedir?

Kubernetes, konteyner’lar için bir gemi kaptanı gibidir; konteyner’ları birden fazla bilgisayara (tıpkı konteyner taşıyan bir gemi gibi) organize ederek yerleştirir.

Kubernetes (kısaca K8s), konteyner tabanlı uygulamaların dağıtımı (deployment), ölçeklenmesi (scaling) ve yönetimi (management) için geliştirilmiş olan open source bir konteyner orkestrasyon platformudur. Başlangıçta Google tarafından geliştirilen Kubernetes, bugün Cloud Native Computing Foundation (CNCF) tarafından yönetilmektedir.

Kubernetes için konteyner’larınızı nasıl? nerede? ne zaman? ve kaç tane? çalıştırmanız gerektiğini sizin yerinize belirleyen akıllı bir yönetim katmanı olduğunu söyleyebiliriz.

Neden K8s deniyor?
‘Kubernetes’ kelimesinde ‘K2 ve ‘s’ harfleri arasında 8 harf vardır. Bu yüzden geliştiriciler zamanla kısaltma olarak ‘K8s’ ifadesini benimsemişlerdir. Bu tarz kelimenin ortasındaki harflerin sayıyla temsil edildiği kısaltmalara ‘numeronym’ denmektedir. Örneğin; ‘i18n’ kısaltmasının ‘internationalization’a, ‘l10n’ kısaltmasının ‘localization’a ve ‘a11y’ kısaltmasının ise ‘accessbility’e karşılık gelmesi gibi…

Docker Neyimize Yetmedi de Kubernetes Kullanmamız Gerekti?

Evet…

Haklı olarak insanın aklına bu soru gelmektedir. Öncelikle şunu bilmekte fayda vardır ki, Kubernetes, Docker’ı tamamlamak için ortaya çıkmış bir teknolojidir. Docker, uygulamaları konteyner içinde izole ederek, ‘her yerde aynı şekilde çalıştırma’ sorununa karşı muazzam bir çözüm sağlamıştır ve biz geliştiriciler açısından ‘benim makinemde çalışıyor ama sunucuda bozuluyor’ problemini tarihe karıştırmıştır.

Evet…

Docker tek bir uygulamanın konteyner’leştirilmesi ve çalıştırılması için mükemmeldi… Ancak yazılım dünyası burada durmadı ve daha radikal ihtiyaçlar ön plana çıkmaya başladı. Misal olarak, modern sistemlerde artık bir uygulamadan ziyade 50-100 mikroservis mevcudiyet göstermiştir ve her biri farklı Docker container‘ı olarak çalıştırılmaktadır. Bu ahvalde aşağıdaki minvalde sorular kaçınılmaz olarak gündeme gelmiştir;

  • Bu kadar çok koneyner’i kim yönetecek?
  • Hangi konteyner nerede çalışıyor, nasıl ölçeklenecek?
  • Bir konteyner çökünce, kim yeniden başlatacak?
  • Trafiği nasıl dengede tutacağız?
  • Yeni versiyonları nasıl ‘kesintisiz’ geçireceğiz?
  • vs..

Ne yazık ki Docker bu sorulara tek başına yanıt veremedi ve günün orkestrasyon ihtiyacına karşın, işte tam da bu noktada Kubernetes çözüm olarak sahnede varlık gösterdi.

Kubernetes, Docker konteyner’lerini yönetmek için geliştirilmiş bir orkestrasyon (yönetim ve otomasyon) katmanıdır. Docker ile yapılan birçok işleme ekstradan değer katarak onun işlevselliğini geliştirmiş ve Docker’ın üzerine bir organizasyon katmanı eklemiştir.

Şöyle ki;

  • Çoklu konteyner yönetiminde, Docker ile manuel başlatma ve durdurma söz konusuyken, Kubernetes ile otomatik deploy ve denetim davranışı kazandırılmıştır.
  • Load balancing açısından ise Docker’da harici araçlara ihtiyaç duyulurken, Kubernetes’de dahili bir servis yönlendirme özelliği geliştirilmiştir.
  • En önemlisi de Docker’da ölçeklendirme yokken, Kubernetes’de trafiğe göre kapsamlı bir otomatik ölçeklendirme (Auto-scaling) davranışı bizlere eşlik etmektedir.

Bunların dışında, Docker’da çöken konteyner’lar fark edilmezken, Kubernetes’de yeniden başlatılabilmekte veya başka node’a taşıma işlemi gerçekleştirilebilmektedir. Docker’da servisler arası iletişim manuel IP yönetimi üzerinden seyrederken, Kubernetes’de DNS tabanlı service discovery desteklenmektedir. Ayrıca sürüm geçişleri ve deployment süreçleri Docker’da manuelken, Kubernetes’de otomatiktir.

Docker konteyner’leri ‘tek tek askerler’ ise, Kubernetes ‘onları yöneten ordu komutanı’dır.

Esasında burada önemle vurgulanması gereken kritik nokta şudur ki; Kubernetes, Docker’ı değil, Docker konteyner’larını yönetmektedir. Yani Kubernetes, konteyner’lerinizi başlatmak için hala Docker runtime’ı (veya containerd, CRI-O gibi alternatifleri) kullanabilmektedir. Dolayısıyla Docker, uygulamayı paketleyip, konteyner’a yerleştirmekten ve çalıştırmaktan sorumluyken, Kubernetes ise yönetme ve orkestrasyondan sorumludur.

Haliyle buradan anlıyoruz ki, Docker olmadan uygulama konteyner’leştirilemez! Kubernetes olmadan ise o konteyner’ler ölçekli, güvenli, sürdürülebilir bir biçimde yönetilemez!

Kubernetes’in Microservice Mimarisindeki Rolü Nedir?

Kubernetes Nedir? Temel Kavramları Nelerdir?Biliyorsunuz ki microservice mimarisinde, her servis bağımsız bir birim olarak geliştirilir, dağıtılır ve ölçeklenir. Ancak hak vereceğiniz üzere bu bağımsızlık, zamanla yönetimsel karmaşıklığı artırmaktadır. Kubernetes tam da bu noktada devreye girmekte ve özellikle aşağıdaki şartlarda ciddi avantajlar sağlamaktadır;

  • Service Discovery ve Load Balancing
    Her microservice’in kendi IP’si ve portu mevcuttur. Kubernetes, servislerin birbirlerini keşfedebilmesi için Service ve DNS üzerinde yönlendirmeler sağlamaktadır.
  • Self-Healing (Kendini İyileştirme)
    Kubernetes, bir Pod (konteyner grubu) çöktüğünde onu otomatik olarak yeniden başlatabilmekte ve gerektiğinde deploy edebilmektedir.
  • Auto-Scaling
    Trafik arttığında otomatik bir şekilde yeni Pod’lar oluşturulur ve benzer mantıkla azaldığında da kaynaklar küçültülür.
  • Configuration & Secret Management
    Uygulama yapılandırmaları, secret key’leri ve environment variable’ları Kubernetes merkezi olarak yönetebilir.
Kubernetes Terminolojileri Nelerdir?

Kubernetes’i tam anlayabilmek ve çalışma mantığını kavrayabilmek için terminolojik kavramlarına tam hakim olunması gerekmektedir. Şimdi bizler kritik olan bu kavramları aşağıda madde madde özetleyelim;

  • Pod
    En küçük dağıtım birimidir. Genellikle tek bir konteyner barındırsa da, aynı ağı ve depolamayı paylaşarak birlikte çalışma sergileyen birden fazla konteyner’da barındırabilir. Bir Pod içindeki konteyner’ler aralarında kolayca iletişim kurabilmektedirler.

    Pod için Kubernetes’in ‘uygulama düzeyi’ bileşenidir diyebiliriz…

  • Node
    Kubernetes Cluster’ında bulunan ve uygulamaları çalıştıran fiziksel ya da sanal bir makinedir. Her node, container runtime (Docker gibi), Kubelet (agent’tır kendisi) ve Kube proxy (ağ iletişimi) dahil olmak üzere Pod’ları çalıştırmak için gereken araçları içermektedir.

    • Kubelet : Node üzerinde Pod’ların Kubernetes tanımlarına uygun çalıştığını denetlemekten sorumlu bir agent’tır.
    • Kube-proxy : Ağ yönlendirmelerini ve load balancing’i yönetmektedir.
    • Container Runtime (Docker, containerd, CRI-I) : Pod içindeki konteyner’leri çalıştırır.

    Node, uygulamayı değil, uygulamayı çalıştıracak ortamı yönetmektedir…

  • Cluster
    Kubernetes’in yönettiği tüm kaynakların oluşturduğu yapıdır. Bir başka deyişle, konteynerleştirilmiş uygulamaları çalıştırmak için birlikte çalışan Node’ların bulunduğu bir gruptur. Bu Node’lar, gerçek makineler olabileceği gibi sanal makineler de olabilir.

    Kubernetes Cluster’ında iki tür Node vardır:

    • Master Node (Control Plane)
      • Bunu cluster’ın beyni olarak düşünebilirsiniz.
      • Uygulamanın nerede çalıştırılacağı gibi kararlar almakta, planlamayı yönetmekte ve her şeyi takip etmektedir. Yani tüm orkestrasyon buradan yönetilmektedir.
      • Master node karar verir lakin uygulamaz! Uygulama işi Worker Node’lara aittir.
    • Worker Nodes
      • Cluster’ın kas gücüdür 🙂
      • Uygulamaların (yani Pod’ların) gerçek anlamda çalıştığı yerlerdir.
      • Worker Node’lara uygulamalarınızı konteyner’lerin içinde çalıştıran makinelerdir diyebiliriz.
      • Her çalışan Node’un bir Kubelet (agent), bir container runtime (Docker veya containerd gibi), ağ oluşturma ve izleme araçları vardır.

Cluster, Kubernetes’in ‘evreni’; Node’lar, bu evrendeki ‘gezegenler’dir. Pod’lar ise bu gezegenlerde yaşayan ‘uygarlıklar’dır diyebiliriz.

Bir Kubernetes Cluster’ında state management iç dinamikler açısından esastır diyebiliriz. Bu sistem ‘deklaratif’ şekilde çalışma sergilemektedir. Şöyle ki;

  • Sen ‘bu uygulamadan 5 kopya çalışsın’ dersin.
  • Kubernetes bunu desired state (istenen durum) olarak kaydeder ve actual state (gerçek durum) ile sürekli karşılaştırır.
  • Eğer bir Pod çökerse, Controller Manager hemen yeni bir tane yaratır.
  • Bu davranışa Self-Healing denir.

Node, Kubernetes Cluster’ındaki üzerinde Pod’ların çalıştığı fiziksel veya sanal makinedir. Pod ise Node üzerinde çalışan bir veya birden fazla konteyner’ın mantıksal gurubudur. Bu açıdan bakıldığında Node’un bir ‘çalışma ortamı’, Pod’un ise bu ortamda ‘çalışan uygulamalar’ olduğunu söyleyebiliriz.

İlişkisel olarak her Pod’un mutlaka bir Node üzerinde çalıştığını, ayrıca her Node’un birden fazla Pod barındırabileceğini de söylemekte fayda görmekteyim.

Cluster ➡️ Node ➡️ Pod (n) ➡️ Container (n)

Kubernetes Nedir Temel Kavramları Nelerdir

  • Deployment
    Uygulamaların yaşam döngüsünü (lifecycle) ve sürüm yönetimini otomatik hale getirmektedir.
  • ReplicaSet
    Scale işleminin bir mekanizmasıdır ama scale özelliğinin kendisi değildir! Yani Replication, Kubernetes’in bir davranışıdır; ReplicaSet ise bu davranışı gerçekleştiren denetleyicidir.

    ReplicaSet, belirli bir Pod’un istenen sayıda kopyasının her zaman çalıştığından emin olan Kubernetes nesnesidir.

    Yani şunu yapar: ‘Sen 3 tane webapp Pod’u istedin mi? Ben 3 tane çalıştığından emin olacağım. Eğer biri ölürse, yenisini Kubernetes Controller Manager’a yarattıracağım!’

    Böylece ReplicaSet, scale işleminin altyapısını oluşturmaktadır.

  • Service
    Service, Kubernetes’te bir grup Pod’a tek bir ağ kimliği (IP ve DNS adı) atayan soyutlama katmanıdır. Pod’lar gelip giderken (yeniden başlatılır, ölür, yeniden oluşturulur), Service onların arkasında sabit bir endpoint sağlar.

    Service, bir Pod’un tüm instance’ları üzerinde erişim politikası uygulayan bir yapıdır.

  • Ingress
    Kubernetes Cluster’ındaki servislere dış erişimi yönetmenin bir yoludur. Servislere gelen HTTP/HTTPS yönlendirmelerini sağlayarak ters proxy görevini yürütmektedir.
  • ConfigMap
    Uygulama konfigürasyon ayarlarını Pod’lardan bağımsız olarak yönetmektedir. Gerçek kodu değiştirmeksizin runtime’da yapılandırma değişikliklerine imkan tanımaktadır.
  • Secret
    Parola, API Key vs. gibi hassas bilgileri saklamaktadır.
  • Persistent Volume (PV)
    Kubernetes Cluster’ında veri depolamak için kullanabileceğimiz bir depolama alanıdır ve bir Pod kaldırıldığında veya yeniden başlatıldığında silinmemektedir.
  • Kubelet
    Her Worker Node’da Pod’ların beklediği gibi çalışmasını sağlayan bir Kubelet agent’ı çalışmaktadır.
  • Kube-proxy
    Cluster içindeki ağı yöneterek farklı Pod’ların kendi aralarında iletişim kurabilmesini sağlamaktadır.
Kubernetes Nasıl Kurulur?

Docker Desktop uygulaması, Kubernetes Cluster’ı tek Node’lu (single-node) olacak şekilde destelemektedir. Bunun için yapılması gereken Docker Desktop’ın kurulması ve Kubernetes özelliğinin aşağıdaki gibi aktif edilmesidir.Kubernetes Nedir? Temel Kavramları Nelerdir?

Nihai olarak;

Kubernetes, modern yazılım dünyasında cloud-native ekosistemlerin temel taşı olan bir yapılanmaya sahiptir. Microservice yapılarının ‘distributed’ doğasına düzen getirerek; ölçeklenebilirlik, esneklik ve sürdürülebilirlik sağlamaktadır. Haliyle Kubernetes, microservice’lerin nerede? ve nasıl? çalışacağını yöneten akıllı bir otomasyon katmanı sunmaktadır.

Bizler bu içeriğimizde Kubernetes’i temel seviyede tanımış ve değerlendirmiş bulunmaktayız. Konuya dair sonraki içeriğimizde Kubernetes’in mimarisini masaya yatıracak ve teorik temelleri biraz daha derinleştiriyor olacağız. O halde sonraki yazımızda görüşmek üzere diyerek, keyifli okumalar diliyorum… 🌹

İlgilenenlerin faydalanması dileğiyle…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

3 Cevaplar

  1. Atilla Ozan Kavcu dedi ki:

    Emeğinize sağlık Gencay hocam

  2. Ercan Ozturk dedi ki:

    Güzel bir yazi olmuş. Anlatim dilinizi beğeniyorum. Örneklendirmeler bir cocugun anlayacagı şekilde. Teşekkürler

  1. 23 Ekim 2025

    […] içeriğimizde, bir önceki Kubernetes Nedir? Temel Kavramları Nelerdir? başlıklı makalemizde konu edindiğimiz Kubernetes teknolojisinin mimarisel yapısını […]

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir