HomeBlogKubernetes vs Docker Swarm: Doğru Orchestration Aracını Seçin
Container & Orchestration

Kubernetes vs Docker Swarm: Doğru Orchestration Aracını Seçin

April 7, 20269 dkArticle
kubernetes docker-swarm orchestration karşılaştırma

Kubernetes vs Docker Swarm: Doğru Orchestration Aracını Seçin

Container sayınız arttığında bir orchestration aracına ihtiyaç duyarsınız. Kubernetes (K8s) ve Docker Swarm bu alandaki iki temel seçenektir. Bu yazıda her iki platformu kurulum kolaylığı, ölçeklenebilirlik, ekosistem ve maliyet açısından karşılaştırıyoruz.

Kısa Tanımlar

Kubernetes, Google tarafından geliştirilen ve CNCF'e devredilen açık kaynaklı container orchestration platformudur. Büyük ölçekli, karmaşık dağıtık sistemler için tasarlanmıştır.

Docker Swarm, Docker Engine'e entegre gelen native orchestration aracıdır. Docker CLI bilgisiyle hızlıca cluster kurabilmenizi sağlar.

Kurulum ve Başlangıç Karşılaştırması

Docker Swarm: Dakikalar İçinde Cluster

Docker Swarm kurulumu son derece basittir. Docker yüklü herhangi bir makinede tek komutla başlatılır.

# Manager node başlatma
docker swarm init --advertise-addr 192.168.1.10

# Worker node ekleme (manager'ın verdiği token ile)
docker swarm join --token SWMTKN-1-xxx 192.168.1.10:2377

# Cluster durumunu kontrol etme
docker node ls

Bir servis deploy etmek de aynı derecede kolaydır:

# Servis oluşturma
docker service create --name web --replicas 3 -p 80:80 nginx

# Ölçeklendirme
docker service scale web=5

Kubernetes: Güçlü Ama Karmaşık

Kubernetes kurulumu daha fazla bileşen ve konfigürasyon gerektirir.

# kubeadm ile cluster kurulumu
kubeadm init --pod-network-cidr=10.244.0.0/16

# kubectl konfigürasyonu
mkdir -p $HOME/.kube
cp /etc/kubernetes/admin.conf $HOME/.kube/config

# Pod network (Flannel örneği)
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

# Worker node ekleme
kubeadm join 192.168.1.10:6443 --token xxx --discovery-token-ca-cert-hash sha256:xxx

Alternatif olarak k3s gibi hafif dağıtımlar kurulumu basitleştirir:

# k3s ile tek komut kurulum
curl -sfL https://get.k3s.io | sh -

Mimari Farklılıklar

| Özellik | Kubernetes | Docker Swarm | |---------|-----------|--------------| | En küçük birim | Pod (1+ container) | Task (tek container) | | Service discovery | CoreDNS + kube-proxy | Dahili DNS | | Load balancing | Ingress controller + Service | Dahili routing mesh | | Config yönetimi | ConfigMap + Secret | Docker Config + Secret | | Storage | PersistentVolume + CSI | Docker Volume | | Networking | CNI plugin (Calico, Cilium) | Overlay network |

Kubernetes'in Pod kavramı, aynı network namespace'i paylaşan birden fazla container'ı bir arada çalıştırabilmenizi sağlar. Bu, sidecar pattern gibi gelişmiş dağıtık sistem desenlerini mümkün kılar.

Deployment Tanımları

Docker Swarm Stack

# docker-compose.yml (Swarm stack)
version: "3.8"
services:
  web:
    image: myapp:latest
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 10s
      restart_policy:
        condition: on-failure
    ports:
      - "80:3000"

  redis:
    image: redis:7-alpine
    deploy:
      replicas: 1
docker stack deploy -c docker-compose.yml myapp

Kubernetes Deployment

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: myapp
          image: myapp:latest
          ports:
            - containerPort: 3000
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 500m
              memory: 256Mi
          livenessProbe:
            httpGet:
              path: /health
              port: 3000
            initialDelaySeconds: 10
          readinessProbe:
            httpGet:
              path: /ready
              port: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  selector:
    app: myapp
  ports:
    - port: 80
      targetPort: 3000
  type: ClusterIP

Kubernetes YAML dosyaları daha uzun ve detaylıdır, ancak resource limits, health check, rolling update stratejisi gibi production-critical özellikler native olarak desteklenir.

Ölçeklenebilirlik

Docker Swarm

  • Yatay ölçeklendirme basit ve hızlıdır
  • Küçük-orta ölçekte (10-50 node) iyi performans gösterir
  • Auto-scaling için harici araçlara ihtiyaç duyar
  • Büyük cluster'larda performans düşüşü yaşanabilir

Kubernetes

  • Binlerce node ve on binlerce pod yönetebilir
  • Horizontal Pod Autoscaler (HPA) ile otomatik ölçeklendirme
  • Cluster Autoscaler ile node sayısını otomatik ayarlama
  • KEDA ile event-driven autoscaling
# HPA tanımı
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: myapp-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp
  minReplicas: 2
  maxReplicas: 20
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70

Ekosistem ve Topluluk

Kubernetes'in ekosistemi çok daha geniştir:

  • Helm ile paket yönetimi
  • Istio/Linkerd ile service mesh
  • ArgoCD/Flux ile GitOps
  • Prometheus/Grafana ile monitoring
  • Cert-Manager ile otomatik TLS sertifika yönetimi
  • Operator framework ile karmaşık uygulamaların otomatik yönetimi

Docker Swarm'ın ekosistemi daha sınırlıdır. Portainer gibi yönetim araçları mevcuttur, ancak Kubernetes ekosistemiyle kıyaslanamaz.

Maliyet Analizi

| Maliyet Kalemi | Kubernetes | Docker Swarm | |----------------|-----------|--------------| | Altyapı | Daha fazla kaynak gerektirir | Minimal overhead | | Öğrenme eğrisi | Yüksek (haftalarca) | Düşük (saatler) | | Operasyon maliyeti | Yüksek (veya managed servis) | Düşük | | Managed servis | EKS/GKE/AKS (~$72/ay/cluster) | Yok | | Takım yetkinliği | Uzman gerektirir | Docker bilgisi yeterli |

Doğru Aracı Nasıl Seçersiniz?

Docker Swarm İdeal Senaryolar

  • Küçük takımlar (2-5 kişi) ve basit mimariler
  • Docker bilgisinin yeterli olduğu, hızlı başlangıç gereken projeler
  • 10-20 servislik uygulamalar
  • Öğrenme eğrisinin düşük tutulması gereken durumlar

Kubernetes İdeal Senaryolar

  • Büyük ölçekli mikroservis mimarileri (50+ servis)
  • Auto-scaling, canary deployment, blue-green deployment gereksinimleri
  • Multi-cloud veya hybrid-cloud stratejileri
  • Güçlü ekosistem ve community desteğine ihtiyaç duyan projeler
  • Compliance ve güvenlik gereksinimlerinin yüksek olduğu ortamlar

Sonuç

Docker Swarm basitliği ile küçük projeler için mükemmel bir başlangıç noktasıdır. Kubernetes ise karmaşıklığına rağmen büyük ölçekli production ortamları için endüstri standardıdır. 2026 itibarıyla Kubernetes'in pazar hakimiyeti tartışmasızdır, ancak her proje Kubernetes gerektirmez.

Kubernetes ile production ortamı yönetimi hakkında detaylı bilgi için Kubernetes production rehberi yazımıza göz atın. Container güvenliği konusunda ise container güvenlik best practices makalemizi incelemenizi öneririz.

Weekly DevOps Newsletter

Get new tool reviews, comparisons and DevOps trends delivered to your inbox weekly.