Docker ve Kubernetes

Kubernetes Nedir? Pod, Deployment ve Cluster Yapısı

Kubernetes, konteynerlerde çalışan uygulamaların birden fazla sunucuda çalışmasını ve istenen durumda kalmasını sağlar. Pod, node, deployment ve service kavramları, platformun temel çalışma modelini oluşturur.

Cloud Teknik Editörlüğü · 8 dk okuma
Bir veri merkezinde ağ kablolarıyla birbirine bağlanmış sunucu rafları ve yanan durum ışıkları.
Bu yazıda neler var?
  1. Kubernetes Ne İşe Yarar?
  2. Kubernetes Nasıl Çalışır?
  3. Cluster, Control Plane ve Node Yapısı
  4. Pod Nedir ve Nasıl Kullanılır?
  5. Deployment Ne Yapar?
  6. Docker ve Kubernetes Arasındaki Fark
  7. Kubernetes Hangi Durumlarda Kullanılır?
  8. Sık Yapılan Kubernetes Hataları ve Çözümleri
  9. Kubernetes Sürümü ve Başlangıç Kararı

Kubernetes, konteynerlerde çalışan uygulamaları sunucular arasında dağıtan, yöneten ve ölçeklendiren açık kaynaklı bir platformdur. Örneğin uygulamanızın 3 kopyasını istediğinizde Kubernetes bu kopyaları çalıştırır, çöken bir kopyanın yerine yenisini başlatır ve trafiği uygun hedeflere yönlendirir.

Kubernetes Ne İşe Yarar?

Kubernetes, uygulamanın nasıl çalışması gerektiğini tanımlamanızı sağlar. Siz hedef durumu belirtirsiniz; platform da bu durumu korumak için gerekli işlemleri yürütür. Bu model, tek tek sunuculara bağlanıp komut çalıştırma ihtiyacını azaltır.

Bir web uygulaması için 3 pod, her pod için 512 MiB bellek ve 250 millicore işlemci isteyebilirsiniz. Podlardan biri durduğunda Kubernetes yeni bir pod başlatır. Trafik alan uygulamalarda replica sayısını artırarak kapasiteyi yükseltebilirsiniz.

  • Uygulamaları bir veya daha fazla sunucuya dağıtır.
  • Çalışmayan podları yeniden oluşturur.
  • İstenen replica sayısını korur.
  • Servisler için sabit ağ erişimi sağlar.
  • Depolama birimlerini podlarla ilişkilendirir.
  • Yeni sürümlerde kademeli güncelleme yapar.

Kubernetes otomasyonu, uygulama çalıştırma sürecinin tamamını kendiliğinden çözmez. Konteyner imajı, kaynak sınırları, ağ kuralları ve kalıcı depolama gibi ayrıntıları sizin tanımlamanız gerekir. Bu nedenle yapılandırma dosyalarının sürüm kontrolünde tutulması işletim sürecini kolaylaştırır.

Kubernetes Nasıl Çalışır?

Kubernetes, bildirime dayalı bir çalışma modeli kullanır. YAML dosyasında uygulamanın hedef durumunu tanımlarsınız. Kubernetes API'si bu tanımı alır ve cluster içindeki mevcut durumla karşılaştırır.

Mevcut durum hedef durumdan farklıysa ilgili denetleyiciler işlem başlatır. 3 replica istenirken 2 pod çalışıyorsa yeni bir pod oluşturulur. 4 pod çalışıyorsa fazlalık pod sonlandırılır. Bu kontrol döngüleri, cluster çalıştığı sürece durumu takip eder.

  1. Uygulama imajını bir container registry'ye gönderin.
  2. Deployment içinde imajı ve replica sayısını tanımlayın.
  3. Yapılandırmayı Kubernetes API'sine uygulayın.
  4. Scheduler, pod için uygun node'u seçsin.
  5. Kubelet, container runtime üzerinden container'ı başlatsın.
  6. Service ve ilgili ağ bileşenleri trafiği podlara iletsin.

Bir podun IP adresi değişebileceği için doğrudan pod adresine bağlanmayın. Bunun yerine Service kullanın. Service, pod grubuna sabit bir erişim noktası sağlar ve uygun podlara trafik yönlendirir.

Cluster, Control Plane ve Node Yapısı

Cluster, Kubernetes tarafından birlikte yönetilen kaynak grubudur. İki ana bölümden oluşur: control plane ve worker node'lar. Control plane kararları yönetir; node'lar ise uygulama podlarını çalıştırır.

BileşenGöreviPratik örnek
API serverKubernetes isteklerini kabul eder.Deployment tanımını alır.
etcdCluster durumunu saklar.Replica sayısını ve ayarları tutar.
SchedulerPod için uygun node'u seçer.Kaynakları yeterli node'u belirler.
Controller managerHedef ve mevcut durumu eşleştirir.Eksik podu yeniden oluşturur.
KubeletNode üzerindeki podları çalıştırır.Container runtime'a komut verir.
Container runtimeContainer yaşam döngüsünü yönetir.containerd veya CRI-O kullanır.

Control plane bileşenleri tek bir node üzerinde bulunabilir. Üretim ortamlarında yüksek erişilebilirlik için birden fazla control plane örneği kullanılabilir. Node üzerindeki kubelet, pod tanımını izler ve beklenen container'ların çalışmasını sağlar.

Node seçimi yalnızca boş işlemci miktarına göre yapılmaz. Taints, tolerations, node selector ve affinity kuralları da yerleştirmeyi etkiler. Örneğin yalnızca SSD depolama bulunan node'lara pod yerleştirmek için etiket ve seçim kuralları tanımlayabilirsiniz.

Pod Nedir ve Nasıl Kullanılır?

Pod, Kubernetes'in çalıştırılabilir en küçük birimidir. Bir pod içinde 1 veya daha fazla container bulunabilir. Aynı poddaki container'lar ağ alanını ve tanımlanan depolama birimlerini paylaşır.

Veri merkezindeki sunucu yanında, ortak ağ ve depolama kullanan iki container'lı bir pod gösterimi
Pod içindeki container'lar ağ ve depolama kaynaklarını paylaşabilir.

Basit bir web uygulamasında çoğu zaman bir pod içinde tek container bulunur. Yardımcı bir log veya proxy container'ı ana uygulamayla aynı yaşam döngüsünü paylaşacaksa ikinci container eklenebilir. Birbirinden bağımsız çalışan iki uygulamayı aynı podda toplamak doğru yerleşim değildir.

  • Ağ: Aynı poddaki container'lar localhost üzerinden iletişim kurabilir.
  • Depolama: Ortak volume tanımıyla aynı dosya alanına erişebilirler.
  • Yaşam döngüsü: Pod içindeki container'lar aynı node üzerinde başlar.
  • Ölçekleme: Uygulama kapasitesi pod kopyaları artırılarak yükseltilir.

Pod IP'si kalıcı bir adres değildir. Pod silinip yeniden oluşturulduğunda yeni bir IP alabilir. Bu nedenle dış istemcileri pod IP'sine bağlamayın; Service, Ingress veya uygun bir Gateway katmanı kullanın.

İpucu: Pod kaynaklarını tanımlarken requests ve limits değerlerini birlikte yazın. Örneğin 250 millicore CPU isteği ve 512 MiB bellek limiti, scheduler ile çalışma zamanının farklı beklentiler oluşturmasını önler.

Deployment Ne Yapar?

Deployment, stateless uygulamalar için pod kopyalarını ve sürüm geçişlerini yönetir. Siz imajı, replica sayısını ve güncelleme stratejisini tanımlarsınız. Deployment, bu hedefi korumak için ReplicaSet oluşturur.

Deployment içinde 3 replica tanımlandığında ReplicaSet üç podun çalışmasını sağlar. İmaj etiketini yeni sürüme çevirdiğinizde Kubernetes podları kontrollü biçimde yeniler. Güncelleme sırasında eski ve yeni podların birlikte çalışacağı süreyi rolling update ayarlarıyla belirleyebilirsiniz.

  1. Deployment YAML dosyasında mevcut imajı belirtin.
  2. Replica sayısını ve kaynak taleplerini tanımlayın.
  3. Yeni imaj etiketini yayınlayın.
  4. Deployment durumunu ve pod sağlığını izleyin.
  5. Sorun varsa önceki revision'a geri dönün.

Deployment, kalıcı verisi olmayan web sunucuları ve API'ler için uygundur. Veritabanı gibi kimlik ve depolama düzeni gerektiren uygulamalarda StatefulSet daha doğru bir model olabilir. DaemonSet ise her uygun node üzerinde bir pod çalıştırmak için kullanılır.

Docker ve Kubernetes Arasındaki Fark

Docker, container imajı oluşturma ve container çalıştırma araçlarını sunar. Kubernetes ise çok sayıda container'ı, podu ve bunların çalıştığı node'ları bir cluster içinde yönetir. Bu iki teknoloji aynı katmanda yer almaz.

Tek bir container çalıştıran bilgisayarın yanında, container'ları birden fazla sunucuya dağıtan cluster
Docker container çalıştırır; Kubernetes bunları cluster genelinde yönetir.
ÖzellikDockerKubernetes
Ana amaçİmaj oluşturmak ve container çalıştırmakContainer tabanlı uygulamaları cluster genelinde yönetmek
ÖlçeklemeTek sunucuda manuel veya sınırlı otomasyonReplica, node ve servis düzeyinde yönetim
İyileştirmeContainer başlatma ve durdurmaYeniden başlatma, yerleştirme ve sürüm geçişi
AğHost ve Docker ağlarıPod, Service ve cluster ağı
Çalışma ortamıTek makine veya sınırlı grupBirden fazla node'dan oluşan cluster

Kubernetes podları çalıştırmak için doğrudan Docker Engine'e bağlı değildir. Kubernetes, container runtime olarak containerd veya CRI-O gibi CRI uyumlu araçları kullanabilir. Docker ile hazırladığınız imajlar, uyumlu bir registry üzerinden Kubernetes ortamında çalıştırılabilir.

Tek sunucuda birkaç container çalıştırmak için Docker Compose yeterli olabilir. Birden fazla node, otomatik iyileştirme, servis keşfi ve kontrollü sürüm geçişi gerekiyorsa Kubernetes daha uygun bir yönetim katmanı sunar.

Kubernetes Hangi Durumlarda Kullanılır?

Kubernetes, uygulamanın birden fazla makinede çalışması veya çalışma durumunun otomatik izlenmesi gerektiğinde anlam kazanır. Ekipler aynı dağıtım yöntemini geliştirme, test ve üretim ortamlarında kullanabilir.

  • Bir API'nin 3 veya daha fazla replica ile çalışması gereken sistemler
  • Trafiğin gün içinde değiştiği web uygulamaları
  • Canary veya rolling update ile sürüm yayımlayan ekipler
  • Birden fazla servis içeren mikroservis mimarileri
  • Container tabanlı batch işlerini zamanlayan platformlar
  • Bulut ve şirket içi sunucular arasında taşınabilirlik isteyen ekipler

Kaynak ihtiyacını planlarken pod sayısını, her podun CPU ve bellek taleplerini birlikte hesaplayın. Örneğin 4 podun her biri 500 millicore CPU ve 1 GiB bellek istiyorsa yalnızca uygulama talepleri 2 CPU ve 4 GiB bellektir. Sistem bileşenleri ve işletim sistemi için ayrıca pay bırakın.

Cluster'ı sanal sunucular üzerinde çalıştırmayı düşünüyorsanız VPS nedir? rehberindeki kaynak ve ağ kavramlarını inceleyin. Bulut sağlayıcısı seçerken AWS, Microsoft Azure ve Google Compute Engine seçeneklerini node, depolama ve ağ ihtiyaçlarıyla karşılaştırın.

Sık Yapılan Kubernetes Hataları ve Çözümleri

Kubernetes sorunlarının önemli bölümü uygulama imajından veya YAML tanımından kaynaklanır. Hata mesajını pod durumu, olay kayıtları ve container loglarıyla birlikte değerlendirin. Tek bir komut çıktısına bakarak karar vermek teşhisi zorlaştırır.

HataBelirtiÇözüm
Yanlış image etiketiImagePullBackOffRegistry adresini ve imaj etiketini kontrol edin.
Eksik kaynak tanımıPod beklemede kalır.requests değerlerini node kapasitesiyle karşılaştırın.
Yanlış Service selector'ıEndpoint bulunmaz.Pod etiketleriyle selector alanını eşleştirin.
Kalıcı volume tanımsızlığıVeri pod silinince kaybolur.Uygun PersistentVolumeClaim kullanın.
Readiness probe hatasıTrafik pod'a ulaşmaz.Endpoint, port ve başlangıç süresini düzeltin.

Bir Deployment'ın çalışması, uygulamanın trafiğe hazır olduğu anlamına gelmez. Readiness probe başarısızsa Service podu endpoint listesinden çıkarır. Liveness probe ise uygulama kilitlendiğinde container'ın yeniden başlatılmasına yardımcı olur.

İpucu: Sorun incelemek için önce kubectl get pods, ardından kubectl describe pod ve kubectl logs çıktısını sırayla kontrol edin. Böylece durum, olay ve uygulama logunu ayrı değerlendirebilirsiniz.

Kubernetes Sürümü ve Başlangıç Kararı

Resmî sürüm sayfasında 1.37.1, 15 Eylül 2026 tarihli en güncel Kubernetes sürümü olarak listeleniyor. Kurulumdan önce control plane, node ve kullandığınız eklentilerin desteklediği sürüm aralığını kontrol edin.

İlk cluster'ınızı kurarken küçük ve ölçülebilir bir uygulama seçin. Bir Deployment, bir Service ve bir readiness probe ile başlayın. Ardından 2 replica çalıştırıp bir podu silerek Kubernetes'in hedef durumu nasıl koruduğunu gözlemleyin.

Üretim ortamına geçmeden önce yedekleme, erişim yetkileri, secret yönetimi, ağ politikaları ve izleme planını tanımlayın. Cluster erişimini geniş yetkili tek bir kullanıcıya bırakmayın. Rol tabanlı erişim kontrolüyle ekiplerin ihtiyaç duyduğu kaynaklara sınır koyun.

Yapılandırmalarınızı Git deposunda tutun ve her değişikliği inceleme sürecinden geçirin. Böylece deployment, service ve kaynak ayarlarını gerektiğinde karşılaştırabilir, önceki çalışan tanıma dönebilirsiniz.

Sık sorulan sorular

Kubernetes kullanmak için Docker kurmak gerekir mi?
Hayır. Kubernetes podlardaki container'ları çalıştırmak için containerd veya CRI-O gibi CRI uyumlu container runtime'lar kullanabilir. Docker ile oluşturulan imajlar Kubernetes'te çalışır; ancak node üzerinde Docker Engine bulunması zorunlu değildir. Gerekli runtime seçimi, kullandığınız Kubernetes dağıtımına ve işletim ortamına göre yapılır.
Kubernetes ücretsiz mi?
Kubernetes açık kaynaklı bir projedir ve yazılımın kendisi için lisans ücreti alınmaz. Ancak cluster çalıştırılan sanal makineler, diskler, yedekleme, ağ trafiği ve yönetilen Kubernetes hizmetleri ücret oluşturabilir. Toplam maliyet, node sayısı, kaynak kapasitesi, depolama ve bulut sağlayıcısının fiyatlandırmasına göre hesaplanır.
Kubernetes öğrenmeye nereden başlanmalı?
Önce container imajı, ağ portları ve volume mantığını öğrenin. Ardından tek bir cluster üzerinde Pod, Deployment ve Service kaynaklarını uygulayın. İkinci aşamada readiness probe, kaynak requests-limit değerleri ve ConfigMap kullanın. Her değişikliği küçük bir YAML dosyasıyla deneyip pod durumunu ve olay kayıtlarını izleyin.
Kubernetes küçük projeler için uygun mudur?
Küçük projelerde Kubernetes kurulumu ve işletimi, uygulamanın kendisinden daha fazla yönetim gerektirebilir. Birkaç container tek sunucuda çalışıyorsa daha basit araçlar yeterli olabilir. Birden fazla node, otomatik iyileştirme veya standartlaştırılmış dağıtım ihtiyacı ortaya çıktığında Kubernetes'in sağladığı yönetim katmanı anlam kazanır.

Kaynaklar

  1. Overview | Kubernetes
  2. Releases | Kubernetes