Docker Compose ve Kubernetes: Tek Makinede Tanım mı, Kümede Orkestrasyon mu?
Docker Compose çok konteynerli uygulamayı tek makinede tanımlar ve çalıştırır, Kubernetes bir küme üzerinde iş yüklerini yönetir. Hangisi ne zaman?
Aynı soruya farklı ölçekte cevap
Docker Compose, birden fazla konteynerden oluşan bir uygulamayı tek bir YAML dosyasında tanımlayıp tek komutla ayağa kaldırmaya yarayan bir araçtır. Docker'ın belgelerine göre uygulamanın bileşenleri servis olarak tanımlanır; servisler ağlar üzerinden haberleşir, kalıcı verilerini birimlerde (volume) saklar. Varsayılan dosya adı compose.yaml'dır. Tipik kullanım, bir web uygulamasını veritabanı, önbellek ve kuyruk servisiyle birlikte bir geliştiricinin bilgisayarında ya da tek bir sunucuda çalıştırmaktır.
Kubernetes ise konteynerli iş yüklerini ve servisleri birden çok makineden oluşan bir küme üzerinde yöneten açık kaynaklı bir orkestrasyon platformudur. İstenen durumu bildirirsiniz (bu uygulamadan şu kadar kopya çalışsın, şu kaynakları kullansın, şu adresten erişilsin) ve Kubernetes bu durumu sürekli korumaya çalışır: çöken konteyneri yeniden başlatır, düğüm kaybolursa iş yükünü başka düğüme taşır, yükü kopyalar arasında dağıtır.
Kısacası Compose "Bu servisler birlikte nasıl çalışır?" sorusunu tek makine ölçeğinde yanıtlar; Kubernetes ise "Bu servisler bir makine filosunda kesintisiz ve ölçeklenebilir biçimde nasıl işletilir?" sorusunu.
Docker ile Kubernetes karşılaştırmasından farkı
Bu karşılaştırma sık sık Docker ile Kubernetes karşılaştırmasıyla karıştırılır. Docker, konteyner imajı oluşturma ve konteyner çalıştırma teknolojisidir; Kubernetes ise bu konteynerleri çalıştıran bir orkestratördür ve Docker ile üretilmiş standart imajları çalıştırabilir. Yani Docker ile Kubernetes çoğunlukla aynı zincirin farklı halkalarıdır.
Docker Compose ile Kubernetes ise gerçekten aynı soruya, yani çok konteynerli bir uygulamanın nasıl tanımlanıp çalıştırılacağına cevap verir. Her ikisi de bildirime dayalı YAML dosyaları kullanır, servisleri, ağları, depolamayı ve ortam değişkenlerini tanımlar. Aradaki fark ölçek, dayanıklılık ve işletim karmaşıklığındadır.
Ölçüt ölçüt Docker Compose ve Kubernetes
- Çalışma alanı: Docker Compose / tek bir Docker ana makinesi. Kubernetes / birden çok düğümden oluşan küme.
- Tanım dosyası: Docker Compose / tek bir compose.yaml dosyasında servisler, ağlar ve birimler. Kubernetes / Deployment, Service, ConfigMap, Secret, PersistentVolumeClaim, Ingress gibi ayrı kaynak tanımları.
- Temel birim: Docker Compose / servis ve onun konteynerleri. Kubernetes / bir ya da daha fazla konteyneri barındıran Pod.
- Kendi kendini onarma: Docker Compose / yeniden başlatma politikası ile sınırlı; makine giderse uygulama da gider. Kubernetes / sağlık kontrolleri, kopya yönetimi ve düğümler arası yeniden planlama.
- Ölçekleme: Docker Compose / aynı makinede elle kopya sayısı artırma. Kubernetes / yatay ölçekleme, kaynak metriklerine göre otomatik ölçekleme.
- Güncelleme: Docker Compose / servisleri yeniden oluşturma. Kubernetes / kademeli güncelleme ve geri alma.
- Ağ ve erişim: Docker Compose / proje ağı içinde servis adlarıyla erişim, port yayınlama. Kubernetes / Service soyutlaması, iç DNS, Ingress ya da Gateway API ile dış erişim.
- Öğrenme ve işletim yükü: Docker Compose / düşük, dakikalar içinde çalışır. Kubernetes / yüksek; küme kurulumu, ağ, güvenlik, izleme ve yükseltme bilgisi ister.
Hangi durumda hangisi?
Docker Compose şu durumlarda doğru seçimdir: • Yerel geliştirme ortamı: Her geliştiricinin uygulamayı bağımlılıklarıyla birlikte aynı biçimde çalıştırması. • Entegrasyon testleri: CI pipeline'ında veritabanı ve yardımcı servisleri test süresince ayağa kaldırmak. • Küçük ölçekli, tek sunucuda çalışan iç uygulamalar, prototipler ve demo ortamları. • Kesinti toleransı olan, trafiği öngörülebilir iş yükleri.
Kubernetes şu durumlarda öne çıkar: • Yüksek erişilebilirlik gerekiyor; tek bir sunucunun kaybı hizmeti durdurmamalı. • Trafik değişken ve servislerin bağımsız olarak ölçeklenmesi gerekiyor. • Çok sayıda mikroservis ve ekip, ortak bir platform üzerinde standart biçimde dağıtım yapacak. • Kademeli güncelleme, otomatik geri alma ve politika tabanlı güvenlik gibi işletim yetenekleri gerekiyor.
Örneğin küçük bir ekip, şirket içi raporlama aracını tek sunucuda Compose ile rahatça işletebilir. Aynı ekip müşteriye açık, gün içinde yükü dalgalanan bir ödeme servisini işletmeye başladığında ise Kubernetes ya da yönetilen bir Kubernetes hizmeti gündeme gelir.
Birlikte kullanım ve geçiş yolu
Compose ile Kubernetes aynı yaşam döngüsünde birlikte kullanılabilir: geliştirici bilgisayarında ve CI testlerinde Compose, test ve üretim ortamlarında Kubernetes. Bu modelin çalışması için imajların aynı olması ve yapılandırmanın ortam değişkenleriyle dışarıdan verilmesi gerekir.
Compose'dan Kubernetes'e geçerken izlenebilecek adımlar: • Her servisi ayrı bir Deployment ve Service olarak modelleyin; veritabanı gibi durum tutan servisler için StatefulSet ya da yönetilen veritabanı hizmetini değerlendirin. • Ortam değişkenlerini ConfigMap'e, parolaları Secret'a taşıyın. • Compose'daki depends_on sıralaması Kubernetes'te aynı biçimde çalışmaz; servislerin bağımlılıkları hazır olana kadar yeniden denemesi ve hazır olma (readiness) kontrolleri tanımlanmalıdır. • Birimleri PersistentVolumeClaim olarak yeniden tasarlayın. • Dönüşüm için Kompose gibi araçlar başlangıç dosyaları üretebilir; ancak çıktıyı kaynak sınırları, sağlık kontrolleri ve güvenlik ayarları açısından elle gözden geçirmek gerekir.
Sık yapılan hatalar
- Erken Kubernetes: Tek sunucuya sığan, ekip içinde Kubernetes bilgisi olmayan bir uygulama için küme kurmak, işletim yükünü faydanın önüne geçirir.
- Compose'u üretimde dayanıklı sanmak: Yeniden başlatma politikası konteyneri ayağa kaldırır, ancak sunucu arızasına karşı koruma sağlamaz; yedekleme ve izleme ayrıca kurulmalıdır.
- Kaynak sınırı tanımlamamak: Kubernetes'te CPU ve bellek istek ve sınırları belirlenmeyen Pod'lar, düğümlerde öngörülemez davranışa yol açar.
- Gizli bilgileri dosyaya gömmek: Hem compose.yaml hem Kubernetes tanımlarında parolaların düz metin olarak depoya girmesi yaygın bir güvenlik açığıdır.
Mindset programlarında bu araçları nerede öğrenirsiniz?
Temel Docker Eğitimi Docker'a giriş ve temel kavramlar, image ve container yönetimi, Dockerfile ile özel image oluşturma, volume ve network yönetimi, Docker Compose ile çoklu servis yönetimi ve Docker ile CI/CD entegrasyonu modüllerini içerir.
Kubernetes ile Orkestrasyon eğitimi Kubernetes mimarisi ve temel kavramlar, iş yükü kaynakları, servis ve ağ yönetimi, konfigürasyon ve gizli yönetimi, depolama ve kalıcılık, ölçekleme ve kaynak yönetimi ile güvenilirlik ve sorun giderme konularını işler. Küme yöneticiliği sertifikasına hazırlanmak isteyenler için Kubernetes Administrator (CKA) Hazırlık eğitimi küme kurulumu, RBAC, sorun giderme ve pratik sınav çalışmalarıyla devam eder.
İlgili Mindset programı
Temel Docker Eğitimi
Sık sorulan sorular
Docker Compose üretim ortamında kullanılabilir mi?
Kullanılabilir; tek sunucuda çalışan, kesinti toleransı olan ve trafiği öngörülebilir uygulamalar için uygun bir tercihtir. Ancak sunucu arızasında otomatik taşınma, düğümler arası yük dağıtımı ve otomatik ölçekleme sunmaz. Bu sınırlar kabul ediliyorsa, düzenli yedekleme, izleme ve güncelleme prosedürüyle birlikte Compose sade ve işletmesi kolay bir çözümdür.
Docker Swarm, Compose ile Kubernetes arasında bir ara yol mu?
Docker Swarm, Docker'ın kendi küme modudur ve Compose dosya biçimine benzer tanımlarla birden fazla makinede servis çalıştırmaya izin verir. Compose bilen bir ekip için öğrenme eşiği düşüktür. Kubernetes kadar geniş bir ekosistem ve bulut sağlayıcı desteği sunmadığı için seçim yapılırken ekibin uzun vadeli platform stratejisi dikkate alınmalıdır.
Kubernetes öğrenmeden önce Docker Compose bilmek gerekir mi?
Zorunlu değildir, ama faydalıdır. Compose ile çok konteynerli bir uygulamayı tanımlamak; servis, ağ, birim ve ortam değişkeni kavramlarını somut olarak öğretir. Kubernetes'teki Deployment, Service, ConfigMap ve PersistentVolumeClaim kaynakları bu kavramların küme ölçeğindeki karşılıklarıdır; temel oturduğunda Kubernetes kaynaklarını kavramak kolaylaşır.
Yerelde Kubernetes çalıştırmak Compose'un yerini tutar mı?
Minikube, kind ya da Docker Desktop'taki Kubernetes gibi araçlarla yerelde tek düğümlü bir küme kurulabilir. Bu yaklaşım, üretimde Kubernetes kullanan ekiplerin tanımlarını yerelde denemesi için değerlidir. Ancak daha fazla kaynak tüketir ve hızlı geliştirme döngüsünde Compose kadar pratik değildir; bu yüzden araçlar amaca göre birlikte kullanılabilir.
İlgili rehberler
İlgili eğitimler
Kategori: DevOps ve Bulut Teknolojileri