🔗 Kubernetes Ekosistemi & Araç İlişkileri

Kubernetes Ekosistemi & Araç İlişkileri: Kubernetes tek başına bir araç değil — modern DevOps ekosisteminin merkezidir, ve K8s'nin Docker, Jenkins, Kafka ve Helm ile nasıl bağlan

Kubernetes tek başına bir araç değil — modern DevOps ekosisteminin merkezidir, ve K8s'nin Docker, Jenkins, Kafka ve Helm ile nasıl bağlandığını anlamak, seni temel K8s kullanıcısından Senior DevOps/QA Engineer'a taşıyan tam olarak budur. Peki Kubernetes neden tüm bunları kendisi yapmıyor da (image build et, CI çalıştır, mesajlaşmayı yönet, YAML şablonla) bu kadar başka araca ihtiyaç duyuyor? Çünkü Kubernetes'in tek işi container'ları güvenilir şekilde çalıştırmak ve iyileştirmektir — build, CI, mesajlaşma ve şablonlama mantığını ona eklemek, bir Java mimarının tek bir class'ın aynı zamanda kendi veritabanı, scheduler'ı ve logger'ı olmasına izin vermeyi reddetmesindeki aynı single-responsibility prensibini ihlal eder. Docker image'ı inşa eder, Jenkins NE ZAMAN deploy edileceğine karar verir, Helm NASIL deploy edileceğini şablonlar, Kafka çalışan pod'ların birbiriyle asenkron konuşmasını sağlar — Kubernetes ise sadece tanımlanan şeyi çalışır halde tutar. Gerçek bir incident'ta bu sınırı bilmemek, bir ekibin gerçek bug Jenkins pipeline'ının bozuk bir image inşa etmesindeyken saatlerce "neden pod'um sağlıksız" diye debug etmesine yol açar.

Docker ↔ Kubernetes: Temel

Docker image oluşturur, Kubernetes çalıştırır

Docker container image'ları oluşturur. Kubernetes bu image'ları büyük ölçekte ÇALIŞTIRIR. K8s artık Docker daemon'ı doğrudan kullanmıyor (K8s 1.20+ ile deprecated) — bunun yerine containerd veya CRI-O kullanıyor. Ama Docker image OLUŞTURMAK için hâlâ kullanılıyor. Java analojisi: Docker Maven'ın JAR'ı paketlemesi gibi, Kubernetes ise application server cluster'ının bunu çalıştırması gibi.

Jenkins ↔ Kubernetes: CI/CD Pipeline

Jenkins, Kubernetes'e build eder, test eder ve DEPLOY EDER. Bir Jenkinsfile pipeline şunları yapar: 1) Testleri çalıştırır, 2) Docker image oluşturur, 3) Registry'ye push eder, 4) kubectl ile K8s manifest'lerini uygular. K8s aynı zamanda Jenkins build agent'larını pod olarak ÇALIŞTIRABİLİR — her build temiz bir container alır, Java thread'i gibi.

Jenkinsfile — Kubernetes'e deploy eden pipeline

Micro Lab: Kubernetes YAML manifest repair

TODO satirini beklenen cozumdeki kritik satirla degistir. Bu gercek runtime degil; amac dogru yapinin yazilmasini kontrollu olarak pekistirmek.

Jenkins Pipeline'ının Kendisi Neden Bir K8s Pod'unda Çalışır?

Pipeline kendi platformunu kullanır

`agent { kubernetes {...} }` bloğu, CI ajanının KENDİSİNİN bir K8s pod'unda çalıştığı anlamına gelir — her build TEMİZ bir ortamda başlar.

Testler İMAJDAN ÖNCE çalışır

"Unit Tests" aşaması, herhangi bir Docker image inşa edilmeden ÖNCE gelir — bozuk kod asla imaja bile ulaşmaz.