docker ile kubernetes’i kıyaslamak biraz tornavida ile sanayi sitesini kıyaslamak gibidir.
docker dediğin şey, uygulamanı kutuya koyar.
kubernetes ise o kutuları kamyona yükler, depoya dizer, vardiya planı yapar, elektrik kesilirse jeneratörü açar, kamyon devrilirse yenisini yollar, sonra da sana “her şey kontrol altında” diye dashboard gösterir.
docker ilk tanışmada candır.
“bende çalışıyor” cümlesini insanlık tarihinden silmeye en çok yaklaşmış araçlardan biridir. uygulamayı, bağımlılıkları, runtime’ı, environment ayarlarını alır; güzelce paketler. sonra sen o container’ı alır başka makinede çalıştırırsın. teoride huzur, pratikte yine biraz küfür ama eskiye göre medeniyet.
özellikle küçük projede docker hayat kurtarır.
local geliştirme ortamı kurarsın.
postgres’i ayağa kaldırırsın.
redis’i yanına koyarsın.
nginx’i eklersin.
bir `docker compose up -d` dersin, kendini devops mühendisi sanarsın.
buraya kadar her şey güzel.
sonra proje büyür.
bir servis olur üç servis. üç servis olur on iki servis. biri queue dinler, biri api döner, biri worker çalıştırır, biri cache ile konuşur, biri “ben aslında cron’um” diye ortalıkta gezer. container ölür. port çakışır. loglar dağılır. hangi servis hangi makinede çalışıyor belli olmaz. “abi bunu otomatik restart etsek, load balance yapsak, yeni sürümü yavaş yavaş çıkarsak, health check ile kontrol etsek” denmeye başlanır.
işte o noktada kubernetes kapıdan girer.
ama kubernetes öyle sakin sakin girmez. yanında yaml dosyaları, ingress controller, service, deployment, configmap, secret, namespace, volume, node, pod, replica, helm chart ve anlamadığın üç tane daha soyutlama ile gelir.
docker sana “al kardeşim container” der.
kubernetes sana “önce cluster kavramını içselleştir” der.
docker pratik adamdır.
kubernetes devlet dairesidir.
docker’da bir şey çalıştırmak için komut yazarsın.
kubernetes’te bir şey çalıştırmak için niyet beyan edersin. sonra controller’lar senin adına kaderle pazarlık yapar.
misal docker’da:
“şu container’ı çalıştır.”
kubernetes’te:
“ben şu image’dan üç replica istiyorum. şu kadar cpu ver. şu porttan servis et. ölürse dirilt. hazır değilse trafiğe çıkarma. yeni sürüm gelirse yavaş yavaş değiştir. secret’ı şuradan al. config’i buradan bağla. logları da mümkünse insan gibi göster.”
bu yüzden kubernetes ilk başta insana fazla gelir. hatta çoğu projede gerçekten fazladır.
iki sayfalık php sitesi için kubernetes kuran adam, bakkala helikopterle giden adamdır. olur mu? olur. mantıklı mı? çoğu zaman değil.
ama büyük sistemlerde, mikroservislerde, yoğun trafikte, çoklu ortam yönetiminde, otomatik ölçeklemede, zero-downtime deployment’ta, rollback ihtiyacında, observability tarafında kubernetes başka bir seviyedir. doğru kurulduğunda ciddi rahatlık sağlar. yanlış kurulduğunda ise şirket içinde ayrı bir tarikat doğurur.
docker daha çok bireysel geliştiriciye ve küçük ekibe “gel seni bu bağımlılık çukurundan çıkarayım” der.
kubernetes ise “sen artık büyümüşsün, gel biraz acı çekerek olgunlaşalım” der.
docker öğrenmesi kolay, faydası hızlı görülen bir araçtır.
kubernetes öğrenmesi zor, faydası ölçek büyüyünce anlaşılan bir ekosistemdir.
en komik tarafı da şudur: kubernetes kullanmak için zaten container gerekir. yani docker’ı öğrenmeden kubernetes’e atlayan adam, araba kullanmayı bilmeden filo yönetmeye çalışan müdür gibidir.
özetle:
docker, uygulamayı paketler.
kubernetes, o paketleri yönetir.
docker, “bende çalışıyor” sorununu azaltır.
kubernetes, “production’da nasıl ayakta tutacağız?” sorusuna cevap arar.
docker küçük projede ilaçtır.
kubernetes büyük projede düzendir.
ama her projeye kubernetes sokmaya çalışmak da teknoloji değil, özgüven zehirlenmesidir.
bazen bir `docker compose` yeter.
bazen de cluster şarttır.
mesele aracı kutsamak değil, derdin boyuna göre çekiç seçmektir.
bu kategoride başlık yok.
yükleniyor…
yükleniyor…