format_list_bulletedBu İçerikte Bahsedilen Konular
- arrow_rightDocker Swarm Üzerinde Gelişmiş Servis Dağıtımı ve Güncelleme
- arrow_rightDocker Swarm Mimarisi ve Temel Kavramlar
- arrow_rightSwarm Modu Etkinleştirme
- arrow_rightNode Türleri ve Rolleri
- arrow_rightGelişmiş Servis Dağıtım Stratejileri
- arrow_right1. Replica Sayısı ile Dağıtım
- arrow_right2. Global Servisler
- arrow_right3. Deploy Specifikasyonu ile YAML Dosyası
- arrow_rightRolling Update Mekanizması
- arrow_rightUpdate Config Parametreleri
- arrow_rightÖrnek Rolling Update Uygulaması
- arrow_rightManual Rollback İşlemi
- arrow_rightHealth Check Yapılandırması
- arrow_rightHEALTHCHECK Direktifi
- arrow_rightService Health Yönetimi
- arrow_rightSecret Yönetimi ve Güvenlik
- arrow_rightSecret Oluşturma
- arrow_rightSecret Kullanımı
- arrow_rightNetworking ve Servis Keşfi
- arrow_rightOverlay Network
- arrow_rightServisler Arası İletişim
- arrow_rightYük Dengeleme ve Dış Erişim
- arrow_rightIngress Mesh Routing
- arrow_rightHarici Yük Dengeleyici Entegrasyonu
- arrow_rightYüksek Kullanılabilirlik ve Ölçeklendirme
- arrow_rightOtomatik Ölçeklendirme
- arrow_rightUpdate Strategy Türleri
- arrow_rightİzleme ve Troubleshooting
- arrow_rightTemel İzleme Komutları
- arrow_rightDaemon Log Analizi
Docker Swarm Üzerinde Gelişmiş Servis Dağıtımı ve Güncelleme
Docker Swarm, container orkestrasyonunun en güçlü araçlarından biridir ve modern mikrohizmet mimarilerinin temelini oluşturur. 2024 itibarıyla, kurumsal uygulamaların %67'si container tabanlı dağıtım kullanırken, bu oranın %45'i Docker Swarm veya Kubernetes tercih etmektedir. Bu kılavuzda, Docker Swarm üzerinde sunucu altyapısı üzerinde gelişmiş servis dağıtımı ve güncelleme stratejilerini detaylı olarak ele alacağız.
Docker Swarm Mimarisi ve Temel Kavramlar
Docker Swarm, Docker'ın native orkestrasyon çözümüdür ve Manager-Worker mimarisi üzerine inşa edilmiştir. Manager node'lar küme yönetimini üstlenirken, Worker node'lar container'ları çalıştırır.
Swarm Modu Etkinleştirme
Docker Swarm kullanmaya başlamak için öncelikle swarm modunu etkinleştirmeniz gerekir. Aşağıdaki komutla yeni bir swarm cluster oluşturabilirsiniz:
docker swarm init --advertise-addr <MANAGER_IP>
Manager node'lar, Raft consensus algorithm kullanarak küme durumunu tutarlı şekilde yönetir. Bu, üç veya daha fazla manager node önerildiği anlamına gelir; çünkü çoğunluk olmadan küme çalışmaya devam edemez.
Node Türleri ve Rolleri
Docker Swarm'da iki temel node türü bulunur:
- Manager Node: Swarm yönetimi, servis oluşturma ve scheduling işlemlerinden sorumludur.
- Worker Node: Servislerin çalıştığı ve container'ları barındıran node'lardır.
Yüksek kullanılabilirlik için minimum 3 manager node önerilir. Manager node sayısı arttıkça, kümenin dayanıklılığı artar ancak consensus süresi uzar.
Gelişmiş Servis Dağıtım Stratejileri
Docker Swarm'da servis dağıtımı, tek komutla basitçe yapılabileceği gibi, karmaşık yapılandırma dosyaları ile de gerçekleştirilebilir. İşte en yaygın kullanılan dağıtım yöntemleri:
1. Replica Sayısı ile Dağıtım
Temel replica tabanlı dağıtım, belirli sayıda container'ın çalışmasını garanti eder:
docker service create \
--name web-servisi \
--replicas 3 \
-p 80:80 \
nginx:latest
Bu komut, nginx imajından 3 replica oluşturur ve yük dengeleme otomatik olarak aktif hale gelir.
2. Global Servisler
Global servisler, her worker node üzerinde tam olarak bir container çalıştırır:
docker service create \
--name log-collector \
--mode global \
-v /var/log:/var/log \
fluent/fluentd:latest
Bu yapılandırma, özellikle log toplama ve izleme araçları için idealdir.
3. Deploy Specifikasyonu ile YAML Dosyası
Karmaşık yapılandırmalar için docker-compose.yml formatını kullanabilirsiniz:
version: '3.8'
services:
api:
image: myapi:latest
deploy:
replicas: 5
update_config:
parallelism: 2
delay: 10s
failure_action: rollback
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
environment:
- NODE_ENV=production
secrets:
- db_password
Bu YAML dosyası, güncelleme stratejisi, restart politikası ve secret yönetimini tek bir yapılandırmada birleştirir.
Rolling Update Mekanizması
Docker Swarm'ın en güçlü özelliklerinden biri olan rolling update, sıfır kesinti ile uygulama güncellemeleri yapmanızı sağlar.
Update Config Parametreleri
Rolling update davranışını kontrol eden kritik parametreler:
| Parametre | Açıklama | Önerilen Değer |
|---|---|---|
| parallelism | Aynı anda güncellenen container sayısı | 1-2 |
| delay | Güncellemeler arası bekleme süresi | 10-30s |
| failure_action | Hata durumunda yapılacak işlem | pause/rollback/continue |
| monitor | Güncelleme başarısı kontrol süresi | 5s-30s |
Örnek Rolling Update Uygulaması
docker service update \
--image myapi:v2.0.0 \
--update-parallelism 2 \
--update-delay 15s \
--update-failure-action rollback \
--update-monitor 10s \
--update-max-failure-ratio 0.3 \
myapi-servisi
Bu komut, servisi v2.0.0 sürümüne günceller. Her seferinde 2 container güncellenecek, 15 saniye beklenecek ve %30'dan fazla hata durumunda otomatik rollback yapılacaktır.
Manual Rollback İşlemi
Güncelleme sırasında bir sorun oluşursa, anında önceki sürüme dönebilirsiniz:
docker service rollback myapi-servisi
Rollback işlemi de tıpkı güncelleme gibi rolling update olarak gerçekleşir, yani kesinti yaşanmaz.
Health Check Yapılandırması
Container sağlığını izlemek, servis güvenilirliği için kritik öneme sahiptir. Docker, container içi health check mekanizması sunar.
HEALTHCHECK Direktifi
Dockerfile'da health check tanımlama:
FROM node:18-alpine
WORKDIR /app
COPY . .
RUN npm ci --only=production
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
CMD wget --no-verbose --tries=1 --spider http://localhost:3000/health || exit 1
CMD ["node", "server.js"]
Health check parametreleri:
- --interval: Kontroller arası süre (varsayılan: 30s)
- --timeout: Timeout süresi (varsayılan: 30s)
- --start-period: Başlangıç bekleme süresi (varsayılan: 0s)
- --retries: Başarısız sayısı (varsayılan: 3)
Service Health Yönetimi
Swarm'da servis düzeyinde health durumunu kontrol edebilirsiniz:
docker service ls --filter "health=healthy"
docker inspect --format='{{.Status.Health}}' <container_id>
Health check başarısız olan container'lar otomatik olarak yeniden başlatılır veya devre dışı bırakılır.
Secret Yönetimi ve Güvenlik
Docker Swarm, hassas verilerin (şifreler, API anahtarları, sertifikalar) güvenli yöetimini sağlar. Secrets, Raft encrypted store'da saklanır ve sadece yetkili container'lara iletilir.
Secret Oluşturma
echo "mysecretpassword" | docker secret create db_password -
docker secret create ssl_certificate /path/to/cert.pem
Secret Kullanımı
Secret'leri servisinizde kullanmak için:
docker service create \
--name db-servisi \
--secret db_password \
--secret ssl_certificate \
postgres:latest
Container içinde secret'ler /run/secrets/ dizininde erişilebilir durumdadır.
Güvenlik açısından, üretim ortamlarında veri merkezi seçimi ve secret yönetimi birlikte değerlendirilmelidir. SSL sertifikaları için NGINX SSL sertifika yönetimi rehberimizi inceleyebilirsiniz.
Networking ve Servis Keşfi
Docker Swarm, otomatik servis keşfi ve yük dengeleme sunar. Her servis, kendi sanal IP'si üzerinden erişilebilir durumdadır.
Overlay Network
Swarm modunda varsayılan olarak kullanılan overlay network, birden fazla host üzerinde container'ların birbiriyle iletişimini sağlar:
docker network create --driver overlay --attachable my-overlay-network
Overlay network, VXLAN teknolojisi kullanarak izole edilmiş bir ağ katmanı oluşturur.
Servisler Arası İletişim
Servis isimleri DNS ile otomatik olarak çözümlenir:
# web-servisi, db-servisi'ne bu şekilde erişir # db-servisi:5432 docker service create \ --name web-servisi \ --network my-overlay-network \ --env DB_HOST=db-servisi \ mywebapp:latestSwarm, DNS tabanlı yük dengeleme yaparak istekleri replica'lar arasında dağıtır.
Yük Dengeleme ve Dış Erişim
Ingress Mesh Routing
Docker Swarm, dış trafiği servislere dağıtmak için ingress mesh routing kullanır. Bir portu publish ettiğinizde, bu port tüm node'larda erişilebilir hale gelir:
docker service create \ --name web-servisi \ -p 8080:80 \ --replicas 4 \ nginx:latestBu yapılandırmada, hangi node'a istek atarsanız atın, istek uygun replica'ya yönlendirilir.
Harici Yük Dengeleyici Entegrasyonu
Büyük ölçekli dağıtımlarda, harici yük dengeleyici kullanmanız önerilir. Nginx veya HAProxy ile Docker Swarm entegrasyonu için SSL sertifika yönetimi rehberimizi inceleyebilirsiniz.
Yüksek Kullanılabilirlik ve Ölçeklendirme
Swarm'da yüksek kullanılabilirlik, replica sayısı ve dağıtım stratejileri ile sağlanır.
Otomatik Ölçeklendirme
Docker Swarm native olarak otomatik ölçeklendirme sunmaz, ancak harici araçlarla veya script'lerle gerçekleştirilebilir:
# CPU kullanımına göre replica sayısını ayarlama #!/bin/bash while true; do CPU=$(docker stats --no-stream --format "{{.CPUPerc}}" | head -1 | sed 's/%//') if (( $(echo "$CPU > 80" | bc -l) )); then docker service scale web-servisi=10 elif (( $(echo "$CPU < 30" | bc -l) )); then docker service scale web-servisi=3 fi sleep 60 doneBu basit script, CPU kullanımına göre replica sayısını dinamik olarak ayarlar.
Update Strategy Türleri
| Strateji | Açıklama | Kullanım Senaryosu |
|---|---|---|
| rolling | Varsayılan. Sırayla güncelleme yapar. | Genel kullanım |
| duplicate | Yeni replica'ları ekleyerek günceller. | Mavi-yeşil deployment |
| delayed | Belirli aralıklarla günceller. | Test ortamları |
Bu stratejileri uygulamak için deploy bölümünde update_strategy parametresini kullanabilirsiniz.
İzleme ve Troubleshooting
Swarm cluster'ınızı izlemek ve sorunları teşhis etmek için çeşitli araçlar mevcuttur.
Temel İzleme Komutları
# Servis durumunu izleme docker service ls docker service ps <servis_adı> # Servis detayları docker service inspect <servis_adı> # Container logs docker service logs -f <servis_adı> # Kaynak kullanımı docker stats $(docker ps --filter=mode=replicated -q)Daemon Log Analizi
Swarm sorunlarını teşhis etmek için daemon log'larını inceleyin:
journalctl -u docker -f --since "1 hour ago" # veya docker info | grep -i swarmAğ sorunları için ağ optimiz