Kubernetes Cluster Kurulumu (Adım Adım)
1. Giriş
Kubernetes (kısaca k8s), konteynerleştirilmiş uygulamaların orkestrasyonu için günümüzde en yaygın kullanılan platformdur. Mikroservis mimarileri, CI/CD hatları ve bulut altyapısının yaygınlaşması ile birlikte, güvenilir, ölçeklenebilir ve kendi kendini onarabilen altyapılar kurmak çok daha önemli hale geldi. Bu makalede, bir Kubernetes kümesinin neden kritik olduğunu, kimler için önemli olduğunu ve hangi operasyonel problemleri çözdüğünü ele alacağız.
Bu konu neden konuşuluyor?
- Konteyner tabanlı uygulamalar üretimde standart hale geldi ve bunların güvenilir yönetimi zorunlu.
- Bulut sağlayıcıları, hibrit ve çoklu bulut stratejileri Kubernetes ile kolaylaşır.
- Otomasyon, gözlemlenebilirlik ve hızlı dağıtım süreçleri işletme verimliliğini artırır.
Kimler için önemli?
Yazılım mühendisleri, platform mühendisleri, DevOps ve SRE ekipleri için Kubernetes, uygulama dağıtımının temel taşıdır. Ayrıca BT yöneticileri, güvenlik ekipleri ve veri mühendisleri de küme tasarımından etkilenir.
Hangi problemleri çözüyor?
Kubernetes sayesinde uygulama ölçeklendirme, hata toleransı, servis keşfi, yapılandırma yönetimi ve rolling update gibi canlıya alma süreçleri otomatik ve güvenilir biçimde yönetilir.
2. Kavramsal Temeller
Kurulumdan önce Kubernetes'in temel kavramlarını netleştirmek gerekir.
Kavramlar
- Cluster: Bir veya daha fazla kontrol düzlemi (control plane) ve işçi düğümlerinden (worker nodes) oluşan yönetim birimi.
- Control Plane: API Server, Controller Manager, Scheduler ve vsd gibi küme yönetim bileşenlerini içerir.
- Node: Kümeye katılan fiziksel veya sanal makine; üzerinde kubelet ve container runtime çalışır.
- Pod: Kubernetes'in dağıtım birimi; bir veya daha fazla konteyner içerir.
- Service: Pod'ları soyutlayarak ağ üzerinden ulaşılabilir hale getiren kaynak.
Mimari
Küme mimarisi tipik olarak kontrol düzlemi bileşenleri ile bunları yöneten işçi düğümlerinden oluşur. Ağ katmanında CNI (Container Network Interface) eklentileri (Calico, Flannel, Cilium), servis keşfi için kube-proxy veya eBPF tabanlı yaklaşımlar kullanılır. Persistant storage için CSI (Container Storage Interface) sürücüleri aracılığıyla blok ve dosya depolama sağlayıcıları entegre edilir.
Terminoloji
- Kubeadm: Kubernetes kümesi başlatmak için resmi ve basit araç.
- Kubespray: Ansible tabanlı daha karmaşık, üretim odaklı kurulum playbook'ları.
- Helm: Kubernetes üzerinde paket yönetimi için kullanılan şablon sistemi.
Bileşenler
Kontrol düzlemi bileşenleri (kube-apiserver, etcd, kube-scheduler, kube-controller-manager), veri deposu (etcd), ağ (CNI), container runtime (containerd, CRI-O) ve yönetim araçlarını (kubeadm, kubectl, Helm) içerir.
3. Nasıl Çalışır?
Kurulum sürecini ve çalışma mantığını teknik mimari bağlamında anlatalım.
Sistem Mimarisi
Bir üretim kümeye bakıldığında, genellikle birden fazla kontrol düzlemi (yüksek erişilebilirlik için) ve birden fazla worker node bulunur. Kontrol düzlemi bileşenleri etcd üzerinde konfigürasyon durumunu saklar. API Server, cluster içindeki tüm okunabilir/yazılabilir etkileşimlerin merkezi noktasıdır. Scheduler, Pod'ları uygun düğümlere atar; Controller Manager istenilen durumun korunmasını sağlar.
Bileşenler
- etcd: Dağıtılmış anahtar-değer veritabanı; cluster state burada tutulur. Yedekleme/restore stratejileri kritik önem taşır.
- kubelet: Her node üzerinde çalışan ajan; Pod manifest'lerini alır ve container runtime üzerinde başlatır.
- container runtime: containerd veya CRI-O gibi runtime'lar konteynerleri çalıştırır.
- CNI: Ağ arayüzü; Pod'lar arası ve Pod ↔ Service iletişimini sağlar.
Veri Akışı
Kullanıcı kubectl ile API Server'a istek gönderir. API Server istekleri doğrular, yetkilendirir ve etcd'ye yazılan durum bilgisini günceller. Controller'lar bu yeni istenen durum farkını algılar ve uygun aksiyonları gerçekleştirir. Kubeletler, node seviyesinde kube-apiserver'dan manifest alarak container runtime üzerinde konteynerleri başlatır.
Çalışma Mantığı (Kurulum Perspektifi)
- İşletim sistemi hazırlığı: zaman senkronizasyonu, swap kapatma, container runtime kurulumu, kernel parametreleri.
- Kontrol düzlemi başlatılması (kubeadm init veya alternatif araçlarla).
- Networking eklentisinin kurulması (Calico, Cilium vb.).
- Worker node'ların kontrol düzlemine katılması (kubeadm join).
- Yedekleme, monitoring ve logging çözümlerinin devreye alınması.
4. Gerçek Dünya Kullanımları
Kubernetes, pek çok büyük ölçekte organizasyon tarafından çeşitli amaçlarla kullanılır:
Netflix
Stresli trafik altında hizmet sürekliliği sağlamak, mikroservis dağıtımlarını yönetmek ve telemetri/observability ile sistem davranışını optimize etmek için Kubernetes benzeri orkestrasyon yaklaşımlarını kullanır.
Uber
Gerçek zamanlı mesajlaşma, yüksek yazma hacmi ve düşük gecikme gerektiren servislerde Kubernetes tabanlı veya benzer orkestrasyon platformlarını kullanır; edge ve global scale meseleleriyle başa çıkar.
Amazon
Managed Kubernetes (EKS) ve container altyapısını geniş ölçekte sunar; müşteri yükü ve altyapı operability açısından otomasyon kritik rol oynar.
OpenAI ve ML Hizmetleri
Model deployment, inference scaling ve resource scheduling (GPU, TPU) için Kubernetes veya Kubernetes-benzeri orkestratörlerden yararlanılır.
Stripe
Finansal kritik servislerde güvenlik, idempotency ve güçlü audit süreçleriyle Kubernetes altyapısını kullanır.
5. Avantajlar ve Sınırlamalar
Avantajlar
- Otomasyon ve self-healing: Pod yeniden başlatma, ReplicaSet ile istenen durumun korunması, rolling updates ile kesintisiz dağıtım.
- Taşınabilirlik: Çeşitli bulut sağlayıcıları ve on-prem ortamlar arasında standardizasyon.
- Ekosistem: Helm, Operators, Service Mesh (Istio/Linkerd), Prometheus gibi zengin araç desteği.
Dezavantajlar
- Öğrenme eğrisi: Karmaşık kavramlar ve operasyonal gereksinimler yeni ekipler için zorluk yaratır.
- Operasyonel maliyet: Etcd yönetimi, yedekleme, güvenlik yamaları ve izleme altyapısı ek maliyet getirir.
- Gizlilik ve güvenlik: Yanlış RBAC, network politika eksikliği veya container image güvenlik açıkları risk oluşturur.
6. Alternatifler ve Karşılaştırma
Aşağıdaki tablo Kubernetes ile diğer yaklaşımları karşılaştırır:
| Yaklaşım | Avantaj | Dezavantaj |
|---|---|---|
| Vanilla Kubernetes | Tam kontrol, geniş ekosistem | Yönetimsel yük yüksek |
| Managed K8s (EKS/GKE/AKS) | Operasyonel kolaylık, entegre özellikler | Vendor bağımlılığı, bazı kısıtlamalar |
| Platform-as-a-Service (Heroku vb.) | Hızlı deploy, minimal operasyon | Ölçeklendirme sınırları, maliyet |
| Nomad (HashiCorp) | Daha basit scheduler, multi-runtime destek | Kubernetes kadar geniş ekosistem yok |
7. En İyi Pratikler
Üretim ortamında Kubernetes kurarken dikkat edilmesi gereken uygulamalar:
Production kullanımı
- Kontrol düzlemini yüksek erişilebilirlik ile tasarla: birden fazla API server ve etcd üyesi kullan.
- etcd yedeklemelerini otomatikleştir ve restore prosedürlerini periyodik test et.
- Node ve cluster kimlik doğrulaması için güçlü RBAC, network politikaları ve pod security policy/OPA kullan.
Performans optimizasyonu
- Resource limit ve request'leri doğru ayarla; QoS sınıflandırmasını kullan.
- Horizontal Pod Autoscaler (HPA) ve Vertical Pod Autoscaler (VPA) kombinasyonunu düşün; hedef metrikleri iyi seç.
- Container image boyutlarını küçült; multi-stage build ve distroless imajlar tercih et.
Güvenlik
- Image scanner ve registry güvenliği kullanarak supply chain risklerini azalt.
- Network policy ile iletişimi sınırlı tut; default-deny stratejisi uygula.
- Secrets yönetimi için KMS/Vault entegrasyonları ve encryption at-rest uygulayın.
Ölçeklenebilirlik
- Cluster Federation veya multi-cluster stratejilerini planla; tek kümede tüm yükü tutma yaklaşımından kaçın.
- Node pool'larını iş yük tiplerine göre (GPU, yüksek-I/O) ayır.
- Observability (Prometheus, OpenTelemetry) ile SLA metriklerini yakından izle.
8. Sık Yapılan Hatalar
- etcd için yeterli disk I/O ve yedekleme stratejisi hazırlamamak.
- RBAC ve network policy uygulamadan geniş izinler vermek.
- Resource request/limit ayarlamadan autoscaling'e güvenmek.
- Monitoring ve alerting olmadan prod'a geçmek.
- Container imajlarını güvenlik taramasından geçirmemek.
9. Gelecek Trendler
- eBPF tabanlı ağ ve güvenlik: Daha hassas ve performanslı ağ politikaları için eBPF çözümleri yükseliyor.
- Serverless Kubernetes: Daha soyutlanmış, geliştirici odaklı çalışma modelleri (Knative, KEDA) yaygınlaşacak.
- AI destekli operasyon: Olay tespiti, anomali detection ve otomatik müdahale için ML tabanlı yaklaşımlar kullanılacak.
- Multi-cluster yönetim: Global uygulamalar için central control plane ve policy yönetimi daha fazla önem kazanacak.
Ek Bölümler
Sık Sorulan Sorular (FAQ)
- S: Kubernetes’i küçük bir projede kullanmalı mıyım?
C: Küçük projelerde Kubernetes yönetim maliyeti yüksek olabilir. Geliştirme aşamasında minikube, kind veya managed hizmetler (GKE, EKS, AKS) tercih edilebilir.
- S: Yüksek erişilebilir bir cluster için minimum kaç kontrol düzlemi olmalı?
C: Üretimde en az 3 kontrol düzlemi node’u ve odd (tek sayı) etcd replikası önerilir; bu quorum kaybını önler.
- S: etcd yedeği nasıl alınmalı?
C: etcd snapshot komutları ile düzenli yedek alınmalı, yedekler güvenli bir yerde saklanmalı ve restore prosedürü periyodik test edilmeli.
- S: Hangi CNI daha iyi?
C: İhtiyaca göre değişir. Calico güçlü network policy ve BGP yetenekleri ile kurumsal tercih; Cilium eBPF tabanlı ileri gözlemlenebilirlik ve performans getirir.
- S: Node kaybında ne olur?
C: Scheduler, Pod'ları yeniden planlamaya çalışır. Ancak stateful uygulamalarda veri tutarlılığı için doğru storage ve readiness probe stratejileri önemlidir.
- S: Kubeadm mi yoksa managed mi?
C: Kubeadm temel kontrol ve öğrenme için uygundur; ancak üretimde operasyonel yükü azaltmak için managed k8s hizmetleri tercih edilebilir.
- S: Cluster güvenliği için ilk adım nedir?
C: RBAC yapılandırması, network policy default-deny, image scanning ve secrets yönetimi en öncelikli adımlardır.
- S: Çoklu cluster yönetimini nasıl planlamalıyım?
C: Policy as code, GitOps yaklaşımları (ArgoCD/Flux), ve merkezi gözlem/log toplama çözümleri ile başlayın. Otomatik test ve rollout politikaları belirleyin.
Anahtar Kavramlar
- Control Plane
- Kubernetes API ve yönetim bileşenlerini barındıran mantıksal katman.
- etcd
- Cluster durumunu saklayan dağıtık anahtar-değer veritabanı.
- CNI
- Pod ağını sağlayan eklenti arayüzü (ör. Calico, Cilium).
- CSI
- Container Storage Interface — kalıcı depolama sağlayıcılarını entegre etme standardı.
Öğrenme Yol Haritası
Aşağıdaki adımlar, Kubernetes uzmanlığına giden pratik yol haritasını özetler:
- Temel Kavramlar (1-2 ay): Pod, Service, Deployment, ConfigMap, Secret, namespace ve temel kubectl komutları ile başlayın.
- Kapsüllü Ortam (2-3 ay): Minikube, kind üzerinde uygulama dağıtma, log ve metric toplama deneyimi.
- Ağın ve Depolamanın Derinliği (2-3 ay): CNI, network policy, CSI, persistent volume kavramlarına hakim olun.
- Güvenlik ve Operasyon (3-4 ay): RBAC, Pod Security Policies, image scanning, audit logging ve incident response süreçleri.
- Production Scale (sürekli): HA kontrol düzlemi, etcd yönetimi, backup/restore, multi-cluster ve GitOps pratikleri.
Pratik: küçük bir uygulamayı minikube/kind üzerinde çalıştırın, ardından managed bir cluster'a taşıyıp CI/CD pipeline ile otomatik deploy kurun. Bu döngü, öğrenmeyi hızlandırır.