Kubernetes Nedir ve Ne İşe Yarar?

Kubernetes, container tabanlı uygulamaların dağıtılmasını, yönetilmesini, ölçeklendirilmesini ve çalışır durumda tutulmasını sağlayan açık kaynaklı bir container orkestrasyon platformudur.

Özellikle Docker gibi teknolojilerle oluşturulan container imajlarının birden fazla sunucu üzerinde yönetilmesinde kullanılır.

Kubernetes sayesinde uygulamaların çalıştırılması, servisler arasındaki iletişim, yük dağıtımı, otomatik yeniden başlatma ve güncelleme işlemleri merkezi bir sistem üzerinden yönetilebilir.

How Kubernetes Clusters Work: A Production-Focused Deep Dive

Kubernetes Nedir?

Kubernetes, kısaca K8s olarak da adlandırılan açık kaynaklı bir container orkestrasyon sistemidir.

İlk olarak Google tarafından geliştirilen Kubernetes, 2014 yılında açık kaynak olarak duyurulmuştur. Günümüzde Cloud Native Computing Foundation (CNCF) bünyesinde geliştirilmektedir.

Kubernetes'in temel amacı, container içerisinde çalışan uygulamaların yaşam döngüsünü otomatik olarak yönetmektir.

Kubernetes ile gerçekleştirilebilen başlıca işlemler şunlardır:

  • Container tabanlı uygulamaları çalıştırmak

  • Birden fazla sunucuyu tek bir küme olarak yönetmek

  • Uygulamaları otomatik ölçeklendirmek

  • Hatalı container'ları yeniden başlatmak

  • Uygulama trafiğini servisler arasında dağıtmak

  • Yeni uygulama sürümlerini kontrollü şekilde yayınlamak

  • Uygulama yapılandırmalarını yönetmek

  • Kalıcı depolama kaynaklarını kullanmak

  • Uygulamaların çalışma durumunu izlemek

  • DevOps ve CI/CD süreçleriyle entegrasyon sağlamak

Kubernetes, özellikle birden fazla container ve sunucunun bulunduğu ortamlarda yönetim kolaylığı sağlayabilir.

Kubernetes Ne İşe Yarar?

Kubernetes- Guide to Modern Application Deployment

Kubernetes, container tabanlı uygulamaların çalıştırılmasını ve yönetilmesini otomatikleştirmek için kullanılır.

Örneğin bir web uygulamasının aynı anda birden fazla container üzerinde çalıştırılması gerektiğinde Kubernetes bu container'ların yönetimini gerçekleştirebilir.

Bir container beklenmedik şekilde kapanırsa Kubernetes, tanımlanan istenen durumu yeniden sağlamak için yeni bir container oluşturulmasını sağlayabilir.

Uygulamanın daha fazla işlem kapasitesine ihtiyaç duyması durumunda uygun ölçeklendirme yapılandırmalarıyla çalışan uygulama kopyalarının sayısı artırılabilir.

Kubernetes ayrıca yeni uygulama sürümlerinin kontrollü şekilde dağıtılmasını destekler.

Kubernetes Nasıl Çalışır?

Kubernetes, bir veya birden fazla sunucudan oluşan cluster yapısı üzerinde çalışır.

Cluster içerisinde uygulamaları yöneten kontrol düzlemi ve uygulamaların çalıştırıldığı worker node sistemleri bulunur.

Kubernetes'in temel çalışma mantığı, istenen durumun tanımlanması ve sistemin bu duruma ulaşmaya çalışmasıdır.

Örneğin bir uygulamanın üç kopya halinde çalışması isteniyorsa Kubernetes bu durumu korumaya çalışır.

Genel çalışma süreci şöyledir:

  1. Uygulama için container imajı hazırlanır.

  2. Kubernetes yapılandırma dosyası oluşturulur.

  3. Uygulamanın kaç kopya çalışacağı belirlenir.

  4. Kubernetes uygun node sistemlerini seçer.

  5. Pod'lar oluşturulur.

  6. Container'lar başlatılır.

  7. Uygulamanın durumu izlenir.

  8. Hata veya değişiklik durumunda gerekli işlemler gerçekleştirilir.

Bu süreç Kubernetes kontrol bileşenleri tarafından yönetilir.

Kubernetes Cluster Nedir?

Kubernetes — Architecture and Cluster Components Overview | DevOps Mojo

Kubernetes Cluster, Kubernetes tarafından yönetilen sunucu veya sanal makine grubudur.

Bir cluster genel olarak iki temel bölümden oluşur:

  • Control Plane

  • Worker Nodes

Control Plane Nedir?

Control Plane, Kubernetes kümesinin yönetiminden sorumlu bileşenleri içerir.

Görevleri arasında:

  • Kubernetes API isteklerini işlemek

  • Cluster durumunu yönetmek

  • Pod'ların hangi node üzerinde çalışacağını belirlemek

  • İstenen durumla mevcut durumu karşılaştırmak

  • Gerekli yönetim işlemlerini başlatmak

bulunur.

Worker Node Nedir?

Worker Node, uygulama container'larının çalıştırıldığı sistemdir.

Worker node üzerinde Kubernetes tarafından yönetilen Pod'lar bulunur.

Worker node sistemleri fiziksel sunucular veya sanal makineler olabilir.

Kubernetes Mimarisi ve Temel Bileşenleri

Kubernetes mimarisinde farklı görevleri yerine getiren bileşenler bulunur.

Bileşen

Görevi

API Server

Kubernetes API isteklerini karşılar.

etcd

Cluster yapılandırmasını ve durum verilerini saklar.

Scheduler

Pod'ların uygun node'lara atanmasını sağlar.

Controller Manager

Çeşitli kontrol döngülerini çalıştırır.

Kubelet

Node üzerindeki Pod'ların çalışmasını yönetir.

Kube-proxy

Kullanılan ağ mimarisine göre servis trafiği kurallarını yönetir.

Container Runtime

Container'ların çalıştırılmasını sağlar.

Kubernetes sisteminin sağlıklı çalışabilmesi için bu bileşenlerin uygun şekilde yapılandırılması gerekir.

Kubernetes Pod Nedir?

Kubernetes Explained: A Complete Beginner's Guide (2026) | Xcademia

Pod, Kubernetes içerisinde oluşturulabilen ve dağıtılabilen en küçük çalışma birimidir.

Bir Pod içerisinde bir veya birden fazla container bulunabilir.

Aynı Pod içerisindeki container'lar:

  • Aynı ağ ad alanını paylaşır.

  • Birbirleriyle localhost üzerinden iletişim kurabilir.

  • Tanımlanan ortak volume kaynaklarını kullanabilir.

  • Aynı node üzerinde çalışır.

Örneğin bir web uygulaması container'ı ile ona yardımcı olan başka bir container aynı Pod içerisinde çalıştırılabilir.

Ancak her uygulama için birden fazla container içeren Pod kullanılması zorunlu değildir.

Kubernetes Deployment Nedir?

Deployment, Kubernetes üzerinde uygulamaların istenen sayıda Pod kopyasıyla çalıştırılmasını ve güncellenmesini yönetmek için kullanılan kaynaktır.

Deployment sayesinde:

  • Uygulama kopyaları oluşturulabilir.

  • Pod sayısı değiştirilebilir.

  • Yeni sürümler dağıtılabilir.

  • Önceki sürümlere geri dönülebilir.

  • İstenen çalışma durumu korunabilir.

Örneğin bir web uygulamasının üç kopya halinde çalıştırılması için Deployment tanımlanabilir.

Kubernetes Deployment Nasıl Oluşturulur?

Kubernetes yapılandırmaları genellikle YAML dosyaları üzerinden tanımlanır.

Örnek deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.27
          ports:
            - containerPort: 80

Bu yapılandırmada:

  • apiVersion: Kullanılan Kubernetes API sürümünü belirtir.

  • kind: Oluşturulacak kaynak türüdür.

  • metadata: Kaynağın adını ve diğer bilgilerini içerir.

  • replicas: İstenen Pod kopyası sayısını belirtir.

  • selector: Deployment tarafından yönetilecek Pod'ları seçer.

  • template: Oluşturulacak Pod'ların yapısını tanımlar.

  • containers: Pod içerisindeki container'ları belirtir.

Bu örnek, Nginx uygulamasının üç Pod kopyasıyla çalıştırılmasını hedefler.

Kubectl Nedir?

kubectl, Kubernetes cluster'larını komut satırından yönetmek için kullanılan araçtır.

Kubectl ile Kubernetes kaynakları oluşturulabilir, güncellenebilir, silinebilir ve incelenebilir.

Yaygın kullanılan komutlar:

kubectl get nodes

Cluster içerisindeki node'ları listeler.

kubectl get pods

Varsayılan namespace içerisindeki Pod'ları listeler.

kubectl get deployments

Deployment kaynaklarını görüntüler.

kubectl get services

Service kaynaklarını listeler.

kubectl get all

Bulunulan namespace içerisindeki yaygın kaynak türlerini görüntüler. Bütün Kubernetes kaynak türlerini kapsamaz.

Bu komutların çalışabilmesi için kubectl aracının kurulmuş ve erişilebilir bir Kubernetes cluster'ına uygun şekilde yapılandırılmış olması gerekir.

Kubernetes Üzerinde Uygulama Nasıl Çalıştırılır?

Hazırlanan YAML dosyası Kubernetes cluster'ına uygulanabilir.

kubectl apply -f deployment.yaml

Deployment durumunu kontrol etmek için:

kubectl get deployments

Pod'ları görüntülemek için:

kubectl get pods

Deployment hakkında ayrıntılı bilgi almak için:

kubectl describe deployment nginx-deployment

Uygulamanın çalışması için cluster üzerinde yeterli kaynak ve gerekli container imajına erişim bulunmalıdır.

Kubernetes Service Nedir?

Kubernetes Services Explained

Service, Kubernetes içerisinde Pod'lara ağ üzerinden erişim sağlamak için kullanılan kaynaktır.

Pod'lar yeniden oluşturulduğunda IP adresleri değişebilir.

Service, belirli Pod'lara ulaşmak için daha kararlı bir erişim noktası sağlar.

Kubernetes üzerinde yaygın Service türleri şunlardır:

Service Türü

Açıklama

ClusterIP

Cluster içerisinden erişim sağlar.

NodePort

Node üzerindeki belirli bir port üzerinden erişim sağlayabilir.

LoadBalancer

Desteklenen altyapıda harici yük dengeleyici oluşturulmasını sağlar.

ExternalName

DNS adı üzerinden başka bir servise yönlendirme sağlar.

Service türünün seçimi uygulamanın ağ gereksinimlerine bağlıdır.

Kubernetes Service Nasıl Oluşturulur?

Örnek service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: ClusterIP
  selector:
    app: nginx
  ports:
    - port: 80
      targetPort: 80

Bu yapılandırma, app: nginx etiketine sahip uygun Pod'lara erişim sağlayan bir Service oluşturur.

Service'i oluşturmak için:

kubectl apply -f service.yaml

Oluşturulan Service'i görüntülemek için:

kubectl get services

Kubernetes Namespace Nedir?

Namespace, Kubernetes cluster içerisindeki kaynakları mantıksal olarak gruplandırmak için kullanılan yapıdır.

Örneğin farklı uygulama veya ortamlar için ayrı namespace'ler oluşturulabilir.

kubectl create namespace development

Namespace listesini görüntülemek için:

kubectl get namespaces

Belirli bir namespace içerisindeki Pod'ları listelemek için:

kubectl get pods -n development

Namespace kullanımı kaynakların düzenlenmesine yardımcı olur. Ancak tek başına tam güvenlik izolasyonu sağlamaz.

Kubernetes ConfigMap Nedir?

ConfigMap, uygulamaların gizli olmayan yapılandırma verilerini saklamak için kullanılan Kubernetes kaynağıdır.

Örneğin:

  • Uygulama ortamı

  • Servis adresleri

  • Yapılandırma seçenekleri

  • Uygulama ayarları

ConfigMap içerisinde tanımlanabilir.

Örnek:

apiVersion: v1
kind: ConfigMap
metadata:
  name: uygulama-config
data:
  APP_ENV: "production"
  APP_DEBUG: "false"

ConfigMap, yapılandırma bilgilerinin container imajından ayrı yönetilmesine yardımcı olur.

Kubernetes Secret Nedir?

Secret, parola, token ve benzeri hassas verilerin Kubernetes üzerinde yönetilmesini sağlayan kaynaktır.

Örneğin:

  • Veritabanı parolaları

  • API anahtarları

  • Kimlik doğrulama bilgileri

  • TLS sertifikaları

Secret olarak saklanabilir.

Örnek Secret oluşturma komutu:

kubectl create secret generic db-secret \
  --from-literal=DB_PASSWORD='ornek-parola'

Bu komuttaki parola yalnızca örnektir. Gerçek sistemlerde hassas bilgilerin komut satırı geçmişine veya işlem listelerine sızmasını önleyen yöntemler tercih edilmelidir.

Kubernetes Secret değerlerinin varsayılan olarak Base64 biçiminde saklanabilmesi, tek başına şifreleme anlamına gelmez.

Bu nedenle Secret verilerinin korunması için erişim yetkileri, etcd şifrelemesi ve uygun güvenlik politikaları ayrıca yapılandırılmalıdır.

Kubernetes Volume Nedir?

Container dosya sistemlerinde bulunan veriler, container yeniden oluşturulduğunda kaybolabilir.

Kubernetes, uygulamaların veri depolama ihtiyaçlarını karşılamak için volume yapıları sunar.

Yaygın kullanılan kavramlar:

  • Volume

  • PersistentVolume

  • PersistentVolumeClaim

  • StorageClass

PersistentVolume Nedir?

PersistentVolume, Kubernetes cluster'ında kullanılabilen kalıcı depolama kaynağını temsil eder.

PersistentVolumeClaim Nedir?

PersistentVolumeClaim, uygulamanın ihtiyaç duyduğu depolama kaynağı için oluşturduğu taleptir.

Bu yapılar özellikle veritabanları ve kalıcı veri gerektiren uygulamalarda kullanılabilir.

Kubernetes Autoscaling Nedir?

Kubernetes Cost Optimization

Autoscaling, uygulamaların veya altyapı kaynaklarının belirlenen koşullara göre ölçeklendirilmesini sağlayan yaklaşımdır.

Kubernetes farklı ölçeklendirme mekanizmalarını destekler.

Horizontal Pod Autoscaler (HPA)

Belirli metriklere göre Pod kopyası sayısını artırabilir veya azaltabilir.

Vertical Pod Autoscaler (VPA)

Uygulama Pod'larının CPU ve bellek kaynak taleplerini ayarlamak için kullanılabilen ayrı bir bileşendir.

Node Autoscaling

Desteklenen altyapı ve ilgili otomatik ölçeklendirme bileşenleriyle cluster node kapasitesinin artırılmasını veya azaltılmasını sağlar.

Otomatik ölçeklendirme için gerekli metriklerin ve altyapı bileşenlerinin uygun şekilde yapılandırılması gerekir.

Kubernetes Rolling Update Nedir?

Rolling Update, uygulamanın yeni sürümünün Pod'lar kademeli olarak değiştirilerek dağıtılmasını sağlayan güncelleme yöntemidir.

Bu yöntem, uygun yapılandırmalarda uygulamanın erişilebilirliğini koruyarak güncelleme yapılmasına yardımcı olabilir.

Örneğin Deployment imajını değiştirmek için:

kubectl set image deployment/nginx-deployment \
  nginx=nginx:1.28

Bu komut Deployment içerisindeki nginx container'ının imajını değiştirir.

Güncelleme durumunu kontrol etmek için:

kubectl rollout status deployment/nginx-deployment

Önceki sürüme geri dönmek için:

kubectl rollout undo deployment/nginx-deployment

Geri alma işleminin çalışması, uygun Deployment geçmişinin bulunmasına bağlıdır.

Kubernetes ile Docker Arasındaki Farklar

Özellik

Docker

Kubernetes

Temel amaç

Container oluşturma ve çalıştırma araçları sunar.

Container tabanlı uygulamaları orkestre eder.

Container imajı oluşturma

Destekler.

Doğrudan temel görevi değildir.

Çoklu sunucu yönetimi

Tek başına temel Docker Engine görevi değildir.

Cluster yönetimini destekler.

Otomatik ölçeklendirme

Ek araçlar gerektirebilir.

Uygun bileşenlerle destekler.

Hatalı Pod'ları yeniden oluşturma

Kubernetes Pod kavramı bulunmaz.

Destekler.

Servis keşfi

Docker ağ özellikleriyle sağlanabilir.

Kubernetes Service ve DNS ile sağlanır.

Rolling Update

Orkestrasyon araçlarıyla sağlanabilir.

Deployment ile desteklenir.

Docker ve Kubernetes birbirinin doğrudan alternatifi değildir.

Docker, container oluşturma ve çalıştırma araçları sunarken Kubernetes container tabanlı uygulamaların orkestrasyonuna odaklanır.

Kubernetes, container çalıştırmak için Docker Engine kullanılmasını zorunlu kılmaz. Containerd ve CRI-O gibi uyumlu container runtime sistemleri kullanılabilir.

Kubernetes ile Docker Compose Arasındaki Farklar

Docker Compose, birden fazla container içeren uygulamaların tanımlanmasını ve çalıştırılmasını kolaylaştırır.

Kubernetes ise daha kapsamlı cluster yönetimi ve orkestrasyon özellikleri sunar.

Özellik

Docker Compose

Kubernetes

Yapılandırma

Compose YAML dosyası

Kubernetes kaynak dosyaları

Temel kullanım

Çoklu container uygulamaları

Container orkestrasyonu

Cluster yönetimi

Temel amacı değildir.

Destekler.

Otomatik ölçeklendirme

Yerleşik HPA benzeri sistem bulunmaz.

Uygun bileşenlerle destekler.

Servis keşfi

Docker ağları üzerinden

Service ve DNS üzerinden

Kurulum karmaşıklığı

Genellikle daha düşüktür.

Genellikle daha yüksektir.

Küçük ve tek sunuculu projelerde Docker Compose yeterli olabilir.

Birden fazla node, otomatik ölçeklendirme ve gelişmiş dağıtım yönetimi gerektiren projelerde Kubernetes değerlendirilebilir.

Kubernetes ile DevOps Arasındaki İlişki

Kubernetes, DevOps süreçlerinde uygulamaların dağıtılması ve yönetilmesi için kullanılabilir.

Örneğin bir CI/CD süreci şu şekilde oluşturulabilir:

  1. Geliştirici Git deposuna kod gönderir.

  2. CI/CD sistemi otomatik testleri çalıştırır.

  3. Uygulama için container imajı oluşturulur.

  4. İmaj container kayıt sistemine gönderilir.

  5. Kubernetes Deployment yapılandırması güncellenir.

  6. Yeni Pod'lar oluşturulur.

  7. Eski Pod'lar kontrollü şekilde kaldırılır.

  8. Uygulamanın durumu izlenir.

GitHub Actions, GitLab CI/CD ve Jenkins gibi araçlar Kubernetes dağıtım süreçleriyle entegre edilebilir.

Kubernetes Kullanmanın Avantajları

Kubernetes kullanımının sağlayabileceği başlıca avantajlar şunlardır:

  • Container tabanlı uygulamaların merkezi yönetimi

  • Birden fazla sunucuda uygulama çalıştırma

  • Otomatik yeniden oluşturma mekanizmaları

  • Uygulama ölçeklendirme desteği

  • Servis keşfi ve ağ yönetimi

  • Kontrollü sürüm güncellemeleri

  • Yapılandırma ve Secret yönetimi

  • Kalıcı depolama desteği

  • CI/CD sistemleriyle entegrasyon

  • Farklı altyapılarda çalışabilme

Bu avantajların sağlanabilmesi için Kubernetes altyapısının doğru kurulması ve yönetilmesi gerekir.

Kubernetes Kullanmanın Dezavantajları

Kubernetes her proje için gerekli olmayabilir.

Karşılaşılabilecek zorluklar şunlardır:

  • Kurulum ve yönetim karmaşıklığı

  • Ek altyapı kaynaklarına ihtiyaç duyulması

  • Ağ ve depolama yapılandırmalarının öğrenilmesi

  • Güvenlik politikalarının yönetilmesi

  • İzleme ve loglama altyapısı gereksinimleri

  • Küçük projelerde gereksiz operasyonel yük oluşturabilmesi

Bu nedenle Kubernetes kullanımı projenin ölçeğine, ihtiyaçlarına ve yönetim kapasitesine göre değerlendirilmelidir.

Kubernetes Kullanırken Karşılaşılan Sorunlar

Pod Başlatılamıyor

Container imajı, kaynak talepleri, node durumu ve Pod olayları incelenmelidir.

kubectl describe pod POD_ADI

ImagePullBackOff Hatası

Container imajının adresi, etiketi ve registry erişim bilgileri kontrol edilmelidir.

CrashLoopBackOff Hatası

Container'ın tekrar tekrar başarısız olmasına neden olan uygulama veya yapılandırma sorunları incelenmelidir.

kubectl logs POD_ADI

Service Üzerinden Erişim Sağlanamıyor

Service selector, Pod etiketleri, port eşleştirmeleri ve ağ politikaları kontrol edilmelidir.

Pod Pending Durumunda Kalıyor

Node kaynakları, scheduling koşulları, depolama talepleri ve ilgili olaylar incelenmelidir.

Deployment Güncellenmiyor

Deployment durumu ve rollout kayıtları kontrol edilmelidir.

kubectl rollout status deployment/DEPLOYMENT_ADI

Kubernetes Güvenliği Nasıl Sağlanır?

Kubernetes cluster güvenliği için farklı katmanlarda önlem alınmalıdır.

Başlıca güvenlik uygulamaları:

  • Kubernetes sürümleri güncel tutulmalıdır.

  • RBAC ile erişim yetkileri sınırlandırılmalıdır.

  • Secret verileri uygun şekilde korunmalıdır.

  • Container'lar mümkün olduğunda root olmayan kullanıcılarla çalıştırılmalıdır.

  • NetworkPolicy ile ağ erişimleri sınırlandırılmalıdır.

  • Güvenilir container imajları kullanılmalıdır.

  • Container güvenlik taramaları yapılmalıdır.

  • Gereksiz ayrıcalıklar kaldırılmalıdır.

  • API Server erişimi korunmalıdır.

  • Cluster logları ve olayları izlenmelidir.

Güvenlik yapılandırmaları uygulamanın ve altyapının ihtiyaçlarına göre belirlenmelidir.

Kubernetes Hangi Projelerde Kullanılır?

Kubernetes farklı ölçeklerdeki uygulamalarda kullanılabilir.

Örnek kullanım alanları:

  • Mikroservis mimarileri

  • Büyük ölçekli web uygulamaları

  • API servisleri

  • Bulut tabanlı yazılımlar

  • Container tabanlı kurumsal sistemler

  • Otomatik ölçeklendirme gerektiren uygulamalar

  • Birden fazla sunucuda çalışan servisler

  • DevOps ve CI/CD altyapıları

Ancak basit bir web sitesi veya tek sunuculu küçük bir uygulama için Kubernetes zorunlu değildir.

Sonuç

Kubernetes, container tabanlı uygulamaların dağıtılmasını, yönetilmesini ve ölçeklendirilmesini sağlayan açık kaynaklı bir orkestrasyon platformudur.

Cluster, Node, Pod, Deployment, Service, Namespace, ConfigMap, Secret ve PersistentVolume gibi bileşenlerle uygulamaların çalışma ortamı yönetilebilir.

Kubernetes; otomatik ölçeklendirme, kontrollü güncelleme, servis keşfi ve hata sonrası yeniden oluşturma gibi özellikleri sayesinde özellikle çoklu container ve çoklu sunucu altyapılarında kullanılmaktadır.

Doğru yapılandırılmış bir Kubernetes ortamı, uygulamaların daha düzenli, izlenebilir ve yönetilebilir biçimde çalıştırılmasına yardımcı olur.

 


Alıntı