Docker Swarm ile Hosting Altyapısı Kurmak

Docker Swarm ile Hosting Altyapısı Kurmak

Giriş
Bulut ve konteyner teknolojileri, modern hosting altyapılarının bel kemiğini oluşturuyor. Geleneksel sanal sunucu (VM) tabanlı çözümler, ölçeklenebilirlik ve kaynak verimliliği konusunda sınırlı kaldığında, Docker Swarm gibi yerleşik konteyner orkestrasyon araçları öne çıkıyor. Docker Swarm, Docker ekosistemiyle tam uyumlu, basit öğrenme eğrisi ve hızlı dağıtım imkânı sunan dağıtık bir mimariyle yüksek erişilebilirlik ve yük dengeleme olanakları getiriyor. Bu rehberde, “Docker Swarm ile Hosting Altyapısı Kurmak” başlığı altında, adım adım kurulumdan, servis yönetimine, güvenlikten izlemeye kadar kapsamlı bir altyapı tasarımını ele alacağız.

1. Docker Swarm Nedir ve Neden Tercih Edilmeli?
Docker Swarm, Docker Engine’in entegre edilmiş orkestrasyon çözümüdür. Kubernetes’e kıyasla öğrenmesi ve kurması oldukça hızlıdır; çünkü ek bir araç veya ekosistem kurmanıza gerek kalmaz. Swarm modu sayesinde birden fazla Docker host’unu bir küme (cluster) hâline getirerek;

  • Yüksek Erişilebilirlik: Bir node (düğüm) arızalandığında hizmet kesintisi yaşanmadan otomatik yeniden programlama yapılır.
  • Servis Keşfi ve Yük Dengeleme: Hizmetler, DNS tabanlı keşif ve Round-Robin dengeleme ile otomatik yayılır.
  • Deklaratif Servis Yönetimi: İstediğiniz replikasyon sayısını tanımlayıp, Docker’a gerçeğe uydurmasını söyleyebilirsiniz.

Docker ekosistemine hâkim geliştirici ve operasyon ekipleri için ekstra efor gerekmeden, mevcut Docker CLI ve Compose dosyalarını direkt Swarm’a uyarlayabilme avantajı sağlar. Büyük ölçekli hosting altyapılarında hem yönetim karmaşıklığını azaltır hem de kaynak kullanımını optimize eder.

2. Swarm Mimarisi ve Bileşenler
Swarm, node’lardan, manager ve worker rollerinden, overlay ağ mimarisinden oluşur.

  • Manager Node: Kümenin yönetim ve planlama sorumluluğunu üstlenir. Leader seçimi RAFT algoritmasıyla gerçekleşir; yüksek erişilebilirlik için en az üç manager önerilir.
  • Worker Node: Belirlenen servis görevlerini (task) çalıştırır; manager’lardan gelen talimatları uygular.
  • Overlay Ağ: Farklı fiziksel veya sanal makineler arasında güvenli kapsülleme (encapsulation) kullanarak hizmetler arası iletişimi sağlar.
  • Ingress Ağ: Dış dünyadan gelen trafiği Swarm içindeki ilgili servislere yönlendiren katmandır.

Swarm’ın bu bileşenleri, dağıtık bir yapı içinde otomatik ölçeklenebilirlik, esnek servis keşfi ve kendini onarma (self-healing) mekanizmalarını mümkün kılar.

3. Ön Koşullar ve Ortam Hazırlığı
Küme kurulumuna geçmeden önce her bir node’da şu hazırlıkları yapmalısınız:

  • İşletim sistemi: Ubuntu 20.04 LTS veya CentOS 8 gibi güncel sürüm
  • Docker Engine: En az Docker 20.10.x
  • Saat senkronizasyonu: NTP veya Chrony ile
  • Güvenlik duvarı ayarları: TCP 2377 (Swarm yönetim), TCP/UDP 7946 (node haberleşme), UDP 4789 (overlay ağ) açık olmalı
  • SSH erişimi: Anahtar tabanlı, parola olmayacak şekilde güvenli konfigüre edilmeli

4. Swarm Kümesi Oluşturma
İlk manager node’da aşağıdaki komutla küme başlatılır:

docker swarm init –advertise-addr <MANAGER_IP>

Komut size worker ve ek manager’ların katılabilmesi için token’lar sağlar:

# Worker eklemek için:

docker swarm join –token <WORKER_TOKEN> <MANAGER_IP>:2377

# Manager eklemek için:

docker swarm join-token manager

Diğer makinelerde uygun token ve IP ile docker swarm join komutu çalıştırıldığında, küme hazır hâle gelir. Mevcut node’ları görmek için:

docker node ls

5. Overlay Ağların Tasarımı
Swarm ortamında iki tür overlay ağ kullanılır:

  • Ingress Ağı: Tüm dış trafik bu ağ üzerinden yönlendirilir.
  • Overlay Ağı: Servisler arasında özel haberleşme sağlar. İhtiyaca göre birden fazla overlay ağı oluşturabilirsiniz:

# Varsayılan olarak yaratılan ingress ağ

docker network inspect ingress

# Yeni bir overlay ağı

docker network create -d overlay –attachable my_overlay_net

Overlay ağ isimlendirme stratejisi, servis rolleri ve ortam (prod/test/dev) ayrımı yapacak şekilde organize edilmelidir.

6. Servis Dağıtımı ve Yedeklilik
Swarm’da bir servisi başlatırken replikasyon sayısını belirterek yedeklilik sağlarsınız:

docker service create \

  –name web \

  –replicas 3 \

  –network my_overlay_net \

  nginx:stable

Bu komut, üç kopya (task) oluşturur ve Swarm uygun worker node’lar arasında balancer. Ölçek artırma/azaltma da kolaydır:

docker service scale web=5

Stateful uygulamalar için, persistent storage ihtiyacı dikkate alınmalı; NFS, GlusterFS veya üçüncü parti volume driver’ları kullanılabilir.

7. Yük Dengeleme ve Trafik Yönlendirme
Swarm, her servis için sanal IP (VIP) atar. VIP, cluster içindeki tüm replica IP’lerini kapsüller; istekler round-robin ile dağıtılır. Dışarıdan gelen trafiği yönlendirmek için:

  • DNS Round-Robin ile birden fazla ingress point’e işaret edilebilir.
  • Reverse Proxy: Traefik veya HAProxy, otomatik sertifika yönetimi ve dinamik servis keşfi için tercih edilir. Örneğin Traefik ile:

# traefik.yml (docker stack deploy için)

services:

  traefik:

    image: traefik:v2.5

    ports:

      – “80:80”

      – “443:443”

    networks:

      – ingress

    command:

      – “–providers.docker”

      – “–entrypoints.web.address=:80”

      – “–entrypoints.websecure.address=:443”

Traefik, Docker etiketi (label) tabanlı konfigürasyonla yeni servisleri otomatik keşfeder ve HTTPS sertifikalarını Let’s Encrypt üzerinden döndürür.

8. Sürekli Entegrasyon ve Dağıtım (CI/CD)
Modern hosting altyapısında koddan servise otomatik pipeline vazgeçilmezdir. GitLab CI, Jenkins veya GitHub Actions gibi araçlarla:

  1. Kod Değişikliği tetiklendiğinde Docker imajı build edilir ve registry’e push edilir (docker build, docker push).
  2. Swarm üzerindeki servisler, imajın yeni tag’ine güncellenir:
  3. docker service update \
  4.   –image myregistry.com/myapp:latest \
  5.   –update-parallelism 2 \
  6.   –update-delay 10s \
  7.   my_service
  8. Canary veya blue/green dağıtım senaryoları, traefik veya custom ağ politikalarıyla implement edilebilir.

9. Güvenlik ve Erişim Kontrolleri
Hosting ortamlarında güvenlik kritik öneme sahiptir. Swarm’daki güvenlik katmanları:

  • Mutual TLS: Tüm node’lar arası iletişim mTLS ile şifrelenir ve otomatik sertifika yönetimi Docker tarafından sağlanır.
  • Role-Based Access Control (RBAC): Docker Enterprise sürümünde, kullanıcı rolleri granüler olarak belirlenebilir.
  • Secret Management: Parola, API anahtarı veya TLS sertifikası gibi hassas veriler docker secret ile güvenle yönetilir:
  • echo “mypassword” | docker secret create db_password –
  • Network Politikaları: Overlay ağlarda –attachable modunda, servisler arası erişimi iptables kurallarıyla sınırlandırabilirsiniz.

Sunucular üzerinde host güvenliği için CVE takibi, otomatik güncelleme araçları (unattended-upgrades) ve düzenli zafiyet taramaları (OpenSCAP, Nessus) yapılmalıdır.

10. İzleme ve Log Yönetimi
Performans ve hata takibi için merkezi izleme şarttır. EFK (Elasticsearch-Fluentd-Kibana) veya Prometheus-Grafana stack’i şu bileşenlerden oluşur:

  • Log Toplama: Her node’da Fluentd/Fluentbit çalıştırılarak Docker log’ları JSON formatında toplanıp Elasticsearch’e gönderilir.
  • Metrics: cAdvisor ve node_exporter ile konteyner ve host metrikleri Prometheus’a aktarılır.
  • Grafik ve Uyarı: Grafana dashboard’ları üzerinden CPU, bellek, ağ trafiği, container restart sayısı gibi metrikleri izleyip, Alertmanager ile uyarı alırsınız.

Ayrıca, docker service logs ve docker node ps komutlarıyla hızlı yerel inceleme mümkündür.

11. Yedeklilik ve Felaket Kurtarma (DR)
Küme çökmesi veya bölgesel felaket durumlarına karşı:

  • Çok Bölge (Multi-Region) Kümeler: Farklı veri merkezlerinde manager ve worker node’lar konumlandırın; ağ bağlantı gecikmelerini göz önünde bulundurarak RAFT kararları verebilirsiniz.
  • Etcd veya Consul ile Back-up: Swarm’ın durumunu (docker swarm ca, docker swarm join-token) düzenli yedekleyin.
  • Veri Replikasyonu: PV (Persistent Volume) verilerini blok düzeyinde replikasyon yapabilen çözümlerle (Longhorn, Ceph) koruyun.

Felaket kurtarma tatbikatları, RTO (Recovery Time Objective) ve RPO (Recovery Point Objective) hedefleri doğrultusunda planlanmalı ve periyodik olarak test edilmelidir.

12. Performans Optimizasyonu
Hosting altyapısında maliyet ve kullanıcı deneyimi dengesi önemlidir:

  • Node Kaynak Planlaması: CPU, bellek, disk I/O ihtiyacını gerçek kullanım verilerine göre boyutlandırın.
  • Auto-Scaling: Docker Swarm’da doğrudan destek yoksa, dış politika tabanlı (Prometheus Alertmanager + Docker API) auto-scale betikleri oluşturun.
  • Image İyileştirme: Çok katmanlı (multi-stage) Dockerfile’larla gereksiz bağımlılıkları ekleyip image boyutunu küçültün.
  • Network Tuning: MTU ayarlarını, overlay tünel protokolüne uygun şekilde optimize edin; GENEVE veya VXLAN parametrelerini gözden geçirin.

Bu ayarlamalar, kullanıcıya giden sayfa yükleme hızını ve uygulama performansını doğrudan etkiler.

13. Gerçek Dünya Kullanım Senaryoları

  • E-Ticaret Altyapısı: 7/24 satış yapan platformlarda, ani trafik artışlarına karşı hızlı servis çoğaltma ve otomatik yeniden programlama imkânı. Blue/green dağıtım ile kesintisiz güncelleme.
  • Medya Streaming: Video segmenter ve CDN önbellek katmanlarını farklı overlay ağlarda yalıtarak, streaming uygulamanızın yüksek bant genişliği taleplerini karşılayın.
  • SaaS Uygulamaları: Mikroservis mimarisi ile geliştirilmiş API’lerinizi, farklı Docker Swarm node’larına dağıtarak, global ölçek sunun. Trafik yönlendirmeyi geo-DNS ve Traefik entegrasyonu ile optimize edin.

14. En İyi Uygulamalar ve İpuçları
Küme güvenliği için host ve container izolasyonu, AppArmor/SELinux profilleri oluşturun. Gereksiz container capabilities’leri kaldırın. Docker Engine için en son LTS sürümlerini takip edin. CI/CD pipeline’da imaj taraması (Trivy, Clair) entegre edin. Sürekli test (Smoke, integration) ve canary deploy stratejilerini benimseyin. YAML ve komut betiklerini versiyon kontrolünde tutun.

Sonuç
Docker Swarm, basitliği ve Docker altyapısıyla derin entegrasyonu sayesinde, küçük ve orta ölçekli hosting altyapıları için ideal bir konteyner orkestratörüdür. Doğru ağ tasarımı, güvenlik katmanları, izleme ve otomasyon stratejileriyle bir araya geldiğinde, yüksek erişilebilir, ölçeklenebilir ve yönetimi kolay bir hosting çözümü ortaya çıkar. Bu rehberi adım adım uygulayarak, hem operasyonel verimliliğinizi artırabilir hem de kullanıcılarınıza kesintisiz ve hızlı bir deneyim sunabilirsiniz.

Öne çıkarılan içerikler